00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 FILE_LICENCE ( GPL2_OR_LATER );
00038
00039
00040
00041
00042
00043
00044 #define FALSE 0
00045 #define TRUE 1
00046
00047 #define TLAN_MIN_FRAME_SIZE 64
00048 #define TLAN_MAX_FRAME_SIZE 1600
00049
00050 #define TLAN_NUM_RX_LISTS 4
00051 #define TLAN_NUM_TX_LISTS 2
00052
00053 #define TLAN_IGNORE 0
00054 #define TLAN_RECORD 1
00055
00056
00057
00058 #define TLAN_DEBUG_GNRL 0x0001
00059 #define TLAN_DEBUG_TX 0x0002
00060 #define TLAN_DEBUG_RX 0x0004
00061 #define TLAN_DEBUG_LIST 0x0008
00062 #define TLAN_DEBUG_PROBE 0x0010
00063
00064 #define TX_TIMEOUT (10*HZ)
00065 #define MAX_TLAN_BOARDS 8
00066
00067
00068
00069
00070
00071
00072
00073 #define PCI_DEVICE_ID_NETELLIGENT_10_T2 0xB012
00074 #define PCI_DEVICE_ID_NETELLIGENT_10_100_WS_5100 0xB030
00075 #ifndef PCI_DEVICE_ID_OLICOM_OC2183
00076 #define PCI_DEVICE_ID_OLICOM_OC2183 0x0013
00077 #endif
00078 #ifndef PCI_DEVICE_ID_OLICOM_OC2325
00079 #define PCI_DEVICE_ID_OLICOM_OC2325 0x0012
00080 #endif
00081 #ifndef PCI_DEVICE_ID_OLICOM_OC2326
00082 #define PCI_DEVICE_ID_OLICOM_OC2326 0x0014
00083 #endif
00084
00085 typedef struct tlan_adapter_entry {
00086 u16 vendorId;
00087 u16 deviceId;
00088 char *deviceLabel;
00089 u32 flags;
00090 u16 addrOfs;
00091 } TLanAdapterEntry;
00092
00093 #define TLAN_ADAPTER_NONE 0x00000000
00094 #define TLAN_ADAPTER_UNMANAGED_PHY 0x00000001
00095 #define TLAN_ADAPTER_BIT_RATE_PHY 0x00000002
00096 #define TLAN_ADAPTER_USE_INTERN_10 0x00000004
00097 #define TLAN_ADAPTER_ACTIVITY_LED 0x00000008
00098
00099 #define TLAN_SPEED_DEFAULT 0
00100 #define TLAN_SPEED_10 10
00101 #define TLAN_SPEED_100 100
00102
00103 #define TLAN_DUPLEX_DEFAULT 0
00104 #define TLAN_DUPLEX_HALF 1
00105 #define TLAN_DUPLEX_FULL 2
00106
00107
00108
00109
00110
00111
00112
00113
00114 #define EISA_ID 0xc80
00115 #define EISA_ID0 0xc80
00116 #define EISA_ID1 0xc81
00117 #define EISA_ID2 0xc82
00118 #define EISA_ID3 0xc83
00119 #define EISA_CR 0xc84
00120 #define EISA_REG0 0xc88
00121 #define EISA_REG1 0xc89
00122 #define EISA_REG2 0xc8a
00123 #define EISA_REG3 0xc8f
00124 #define EISA_APROM 0xc90
00125
00126
00127
00128
00129
00130
00131
00132
00133 #define TLAN_BUFFERS_PER_LIST 10
00134 #define TLAN_LAST_BUFFER 0x80000000
00135 #define TLAN_CSTAT_UNUSED 0x8000
00136 #define TLAN_CSTAT_FRM_CMP 0x4000
00137 #define TLAN_CSTAT_READY 0x3000
00138 #define TLAN_CSTAT_EOC 0x0800
00139 #define TLAN_CSTAT_RX_ERROR 0x0400
00140 #define TLAN_CSTAT_PASS_CRC 0x0200
00141 #define TLAN_CSTAT_DP_PR 0x0100
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153 #define TLAN_PHY_MAX_ADDR 0x1F
00154 #define TLAN_PHY_NONE 0x20
00155
00156
00157
00158
00159
00160
00161
00162
00163 #define TLAN_TIMER_LINK_BEAT 1
00164 #define TLAN_TIMER_ACTIVITY 2
00165 #define TLAN_TIMER_PHY_PDOWN 3
00166 #define TLAN_TIMER_PHY_PUP 4
00167 #define TLAN_TIMER_PHY_RESET 5
00168 #define TLAN_TIMER_PHY_START_LINK 6
00169 #define TLAN_TIMER_PHY_FINISH_AN 7
00170 #define TLAN_TIMER_FINISH_RESET 8
00171
00172 #define TLAN_TIMER_ACT_DELAY (HZ/10)
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182 #define TLAN_EEPROM_ACK 0
00183 #define TLAN_EEPROM_STOP 1
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193 #define TLAN_HOST_CMD 0x00
00194 #define TLAN_HC_GO 0x80000000
00195 #define TLAN_HC_STOP 0x40000000
00196 #define TLAN_HC_ACK 0x20000000
00197 #define TLAN_HC_CS_MASK 0x1FE00000
00198 #define TLAN_HC_EOC 0x00100000
00199 #define TLAN_HC_RT 0x00080000
00200 #define TLAN_HC_NES 0x00040000
00201 #define TLAN_HC_AD_RST 0x00008000
00202 #define TLAN_HC_LD_TMR 0x00004000
00203 #define TLAN_HC_LD_THR 0x00002000
00204 #define TLAN_HC_REQ_INT 0x00001000
00205 #define TLAN_HC_INT_OFF 0x00000800
00206 #define TLAN_HC_INT_ON 0x00000400
00207 #define TLAN_HC_AC_MASK 0x000000FF
00208 #define TLAN_CH_PARM 0x04
00209 #define TLAN_DIO_ADR 0x08
00210 #define TLAN_DA_ADR_INC 0x8000
00211 #define TLAN_DA_RAM_ADR 0x4000
00212 #define TLAN_HOST_INT 0x0A
00213 #define TLAN_HI_IV_MASK 0x1FE0
00214 #define TLAN_HI_IT_MASK 0x001C
00215 #define TLAN_DIO_DATA 0x0C
00216
00217
00218
00219
00220 #define TLAN_NET_CMD 0x00
00221 #define TLAN_NET_CMD_NRESET 0x80
00222 #define TLAN_NET_CMD_NWRAP 0x40
00223 #define TLAN_NET_CMD_CSF 0x20
00224 #define TLAN_NET_CMD_CAF 0x10
00225 #define TLAN_NET_CMD_NOBRX 0x08
00226 #define TLAN_NET_CMD_DUPLEX 0x04
00227 #define TLAN_NET_CMD_TRFRAM 0x02
00228 #define TLAN_NET_CMD_TXPACE 0x01
00229 #define TLAN_NET_SIO 0x01
00230 #define TLAN_NET_SIO_MINTEN 0x80
00231 #define TLAN_NET_SIO_ECLOK 0x40
00232 #define TLAN_NET_SIO_ETXEN 0x20
00233 #define TLAN_NET_SIO_EDATA 0x10
00234 #define TLAN_NET_SIO_NMRST 0x08
00235 #define TLAN_NET_SIO_MCLK 0x04
00236 #define TLAN_NET_SIO_MTXEN 0x02
00237 #define TLAN_NET_SIO_MDATA 0x01
00238 #define TLAN_NET_STS 0x02
00239 #define TLAN_NET_STS_MIRQ 0x80
00240 #define TLAN_NET_STS_HBEAT 0x40
00241 #define TLAN_NET_STS_TXSTOP 0x20
00242 #define TLAN_NET_STS_RXSTOP 0x10
00243 #define TLAN_NET_STS_RSRVD 0x0F
00244 #define TLAN_NET_MASK 0x03
00245 #define TLAN_NET_MASK_MASK7 0x80
00246 #define TLAN_NET_MASK_MASK6 0x40
00247 #define TLAN_NET_MASK_MASK5 0x20
00248 #define TLAN_NET_MASK_MASK4 0x10
00249 #define TLAN_NET_MASK_RSRVD 0x0F
00250 #define TLAN_NET_CONFIG 0x04
00251 #define TLAN_NET_CFG_RCLK 0x8000
00252 #define TLAN_NET_CFG_TCLK 0x4000
00253 #define TLAN_NET_CFG_BIT 0x2000
00254 #define TLAN_NET_CFG_RXCRC 0x1000
00255 #define TLAN_NET_CFG_PEF 0x0800
00256 #define TLAN_NET_CFG_1FRAG 0x0400
00257 #define TLAN_NET_CFG_1CHAN 0x0200
00258 #define TLAN_NET_CFG_MTEST 0x0100
00259 #define TLAN_NET_CFG_PHY_EN 0x0080
00260 #define TLAN_NET_CFG_MSMASK 0x007F
00261 #define TLAN_MAN_TEST 0x06
00262 #define TLAN_DEF_VENDOR_ID 0x08
00263 #define TLAN_DEF_DEVICE_ID 0x0A
00264 #define TLAN_DEF_REVISION 0x0C
00265 #define TLAN_DEF_SUBCLASS 0x0D
00266 #define TLAN_DEF_MIN_LAT 0x0E
00267 #define TLAN_DEF_MAX_LAT 0x0F
00268 #define TLAN_AREG_0 0x10
00269 #define TLAN_AREG_1 0x16
00270 #define TLAN_AREG_2 0x1C
00271 #define TLAN_AREG_3 0x22
00272 #define TLAN_HASH_1 0x28
00273 #define TLAN_HASH_2 0x2C
00274 #define TLAN_GOOD_TX_FRMS 0x30
00275 #define TLAN_TX_UNDERUNS 0x33
00276 #define TLAN_GOOD_RX_FRMS 0x34
00277 #define TLAN_RX_OVERRUNS 0x37
00278 #define TLAN_DEFERRED_TX 0x38
00279 #define TLAN_CRC_ERRORS 0x3A
00280 #define TLAN_CODE_ERRORS 0x3B
00281 #define TLAN_MULTICOL_FRMS 0x3C
00282 #define TLAN_SINGLECOL_FRMS 0x3E
00283 #define TLAN_EXCESSCOL_FRMS 0x40
00284 #define TLAN_LATE_COLS 0x41
00285 #define TLAN_CARRIER_LOSS 0x42
00286 #define TLAN_ACOMMIT 0x43
00287 #define TLAN_LED_REG 0x44
00288 #define TLAN_LED_ACT 0x10
00289 #define TLAN_LED_LINK 0x01
00290 #define TLAN_BSIZE_REG 0x45
00291 #define TLAN_MAX_RX 0x46
00292 #define TLAN_INT_DIS 0x48
00293 #define TLAN_ID_TX_EOC 0x04
00294 #define TLAN_ID_RX_EOF 0x02
00295 #define TLAN_ID_RX_EOC 0x01
00296
00297
00298
00299
00300
00301 #define TLAN_INT_NUMBER_OF_INTS 8
00302
00303 #define TLAN_INT_NONE 0x0000
00304 #define TLAN_INT_TX_EOF 0x0001
00305 #define TLAN_INT_STAT_OVERFLOW 0x0002
00306 #define TLAN_INT_RX_EOF 0x0003
00307 #define TLAN_INT_DUMMY 0x0004
00308 #define TLAN_INT_TX_EOC 0x0005
00309 #define TLAN_INT_STATUS_CHECK 0x0006
00310 #define TLAN_INT_RX_EOC 0x0007
00311
00312
00313
00314
00315
00316
00317
00318 #define TLAN_TLPHY_ID 0x10
00319 #define TLAN_TLPHY_CTL 0x11
00320 #define TLAN_TC_IGLINK 0x8000
00321 #define TLAN_TC_SWAPOL 0x4000
00322 #define TLAN_TC_AUISEL 0x2000
00323 #define TLAN_TC_SQEEN 0x1000
00324 #define TLAN_TC_MTEST 0x0800
00325 #define TLAN_TC_RESERVED 0x07F8
00326 #define TLAN_TC_NFEW 0x0004
00327 #define TLAN_TC_INTEN 0x0002
00328 #define TLAN_TC_TINT 0x0001
00329 #define TLAN_TLPHY_STS 0x12
00330 #define TLAN_TS_MINT 0x8000
00331 #define TLAN_TS_PHOK 0x4000
00332 #define TLAN_TS_POLOK 0x2000
00333 #define TLAN_TS_TPENERGY 0x1000
00334 #define TLAN_TS_RESERVED 0x0FFF
00335 #define TLAN_TLPHY_PAR 0x19
00336 #define TLAN_PHY_CIM_STAT 0x0020
00337 #define TLAN_PHY_SPEED_100 0x0040
00338 #define TLAN_PHY_DUPLEX_FULL 0x0080
00339 #define TLAN_PHY_AN_EN_STAT 0x0400
00340
00341
00342 #define NAT_SEM_ID1 0x2000
00343 #define NAT_SEM_ID2 0x5C01
00344 #define LEVEL1_ID1 0x7810
00345 #define LEVEL1_ID2 0x0000
00346
00347 #define CIRC_INC( a, b ) if ( ++a >= b ) a = 0
00348
00349
00350
00351 static inline u8 TLan_DioRead8(u16 base_addr, u16 internal_addr)
00352 {
00353 outw(internal_addr, base_addr + TLAN_DIO_ADR);
00354 return (inb((base_addr + TLAN_DIO_DATA) + (internal_addr & 0x3)));
00355
00356 }
00357
00358
00359
00360
00361 static inline u16 TLan_DioRead16(u16 base_addr, u16 internal_addr)
00362 {
00363 outw(internal_addr, base_addr + TLAN_DIO_ADR);
00364 return (inw((base_addr + TLAN_DIO_DATA) + (internal_addr & 0x2)));
00365
00366 }
00367
00368
00369
00370
00371 static inline u32 TLan_DioRead32(u16 base_addr, u16 internal_addr)
00372 {
00373 outw(internal_addr, base_addr + TLAN_DIO_ADR);
00374 return (inl(base_addr + TLAN_DIO_DATA));
00375
00376 }
00377
00378
00379
00380
00381 static inline void TLan_DioWrite8(u16 base_addr, u16 internal_addr, u8 data)
00382 {
00383 outw(internal_addr, base_addr + TLAN_DIO_ADR);
00384 outb(data, base_addr + TLAN_DIO_DATA + (internal_addr & 0x3));
00385
00386 }
00387
00388
00389
00390
00391 static inline void TLan_DioWrite16(u16 base_addr, u16 internal_addr, u16 data)
00392 {
00393 outw(internal_addr, base_addr + TLAN_DIO_ADR);
00394 outw(data, base_addr + TLAN_DIO_DATA + (internal_addr & 0x2));
00395
00396 }
00397
00398
00399
00400
00401 static inline void TLan_DioWrite32(u16 base_addr, u16 internal_addr, u32 data)
00402 {
00403 outw(internal_addr, base_addr + TLAN_DIO_ADR);
00404 outl(data, base_addr + TLAN_DIO_DATA + (internal_addr & 0x2));
00405
00406 }
00407
00408
00409
00410 #if 0
00411 static inline void TLan_ClearBit(u8 bit, u16 port)
00412 {
00413 outb_p(inb_p(port) & ~bit, port);
00414 }
00415
00416
00417
00418
00419 static inline int TLan_GetBit(u8 bit, u16 port)
00420 {
00421 return ((int) (inb_p(port) & bit));
00422 }
00423
00424
00425
00426
00427 static inline void TLan_SetBit(u8 bit, u16 port)
00428 {
00429 outb_p(inb_p(port) | bit, port);
00430 }
00431 #endif
00432
00433 #define TLan_ClearBit( bit, port ) outb_p(inb_p(port) & ~bit, port)
00434 #define TLan_GetBit( bit, port ) ((int) (inb_p(port) & bit))
00435 #define TLan_SetBit( bit, port ) outb_p(inb_p(port) | bit, port)
00436
00437 #ifdef I_LIKE_A_FAST_HASH_FUNCTION
00438
00439
00440 static inline u32 TLan_HashFunc(u8 * a)
00441 {
00442 u8 hash;
00443
00444 hash = (a[0] ^ a[3]);
00445 hash ^= ((a[0] ^ a[3]) >> 6);
00446 hash ^= ((a[1] ^ a[4]) << 2);
00447 hash ^= ((a[1] ^ a[4]) >> 4);
00448 hash ^= ((a[2] ^ a[5]) << 4);
00449 hash ^= ((a[2] ^ a[5]) >> 2);
00450
00451 return (hash & 077);
00452 }
00453
00454 #else
00455
00456 static inline u32 xor(u32 a, u32 b)
00457 {
00458 return ((a && !b) || (!a && b));
00459 }
00460
00461 #define XOR8( a, b, c, d, e, f, g, h ) xor( a, xor( b, xor( c, xor( d, xor( e, xor( f, xor( g, h ) ) ) ) ) ) )
00462 #define DA( a, bit ) ( ( (u8) a[bit/8] ) & ( (u8) ( 1 << bit%8 ) ) )
00463
00464 static inline u32 TLan_HashFunc(u8 * a)
00465 {
00466 u32 hash;
00467
00468 hash =
00469 XOR8(DA(a, 0), DA(a, 6), DA(a, 12), DA(a, 18), DA(a, 24),
00470 DA(a, 30), DA(a, 36), DA(a, 42));
00471 hash |=
00472 XOR8(DA(a, 1), DA(a, 7), DA(a, 13), DA(a, 19), DA(a, 25),
00473 DA(a, 31), DA(a, 37), DA(a, 43)) << 1;
00474 hash |=
00475 XOR8(DA(a, 2), DA(a, 8), DA(a, 14), DA(a, 20), DA(a, 26),
00476 DA(a, 32), DA(a, 38), DA(a, 44)) << 2;
00477 hash |=
00478 XOR8(DA(a, 3), DA(a, 9), DA(a, 15), DA(a, 21), DA(a, 27),
00479 DA(a, 33), DA(a, 39), DA(a, 45)) << 3;
00480 hash |=
00481 XOR8(DA(a, 4), DA(a, 10), DA(a, 16), DA(a, 22), DA(a, 28),
00482 DA(a, 34), DA(a, 40), DA(a, 46)) << 4;
00483 hash |=
00484 XOR8(DA(a, 5), DA(a, 11), DA(a, 17), DA(a, 23), DA(a, 29),
00485 DA(a, 35), DA(a, 41), DA(a, 47)) << 5;
00486
00487 return hash;
00488
00489 }
00490
00491 #endif