source: trunk/minix/drivers/dpeth/dp.h@ 20

Last change on this file since 20 was 9, checked in by Mattia Monga, 14 years ago

Minix 3.1.2a

File size: 7.2 KB
RevLine 
[9]1/*
2** File: eth.h Version 1.00, Jan. 14, 1997
3**
4** Author: Giovanni Falzoni <gfalzoni@inwind.it>
5**
6** Interface description for ethernet device driver
7**
8** $Log: dp.h,v $
9** Revision 1.4 2005/09/04 18:52:16 beng
10** Giovanni's fixes to dpeth:
11** Date: Sat, 03 Sep 2005 11:05:22 +0200
12** Subject: Minix 3.0.8
13**
14** Revision 1.3 2005/08/03 11:53:34 jnherder
15** Miscellaneous cleanups.
16**
17** Revision 1.2 2005/08/02 15:30:35 jnherder
18** Various updates to support dynamically starting drivers.
19** Output during initialization should be suppressed. Unless an error occurs.
20** Note that main() can now be main(int argc, char **argv) and arguments can
21** be passed when bringing up the driver.
22**
23** Revision 1.1 2005/06/29 10:16:46 beng
24** Import of dpeth 3c501/3c509b/.. ethernet driver by
25** Giovanni Falzoni <fgalzoni@inwind.it>.
26**
27** Revision 2.0 2005/06/26 16:16:46 lsodgf0
28** Initial revision for Minix 3.0.6
29**
30** $Id: dp.h,v 1.4 2005/09/04 18:52:16 beng Exp $
31*/
32
33#undef ENABLE_3C501
34#undef ENABLE_3C503
35#undef ENABLE_3C509
36#undef ENABLE_NE2000
37#undef ENABLE_WDETH
38#undef ENABLE_DP8390
39
40#define ENABLE_3C501 1 /* enable 3Com Etherlink I board */
41#define ENABLE_3C503 1 /* enable 3Com Etherlink II board */
42#define ENABLE_3C509 1 /* enable 3Com Etherlink III board */
43#define ENABLE_NE2000 1 /* enable Novell N2000 board */
44#define ENABLE_WDETH 1 /* enable Western Digital WD80x3 */
45
46#define ENABLE_DP8390 (ENABLE_3C503|ENABLE_WDETH|ENABLE_NE2000)
47#define HAVE_BUFFERS (ENABLE_3C501|ENABLE_3C509)
48
49#undef NULL
50#define NULL ((void *)0)
51#define NOT(x) (~(x))
52
53#if debug == 1
54# define DEBUG(statm) statm
55#else
56# define DEBUG(statm)
57#endif
58
59typedef struct _m_hdr_t { /* Buffer handling header */
60 struct _m_hdr_t *next;
61 int size;
62} m_hdr_t;
63
64typedef struct _buff_t { /* Receive/Transmit buffer header */
65 struct _buff_t *next;
66 int size;
67 int client;
68 char buffer[2];
69} buff_t;
70
71struct dpeth;
72struct iovec_dat;
73typedef void (*dp_eth_t) (struct dpeth *);
74typedef void (*dp_send_recv_t) (struct dpeth *, int, int);
75
76#if ENABLE_DP8390 == 1
77typedef void (*dp_user2nicf_t) (struct dpeth *, int, int);
78typedef void (*dp_nic2userf_t) (struct dpeth *, int, int);
79typedef void (*dp_getblock_t) (struct dpeth *, u16_t, int, void *);
80#endif
81
82#define DE_PORT_NR 2 /* Number of devices supported */
83#define SENDQ_NR 2 /* Size of the send queue */
84#define IOVEC_NR 16 /* Number of IOVEC entries at a time */
85
86typedef struct iovec_dat {
87 iovec_t iod_iovec[IOVEC_NR];
88 int iod_iovec_s;
89 int iod_proc_nr;
90 vir_bytes iod_iovec_addr;
91} iovec_dat_t;
92
93typedef struct dpeth {
94 /* The de_base_port field is the starting point of the probe. The
95 * conf routine also fills de_linmem and de_irq. If the probe routine
96 * knows the irq and/or memory address because they are hardwired in
97 * the board, the probe should modify these fields. Futhermore, the
98 * probe routine should also fill in de_initf and de_stopf fields
99 * with the appropriate function pointers and set de_prog_IO iff
100 * programmed I/O is to be used.
101 *
102 * The initf function fills the following fields. Only cards that do
103 * programmed I/O fill in the de_data_port field. In addition, the
104 * init routine has to fill in the sendq data structures. */
105
106 /* Board hardware interface */
107 port_t de_base_port;
108 port_t de_data_port; /* For boards using Prog. I/O for xmit/recv */
109
110 int de_irq;
111 int de_int_pending;
112 int de_hook; /* interrupt hook at kernel */
113
114 char de_name[8];
115
116#define DEI_DEFAULT 0x8000
117
118 phys_bytes de_linmem; /* For boards using shared memory */
119 unsigned short de_memsegm;
120 vir_bytes de_memoffs;
121 int de_ramsize; /* Size of on board memory */
122 int de_offset_page; /* Offset of shared memory page */
123
124 /* Board specific functions */
125 dp_eth_t de_initf;
126 dp_eth_t de_stopf;
127 dp_eth_t de_resetf;
128 dp_eth_t de_flagsf;
129 dp_eth_t de_getstatsf;
130 dp_eth_t de_dumpstatsf;
131 dp_eth_t de_interruptf;
132 dp_send_recv_t de_recvf;
133 dp_send_recv_t de_sendf;
134
135 ether_addr_t de_address; /* Ethernet Address */
136 eth_stat_t de_stat; /* Ethernet Statistics */
137 unsigned long bytes_Tx; /* Total bytes sent/received */
138 unsigned long bytes_Rx;
139
140#define SA_ADDR_LEN sizeof(ether_addr_t)
141
142 int de_flags; /* Send/Receive mode (Configuration) */
143
144#define DEF_EMPTY 0x0000
145#define DEF_READING 0x0001
146#define DEF_RECV_BUSY 0x0002
147#define DEF_ACK_RECV 0x0004
148#define DEF_SENDING 0x0010
149#define DEF_XMIT_BUSY 0x0020
150#define DEF_ACK_SEND 0x0040
151#define DEF_PROMISC 0x0100
152#define DEF_MULTI 0x0200
153#define DEF_BROAD 0x0400
154#define DEF_ENABLED 0x2000
155#define DEF_STOPPED 0x4000
156
157 int de_mode; /* Status of the Interface */
158
159#define DEM_DISABLED 0x0000
160#define DEM_SINK 0x0001
161#define DEM_ENABLED 0x0002
162
163 /* Temporary storage for RECV/SEND requests */
164 iovec_dat_t de_read_iovec;
165 iovec_dat_t de_write_iovec;
166 vir_bytes de_read_s;
167 vir_bytes de_send_s;
168 int de_client;
169/*
170 message de_sendmsg;
171 iovec_dat_t de_tmp_iovec;
172*/
173#if ENABLE_DP8390 == 1
174 /* For use by NS DP8390 driver */
175 port_t de_dp8390_port;
176 int de_prog_IO;
177 int de_16bit;
178 int de_startpage;
179 int de_stoppage;
180
181 /* Do it yourself send queue */
182 struct sendq {
183 int sq_filled; /* This buffer contains a packet */
184 int sq_size; /* with this size */
185 int sq_sendpage; /* starting page of the buffer */
186 } de_sendq[SENDQ_NR];
187 int de_sendq_nr;
188 int de_sendq_head; /* Enqueue at the head */
189 int de_sendq_tail; /* Dequeue at the tail */
190
191 dp_user2nicf_t de_user2nicf;
192 dp_nic2userf_t de_nic2userf;
193 dp_getblock_t de_getblockf;
194#endif
195
196#if ENABLE_3C509 == 1
197 /* For use by 3Com Etherlink III (3c509) driver */
198 port_t de_id_port;
199 port_t de_if_port;
200#endif
201
202#if ENABLE_3C501 == 1 || ENABLE_3C509 == 1
203 /* For use by 3Com Etherlink (3c501 and 3c509) driver */
204 buff_t *de_recvq_head;
205 buff_t *de_recvq_tail;
206 buff_t *de_xmitq_head;
207 buff_t *de_xmitq_tail;
208 u16_t de_recv_mode;
209 clock_t de_xmit_start;
210#endif
211
212} dpeth_t;
213
214/*
215 * Function definitions
216 */
217
218/* dp.c */
219void dp_next_iovec(iovec_dat_t * iovp);
220
221/* devio.c */
222#if defined USE_IOPL
223#include <ibm/portio.h>
224#else
225unsigned int inb(unsigned short int);
226unsigned int inw(unsigned short int);
227void insb(unsigned short int, int, void *, int);
228void insw(unsigned short int, int, void *, int);
229void outb(unsigned short int, unsigned long);
230void outw(unsigned short int, unsigned long);
231void outsb(unsigned short int, int, void *, int);
232void outsw(unsigned short int, int, void *, int);
233#endif
234
235/* netbuff.c */
236void *alloc_buff(dpeth_t *, int);
237void free_buff(dpeth_t *, void *);
238void init_buff(dpeth_t *, buff_t **);
239void mem2user(dpeth_t *, buff_t *);
240void user2mem(dpeth_t *, buff_t *);
241
242/* 3c501.c */
243#if ENABLE_3C501 == 1
244int el1_probe(dpeth_t *);
245#else
246#define el1_probe(x) (0)
247#endif
248
249/* 3c503.c */
250#if ENABLE_3C503 == 1
251int el2_probe(dpeth_t *);
252#else
253#define el2_probe(x) (0)
254#endif
255
256/* 3c509.c */
257#if ENABLE_3C509 == 1
258int el3_probe(dpeth_t *);
259#else
260#define el3_probe(x) (0)
261#endif
262
263/* ne.c */
264#if ENABLE_NE2000 == 1
265int ne_probe(dpeth_t * dep);
266#else
267#define ne_probe(x) (0)
268#endif
269
270/* wd.c */
271#if ENABLE_WDETH == 1
272int wdeth_probe(dpeth_t * dep);
273#else
274#define wdeth_probe(x) (0)
275#endif
276
277#define lock() (++dep->de_int_pending,sys_irqdisable(&dep->de_hook))
278#define unlock() do{int i=(--dep->de_int_pending)?0:sys_irqenable(&dep->de_hook);}while(0)
279#define milli_delay(t) tickdelay(1)
280
281/** dp.h **/
Note: See TracBrowser for help on using the repository browser.