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