patch-2_6_7-vs1_9_1_12
[linux-2.6.git] / drivers / net / sk_mca.h
1 #include <linux/version.h>
2
3 #ifndef _SK_MCA_INCLUDE_
4 #define _SK_MCA_INCLUDE_
5
6 #ifdef _SK_MCA_DRIVER_
7
8 /* version-dependent functions/structures */
9
10 #define SKMCA_READB(addr) isa_readb(addr)
11 #define SKMCA_READW(addr) isa_readw(addr)
12 #define SKMCA_WRITEB(data, addr) isa_writeb(data, addr)
13 #define SKMCA_WRITEW(data, addr) isa_writew(data, addr)
14 #define SKMCA_TOIO(dest, src, len) isa_memcpy_toio(dest, src, len)
15 #define SKMCA_FROMIO(dest, src, len) isa_memcpy_fromio(dest, src, len)
16 #define SKMCA_SETIO(dest, val, len) isa_memset_io(dest, val, len)
17
18 /* Adapter ID's */
19 #define SKNET_MCA_ID 0x6afd
20 #define SKNET_JUNIOR_MCA_ID 0x6be9
21
22 /* media enumeration - defined in a way that it fits onto the MC2+'s
23    POS registers... */
24
25 typedef enum { Media_10Base2, Media_10BaseT,
26         Media_10Base5, Media_Unknown, Media_Count
27 } skmca_medium;
28
29 /* private structure */
30 typedef struct {
31         unsigned int slot;      /* MCA-Slot-#                       */
32         unsigned int macbase;   /* base address of MAC address PROM */
33         unsigned int ioregaddr; /* address of I/O-register (Lo)     */
34         unsigned int ctrladdr;  /* address of control/stat register */
35         unsigned int cmdaddr;   /* address of I/O-command register  */
36         int nextrx;             /* index of next RX descriptor to
37                                    be read                          */
38         int nexttxput;          /* index of next free TX descriptor */
39         int nexttxdone;         /* index of next TX descriptor to 
40                                    be finished                      */
41         int txbusy;             /* # of busy TX descriptors         */
42         struct net_device_stats stat;   /* packet statistics            */
43         int realirq;            /* memorizes actual IRQ, even when 
44                                    currently not allocated          */
45         skmca_medium medium;    /* physical cannector               */
46         spinlock_t lock;
47 } skmca_priv;
48
49 /* card registers: control/status register bits */
50
51 #define CTRL_ADR_DATA      0    /* Bit 0 = 0 ->access data register  */
52 #define CTRL_ADR_RAP       1    /* Bit 0 = 1 ->access RAP register   */
53 #define CTRL_RW_WRITE      0    /* Bit 1 = 0 ->write register        */
54 #define CTRL_RW_READ       2    /* Bit 1 = 1 ->read register         */
55 #define CTRL_RESET_ON      0    /* Bit 3 = 0 ->reset board           */
56 #define CTRL_RESET_OFF     8    /* Bit 3 = 1 ->no reset of board     */
57
58 #define STAT_ADR_DATA      0    /* Bit 0 of ctrl register read back  */
59 #define STAT_ADR_RAP       1
60 #define STAT_RW_WRITE      0    /* Bit 1 of ctrl register read back  */
61 #define STAT_RW_READ       2
62 #define STAT_RESET_ON      0    /* Bit 3 of ctrl register read back  */
63 #define STAT_RESET_OFF     8
64 #define STAT_IRQ_ACT       0    /* interrupt pending                 */
65 #define STAT_IRQ_NOACT     16   /* no interrupt pending              */
66 #define STAT_IO_NOBUSY     0    /* no transfer busy                  */
67 #define STAT_IO_BUSY       32   /* transfer busy                     */
68
69 /* I/O command register bits */
70
71 #define IOCMD_GO           128  /* Bit 7 = 1 -> start register xfer  */
72
73 /* LANCE registers */
74
75 #define LANCE_CSR0         0    /* Status/Control                    */
76
77 #define CSR0_ERR           0x8000       /* general error flag                */
78 #define CSR0_BABL          0x4000       /* transmitter timeout               */
79 #define CSR0_CERR          0x2000       /* collision error                   */
80 #define CSR0_MISS          0x1000       /* lost Rx block                     */
81 #define CSR0_MERR          0x0800       /* memory access error               */
82 #define CSR0_RINT          0x0400       /* receiver interrupt                */
83 #define CSR0_TINT          0x0200       /* transmitter interrupt             */
84 #define CSR0_IDON          0x0100       /* initialization done               */
85 #define CSR0_INTR          0x0080       /* general interrupt flag            */
86 #define CSR0_INEA          0x0040       /* interrupt enable                  */
87 #define CSR0_RXON          0x0020       /* receiver enabled                  */
88 #define CSR0_TXON          0x0010       /* transmitter enabled               */
89 #define CSR0_TDMD          0x0008       /* force transmission now            */
90 #define CSR0_STOP          0x0004       /* stop LANCE                        */
91 #define CSR0_STRT          0x0002       /* start LANCE                       */
92 #define CSR0_INIT          0x0001       /* read initialization block         */
93
94 #define LANCE_CSR1         1    /* addr bit 0..15 of initialization  */
95 #define LANCE_CSR2         2    /*          16..23 block             */
96
97 #define LANCE_CSR3         3    /* Bus control                       */
98 #define CSR3_BCON_HOLD     0    /* Bit 0 = 0 -> BM1,BM0,HOLD         */
99 #define CSR3_BCON_BUSRQ    1    /* Bit 0 = 1 -> BUSAK0,BYTE,BUSRQ    */
100 #define CSR3_ALE_HIGH      0    /* Bit 1 = 0 -> ALE asserted high    */
101 #define CSR3_ALE_LOW       2    /* Bit 1 = 1 -> ALE asserted low     */
102 #define CSR3_BSWAP_OFF     0    /* Bit 2 = 0 -> no byte swap         */
103 #define CSR3_BSWAP_ON      4    /* Bit 2 = 1 -> byte swap            */
104
105 /* LANCE structures */
106
107 typedef struct {                /* LANCE initialization block        */
108         u16 Mode;               /* mode flags                        */
109         u8 PAdr[6];             /* MAC address                       */
110         u8 LAdrF[8];            /* Multicast filter                  */
111         u32 RdrP;               /* Receive descriptor                */
112         u32 TdrP;               /* Transmit descriptor               */
113 } LANCE_InitBlock;
114
115 /* Mode flags init block */
116
117 #define LANCE_INIT_PROM    0x8000       /* enable promiscous mode            */
118 #define LANCE_INIT_INTL    0x0040       /* internal loopback                 */
119 #define LANCE_INIT_DRTY    0x0020       /* disable retry                     */
120 #define LANCE_INIT_COLL    0x0010       /* force collision                   */
121 #define LANCE_INIT_DTCR    0x0008       /* disable transmit CRC              */
122 #define LANCE_INIT_LOOP    0x0004       /* loopback                          */
123 #define LANCE_INIT_DTX     0x0002       /* disable transmitter               */
124 #define LANCE_INIT_DRX     0x0001       /* disable receiver                  */
125
126 typedef struct {                /* LANCE Tx descriptor               */
127         u16 LowAddr;            /* bit 0..15 of address              */
128         u16 Flags;              /* bit 16..23 of address + Flags     */
129         u16 Len;                /* 2s complement of packet length    */
130         u16 Status;             /* Result of transmission            */
131 } LANCE_TxDescr;
132
133 #define TXDSCR_FLAGS_OWN   0x8000       /* LANCE owns descriptor             */
134 #define TXDSCR_FLAGS_ERR   0x4000       /* summary error flag                */
135 #define TXDSCR_FLAGS_MORE  0x1000       /* more than one retry needed?       */
136 #define TXDSCR_FLAGS_ONE   0x0800       /* one retry?                        */
137 #define TXDSCR_FLAGS_DEF   0x0400       /* transmission deferred?            */
138 #define TXDSCR_FLAGS_STP   0x0200       /* first packet in chain?            */
139 #define TXDSCR_FLAGS_ENP   0x0100       /* last packet in chain?             */
140
141 #define TXDSCR_STATUS_BUFF 0x8000       /* buffer error?                     */
142 #define TXDSCR_STATUS_UFLO 0x4000       /* silo underflow during transmit?   */
143 #define TXDSCR_STATUS_LCOL 0x1000       /* late collision?                   */
144 #define TXDSCR_STATUS_LCAR 0x0800       /* loss of carrier?                  */
145 #define TXDSCR_STATUS_RTRY 0x0400       /* retry error?                      */
146
147 typedef struct {                /* LANCE Rx descriptor               */
148         u16 LowAddr;            /* bit 0..15 of address              */
149         u16 Flags;              /* bit 16..23 of address + Flags     */
150         u16 MaxLen;             /* 2s complement of buffer length    */
151         u16 Len;                /* packet length                     */
152 } LANCE_RxDescr;
153
154 #define RXDSCR_FLAGS_OWN   0x8000       /* LANCE owns descriptor             */
155 #define RXDSCR_FLAGS_ERR   0x4000       /* summary error flag                */
156 #define RXDSCR_FLAGS_FRAM  0x2000       /* framing error flag                */
157 #define RXDSCR_FLAGS_OFLO  0x1000       /* FIFO overflow?                    */
158 #define RXDSCR_FLAGS_CRC   0x0800       /* CRC error?                        */
159 #define RXDSCR_FLAGS_BUFF  0x0400       /* buffer error?                     */
160 #define RXDSCR_FLAGS_STP   0x0200       /* first packet in chain?            */
161 #define RXDCSR_FLAGS_ENP   0x0100       /* last packet in chain?             */
162
163 /* RAM layout */
164
165 #define TXCOUNT            4    /* length of TX descriptor queue     */
166 #define LTXCOUNT           2    /* log2 of it                        */
167 #define RXCOUNT            4    /* length of RX descriptor queue     */
168 #define LRXCOUNT           2    /* log2 of it                        */
169
170 #define RAM_INITBASE       0    /* LANCE init block                  */
171 #define RAM_TXBASE         24   /* Start of TX descriptor queue      */
172 #define RAM_RXBASE         \
173 (RAM_TXBASE + (TXCOUNT * 8))    /* Start of RX descriptor queue      */
174 #define RAM_DATABASE       \
175 (RAM_RXBASE + (RXCOUNT * 8))    /* Start of data area for frames     */
176 #define RAM_BUFSIZE        1580 /* max. frame size - should never be
177                                    reached                           */
178
179 #endif                          /* _SK_MCA_DRIVER_ */
180
181 #endif  /* _SK_MCA_INCLUDE_ */