Ok. I didn't make 2.4.0 in 2000. Tough. I tried, but we had some
[davej-history.git] / drivers / net / ibmlana.h
blob58429842acdcc35732f6fb0df5672fdcb6c85b16
1 #ifndef _IBM_LANA_INCLUDE_
2 #define _IBM_LANA_INCLUDE_
4 #ifdef _IBM_LANA_DRIVER_
6 /* version-dependent functions/structures */
8 #if LINUX_VERSION_CODE >= 0x020318
9 #define IBMLANA_READB(addr) isa_readb(addr)
10 #define IBMLANA_TOIO(dest, src, len) isa_memcpy_toio(dest, src, len)
11 #define IBMLANA_FROMIO(dest, src, len) isa_memcpy_fromio(dest, src, len)
12 #define IBMLANA_SETIO(dest, val, len) isa_memset_io(dest, val, len)
13 #define IBMLANA_NETDEV net_device
14 #else
15 #define IBMLANA_READB(addr) readb(addr)
16 #define IBMLANA_TOIO(dest, src, len) memcpy_toio(dest, src, len)
17 #define IBMLANA_FROMIO(dest, src, len) memcpy_fromio(dest, src, len)
18 #define IBMLANA_SETIO(dest, val, len) memset_io(dest, val, len)
19 #define IBMLANA_NETDEV device
20 #endif
22 /* maximum packet size */
24 #define PKTSIZE 1524
26 /* number of transmit buffers */
28 #define TXBUFCNT 4
30 /* Adapter ID's */
31 #define IBM_LANA_ID 0xffe0
33 /* media enumeration - defined in a way that it fits onto the LAN/A's
34 POS registers... */
36 typedef enum { Media_10BaseT, Media_10Base5,
37 Media_Unknown, Media_10Base2, Media_Count
38 } ibmlana_medium;
40 /* private structure */
42 typedef struct {
43 unsigned int slot; /* MCA-Slot-# */
44 struct net_device_stats stat; /* packet statistics */
45 int realirq; /* memorizes actual IRQ, even when
46 currently not allocated */
47 ibmlana_medium medium; /* physical cannector */
48 u32 tdastart, txbufstart, /* addresses */
49 rrastart, rxbufstart, rdastart, rxbufcnt, txusedcnt;
50 int nextrxdescr, /* next rx descriptor to be used */
51 lastrxdescr, /* last free rx descriptor */
52 nexttxdescr, /* last tx descriptor to be used */
53 currtxdescr, /* tx descriptor currently tx'ed */
54 txused[TXBUFCNT]; /* busy flags */
55 } ibmlana_priv;
57 /* this card uses quite a lot of I/O ports...luckily the MCA bus decodes
58 a full 64K I/O range... */
60 #define IBM_LANA_IORANGE 0xa0
62 /* Command Register: */
64 #define SONIC_CMDREG 0x00
65 #define CMDREG_HTX 0x0001 /* halt transmission */
66 #define CMDREG_TXP 0x0002 /* start transmission */
67 #define CMDREG_RXDIS 0x0004 /* disable receiver */
68 #define CMDREG_RXEN 0x0008 /* enable receiver */
69 #define CMDREG_STP 0x0010 /* stop timer */
70 #define CMDREG_ST 0x0020 /* start timer */
71 #define CMDREG_RST 0x0080 /* software reset */
72 #define CMDREG_RRRA 0x0100 /* force SONIC to read first RRA */
73 #define CMDREG_LCAM 0x0200 /* force SONIC to read CAM descrs */
75 /* Data Configuration Register */
77 #define SONIC_DCREG 0x02
78 #define DCREG_EXBUS 0x8000 /* Extended Bus Mode */
79 #define DCREG_LBR 0x2000 /* Latched Bus Retry */
80 #define DCREG_PO1 0x1000 /* Programmable Outputs */
81 #define DCREG_PO0 0x0800
82 #define DCREG_SBUS 0x0400 /* Synchronous Bus Mode */
83 #define DCREG_USR1 0x0200 /* User Definable Pins */
84 #define DCREG_USR0 0x0100
85 #define DCREG_WC0 0x0000 /* 0..3 Wait States */
86 #define DCREG_WC1 0x0040
87 #define DCREG_WC2 0x0080
88 #define DCREG_WC3 0x00c0
89 #define DCREG_DW16 0x0000 /* 16 bit Bus Mode */
90 #define DCREG_DW32 0x0020 /* 32 bit Bus Mode */
91 #define DCREG_BMS 0x0010 /* Block Mode Select */
92 #define DCREG_RFT4 0x0000 /* 4/8/16/24 bytes RX Threshold */
93 #define DCREG_RFT8 0x0004
94 #define DCREG_RFT16 0x0008
95 #define DCREG_RFT24 0x000c
96 #define DCREG_TFT8 0x0000 /* 8/16/24/28 bytes TX Threshold */
97 #define DCREG_TFT16 0x0001
98 #define DCREG_TFT24 0x0002
99 #define DCREG_TFT28 0x0003
101 /* Receive Control Register */
103 #define SONIC_RCREG 0x04
104 #define RCREG_ERR 0x8000 /* accept damaged and collided pkts */
105 #define RCREG_RNT 0x4000 /* accept packets that are < 64 */
106 #define RCREG_BRD 0x2000 /* accept broadcasts */
107 #define RCREG_PRO 0x1000 /* promiscous mode */
108 #define RCREG_AMC 0x0800 /* accept all multicasts */
109 #define RCREG_LB_NONE 0x0000 /* no loopback */
110 #define RCREG_LB_MAC 0x0200 /* MAC loopback */
111 #define RCREG_LB_ENDEC 0x0400 /* ENDEC loopback */
112 #define RCREG_LB_XVR 0x0600 /* Transceiver loopback */
113 #define RCREG_MC 0x0100 /* Multicast received */
114 #define RCREG_BC 0x0080 /* Broadcast received */
115 #define RCREG_LPKT 0x0040 /* last packet in RBA */
116 #define RCREG_CRS 0x0020 /* carrier sense present */
117 #define RCREG_COL 0x0010 /* recv'd packet with collision */
118 #define RCREG_CRCR 0x0008 /* recv'd packet with CRC error */
119 #define RCREG_FAER 0x0004 /* recv'd packet with inv. framing */
120 #define RCREG_LBK 0x0002 /* recv'd loopback packet */
121 #define RCREG_PRX 0x0001 /* recv'd packet is OK */
123 /* Transmit Control Register */
125 #define SONIC_TCREG 0x06
126 #define TCREG_PINT 0x8000 /* generate interrupt after TDA read */
127 #define TCREG_POWC 0x4000 /* timer start out of window detect */
128 #define TCREG_CRCI 0x2000 /* inhibit CRC generation */
129 #define TCREG_EXDIS 0x1000 /* disable excessive deferral timer */
130 #define TCREG_EXD 0x0400 /* excessive deferral occured */
131 #define TCREG_DEF 0x0200 /* single deferral occured */
132 #define TCREG_NCRS 0x0100 /* no carrier detected */
133 #define TCREG_CRSL 0x0080 /* carrier lost */
134 #define TCREG_EXC 0x0040 /* excessive collisions occured */
135 #define TCREG_OWC 0x0020 /* out of window collision occured */
136 #define TCREG_PMB 0x0008 /* packet monitored bad */
137 #define TCREG_FU 0x0004 /* FIFO underrun */
138 #define TCREG_BCM 0x0002 /* byte count mismatch of fragments */
139 #define TCREG_PTX 0x0001 /* packet transmitted OK */
141 /* Interrupt Mask Register */
143 #define SONIC_IMREG 0x08
144 #define IMREG_BREN 0x4000 /* interrupt when bus retry occured */
145 #define IMREG_HBLEN 0x2000 /* interrupt when heartbeat lost */
146 #define IMREG_LCDEN 0x1000 /* interrupt when CAM loaded */
147 #define IMREG_PINTEN 0x0800 /* interrupt when PINT in TDA set */
148 #define IMREG_PRXEN 0x0400 /* interrupt when packet received */
149 #define IMREG_PTXEN 0x0200 /* interrupt when packet was sent */
150 #define IMREG_TXEREN 0x0100 /* interrupt when send failed */
151 #define IMREG_TCEN 0x0080 /* interrupt when timer completed */
152 #define IMREG_RDEEN 0x0040 /* interrupt when RDA exhausted */
153 #define IMREG_RBEEN 0x0020 /* interrupt when RBA exhausted */
154 #define IMREG_RBAEEN 0x0010 /* interrupt when RBA too short */
155 #define IMREG_CRCEN 0x0008 /* interrupt when CRC counter rolls */
156 #define IMREG_FAEEN 0x0004 /* interrupt when FAE counter rolls */
157 #define IMREG_MPEN 0x0002 /* interrupt when MP counter rolls */
158 #define IMREG_RFOEN 0x0001 /* interrupt when Rx FIFO overflows */
160 /* Interrupt Status Register */
162 #define SONIC_ISREG 0x0a
163 #define ISREG_BR 0x4000 /* bus retry occured */
164 #define ISREG_HBL 0x2000 /* heartbeat lost */
165 #define ISREG_LCD 0x1000 /* CAM loaded */
166 #define ISREG_PINT 0x0800 /* PINT in TDA set */
167 #define ISREG_PKTRX 0x0400 /* packet received */
168 #define ISREG_TXDN 0x0200 /* packet was sent */
169 #define ISREG_TXER 0x0100 /* send failed */
170 #define ISREG_TC 0x0080 /* timer completed */
171 #define ISREG_RDE 0x0040 /* RDA exhausted */
172 #define ISREG_RBE 0x0020 /* RBA exhausted */
173 #define ISREG_RBAE 0x0010 /* RBA too short for received frame */
174 #define ISREG_CRC 0x0008 /* CRC counter rolls over */
175 #define ISREG_FAE 0x0004 /* FAE counter rolls over */
176 #define ISREG_MP 0x0002 /* MP counter rolls over */
177 #define ISREG_RFO 0x0001 /* Rx FIFO overflows */
179 #define SONIC_UTDA 0x0c /* current transmit descr address */
180 #define SONIC_CTDA 0x0e
182 #define SONIC_URDA 0x1a /* current receive descr address */
183 #define SONIC_CRDA 0x1c
185 #define SONIC_CRBA0 0x1e /* current receive buffer address */
186 #define SONIC_CRBA1 0x20
188 #define SONIC_RBWC0 0x22 /* word count in receive buffer */
189 #define SONIC_RBWC1 0x24
191 #define SONIC_EOBC 0x26 /* minimum space to be free in RBA */
193 #define SONIC_URRA 0x28 /* upper address of CDA & Recv Area */
195 #define SONIC_RSA 0x2a /* start of receive resource area */
197 #define SONIC_REA 0x2c /* end of receive resource area */
199 #define SONIC_RRP 0x2e /* resource read pointer */
201 #define SONIC_RWP 0x30 /* resource write pointer */
203 #define SONIC_CAMEPTR 0x42 /* CAM entry pointer */
205 #define SONIC_CAMADDR2 0x44 /* CAM address ports */
206 #define SONIC_CAMADDR1 0x46
207 #define SONIC_CAMADDR0 0x48
209 #define SONIC_CAMPTR 0x4c /* lower address of CDA */
211 #define SONIC_CAMCNT 0x4e /* # of CAM descriptors to load */
213 /* Data Configuration Register 2 */
215 #define SONIC_DCREG2 0x7e
216 #define DCREG2_EXPO3 0x8000 /* extended programmable outputs */
217 #define DCREG2_EXPO2 0x4000
218 #define DCREG2_EXPO1 0x2000
219 #define DCREG2_EXPO0 0x1000
220 #define DCREG2_HD 0x0800 /* heartbeat disable */
221 #define DCREG2_JD 0x0200 /* jabber timer disable */
222 #define DCREG2_AUTO 0x0100 /* enable AUI/TP auto selection */
223 #define DCREG2_XWRAP 0x0040 /* TP transceiver loopback */
224 #define DCREG2_PH 0x0010 /* HOLD request timing */
225 #define DCREG2_PCM 0x0004 /* packet compress when matched */
226 #define DCREG2_PCNM 0x0002 /* packet compress when not matched */
227 #define DCREG2_RJCM 0x0001 /* inverse packet match via CAM */
229 /* Board Control Register: Enable RAM, Interrupts... */
231 #define BCMREG 0x80
232 #define BCMREG_RAMEN 0x80 /* switch over to RAM */
233 #define BCMREG_IPEND 0x40 /* interrupt pending ? */
234 #define BCMREG_RESET 0x08 /* reset board */
235 #define BCMREG_16BIT 0x04 /* adapter in 16-bit slot */
236 #define BCMREG_RAMWIN 0x02 /* enable RAM window */
237 #define BCMREG_IEN 0x01 /* interrupt enable */
239 /* MAC Address PROM */
241 #define MACADDRPROM 0x92
243 /* structure of a CAM entry */
245 typedef struct {
246 u32 index; /* pointer into CAM area */
247 u32 addr0; /* address part (bits 0..15 used) */
248 u32 addr1;
249 u32 addr2;
250 } camentry_t;
252 /* structure of a receive resource */
254 typedef struct {
255 u32 startlo; /* start address (bits 0..15 used) */
256 u32 starthi;
257 u32 cntlo; /* size in 16-bit quantities */
258 u32 cnthi;
259 } rra_t;
261 /* structure of a receive descriptor */
263 typedef struct {
264 u32 status; /* packet status */
265 u32 length; /* length in bytes */
266 u32 startlo; /* start address */
267 u32 starthi;
268 u32 seqno; /* frame sequence */
269 u32 link; /* pointer to next descriptor */
270 /* bit 0 = EOL */
271 u32 inuse; /* !=0 --> free for SONIC to write */
272 } rda_t;
274 /* structure of a transmit descriptor */
276 typedef struct {
277 u32 status; /* transmit status */
278 u32 config; /* value for TCR */
279 u32 length; /* total length */
280 u32 fragcount; /* number of fragments */
281 u32 startlo; /* start address of fragment */
282 u32 starthi;
283 u32 fraglength; /* length of this fragment */
284 /* more address/length triplets may */
285 /* follow here */
286 u32 link; /* pointer to next descriptor */
287 /* bit 0 = EOL */
288 } tda_t;
290 #endif /* _IBM_LANA_DRIVER_ */
292 extern int ibmlana_probe(struct IBMLANA_NETDEV *);
295 #endif /* _IBM_LANA_INCLUDE_ */