rtl81x9.h
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:30k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* rtl81x9End.h - RealTek RTL81x9 Fast Ethernet interface header */
  2. /* Copyright 1984-2000 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01b,26jan00,dgy  Set the Early Rx Threshold within
  7.  the RTL_RXCFG_CONFIG
  8. 01a,29oct99,dgy  written
  9. */
  10. #ifndef __INCrtl81x9Endh
  11. #define __INCrtl81x9Endh
  12. #ifdef __cplusplus
  13. extern "C" {
  14. #endif
  15. /***** DEBUG MACROS *****/
  16. #undef DRV_DEBUG
  17. #ifdef DRV_DEBUG
  18. #define DRV_DEBUG_OFF 0x0000
  19. #define DRV_DEBUG_RX 0x0001
  20. #define DRV_DEBUG_TX 0x0002
  21. #define DRV_DEBUG_INT 0x0004
  22. #define DRV_DEBUG_POLL (DRV_DEBUG_POLL_RX | DRV_DEBUG_POLL_TX)
  23. #define DRV_DEBUG_POLL_RX 0x0008
  24. #define DRV_DEBUG_POLL_TX 0x0010
  25. #define DRV_DEBUG_LOAD 0x0020
  26. #define DRV_DEBUG_IOCTL 0x0040
  27. #define DRV_DEBUG_POLL_REDIR 0x10000
  28. #define DRV_DEBUG_LOG_NVRAM 0x20000
  29. #define DRV_DEBUG_ALL 0xfffff
  30. NET_POOL rtl81x9NetPool;
  31. #define DRV_LOG(FLG, X0, X1, X2, X3, X4, X5, X6)
  32. if (rtl81x9Debug & FLG)
  33.             logMsg(X0, X1, X2, X3, X4, X5, X6);
  34. #define DRV_PRINT(FLG,X)
  35. if (rtl81x9Debug & FLG) logMsg X;
  36. #else /*DRV_DEBUG*/
  37. #define DRV_LOG(DBG_SW, X0, X1, X2, X3, X4, X5, X6)
  38. #define DRV_PRINT(DBG_SW,X)
  39. #endif /*DRV_DEBUG*/
  40. /* DMA Definitions */
  41. #define RTL_RXDMA_16BYTES 0x00000000
  42. #define RTL_RXDMA_32BYTES 0x00000100
  43. #define RTL_RXDMA_64BYTES 0x00000200
  44. #define RTL_RXDMA_128BYTES 0x00000300
  45. #define RTL_RXDMA_256BYTES 0x00000400
  46. #define RTL_RXDMA_512BYTES 0x00000500
  47. #define RTL_RXDMA_1024BYTES 0x00000600
  48. #define RTL_RXDMA_UNLIMITED 0x00000700
  49. #define RTL_RXFIFO_16BYTES 0x00000000
  50. #define RTL_RXFIFO_32BYTES 0x00002000
  51. #define RTL_RXFIFO_64BYTES 0x00004000
  52. #define RTL_RXFIFO_128BYTES 0x00006000
  53. #define RTL_RXFIFO_256BYTES 0x00008000
  54. #define RTL_RXFIFO_512BYTES 0x0000A000
  55. #define RTL_RXFIFO_1024BYTES 0x0000C000
  56. #define RTL_RXFIFO_NOTHRESH 0x0000E000
  57. #define RTL_TXDMA_16BYTES 0x00000000
  58. #define RTL_TXDMA_32BYTES 0x00000100
  59. #define RTL_TXDMA_64BYTES 0x00000200
  60. #define RTL_TXDMA_128BYTES 0x00000300
  61. #define RTL_TXDMA_256BYTES 0x00000400
  62. #define RTL_TXDMA_512BYTES 0x00000500
  63. #define RTL_TXDMA_1024BYTES 0x00000600
  64. #define RTL_TXDMA_2048BYTES 0x00000700
  65. /*
  66.  * The RealTek doesn't use a fragment-based descriptor mechanism.
  67.  * Instead, there are only four register sets, each or which represents
  68.  * one 'descriptor.' Basically, each TX descriptor is just a contiguous
  69.  * packet buffer (32-bit aligned!) and we place the buffer addresses in
  70.  * the registers so the chip knows where they are.
  71.  *
  72.  * For reception, there's just one large buffer where the chip stores
  73.  * all received packets.
  74.  */
  75. /* Configuration items */
  76. #define RTL_BUFSIZ      (ETHERMTU + ENET_HDR_REAL_SIZ + 6)
  77. #define RTL_RMD_RLEN     5       /* ring size as a power of 2 -- 32 RMD's */ /*vicadd*/
  78. #define RTL_SPEED        10000000
  79. /* Definitions for the drvCtrl flags field */
  80. /* The format for the Flags field is as follows */
  81. /* The first 16 bits are allocated as being used  */
  82. /* for miscellaneous flags. The second 16 bits    */
  83. /* are used for setting the Early Rx Threshold  */
  84. /* from within the string passed in initialisation  */
  85. /* This allows the user to taylor performance  */
  86. /* depending on their board without the need  */
  87.  /* recomplile the driver source code. */
  88. #define RTL_FLG_PROMISCUOUS_FLAG     0x01
  89. #define RTL_FLG_MEM_ALLOC_FLAG       0x02
  90. #define RTL_FLG_MODE_MEM_IO_MAP      0x04   /* device registers memory mapped */
  91. #define RTL_FLG_POLLING              0x08 /* polling flag */
  92. #define RTL_RXBUF_8 0x00000000
  93. #define RTL_RXBUF_16 0x00000800
  94. #define RTL_RXBUF_32 0x00001000
  95. #define RTL_RXBUF_64 0x00001800
  96. /*#define RTL_RX_BUF_SZ RTL_RXBUF_16*/
  97. #define RTL_RX_BUF_SZ RTL_RXBUF_64
  98. #define RTL_RXBUFLEN (1 << ((RTL_RX_BUF_SZ >> 11) + 13))
  99. /*#define RTL_RX_FIFOTHRESH RTL_RXFIFO_NOTHRESH */
  100. /*#define RTL_RX_FIFOTHRESH RTL_RXFIFO_16BYTES */
  101. #define RTL_RX_FIFOTHRESH RTL_RXFIFO_128BYTES
  102. /*#define RTL_RX_MAXDMA RTL_RXDMA_256BYTES*/
  103. #define RTL_RX_MAXDMA RTL_RXDMA_1024BYTES /*/vicadd*/
  104. #define RTL_TX_MAXDMA RTL_TXDMA_1024BYTES /*/vicadd*/
  105. /*#define RTL_TX_MAXDMA RTL_TXDMA_16BYTES */ /*for best PCI performance on EEHD*/
  106. /* configuration items */
  107. #define RTL_DEV_NAME  "rtl" /* device name */
  108. #define RTL_DEV_NAME_LEN  4
  109. #define RTL81x9_BUFSIZE 1536   /* aligned packet size */
  110. #define RTL_CRC_SIZE  4
  111. #define RTL_NUM_TX_DESC 4 /* Number of Tx descriptor registers. */
  112. /*#define RTL_NUM_TX_DESC 1 */
  113. /*
  114.  * Initialization Block.
  115.  * Specifies addresses of receive and transmit descriptor rings.
  116.  */   
  117. typedef struct rtlIB
  118.     {
  119.     ULONG       rtlIBMode;  /* mode register */
  120.     UCHAR       rtlIBPadr [8];   /* PADR: bswapd ethnt phys address */
  121.     UCHAR       rtlIBLadrf [8];  /* logical address filter */
  122.     USHORT      rtlIBRdraLow;    /* RDRA: read ring lower address */
  123.     USHORT      rtlIBRdraHigh;   /* RDRA: read ring upper address */
  124.     } rtl_ib;
  125. #define RTL_ADDR_TO_IB_RMD(addr, ib, rsize) 
  126. ib->rtlIBRdraLow = (u_long) addr; 
  127. ib->rtlIBRdraHigh = (((u_long) addr >> 16) & 0xff) | (rsize << 13);
  128. /* Receive Message Descriptor Entry.*/
  129. typedef struct rtlRxData
  130.     {
  131.     USHORT      rxStatusFlags;
  132.     USHORT      rxPktLen;
  133.     UCHAR     *pktData;
  134.     } RTL_RX_DATA;
  135. typedef struct rtlRMD
  136.     {
  137.     USHORT      rxStatusFlags;
  138.     USHORT      rxPktLen;
  139.     UCHAR     *pktData;
  140.     } RTL_RMD;
  141. /* clear the logical address filter */
  142.     
  143. #define RTL_ADDRF_CLEAR(pIb) (bzero(&(pIb)->rtlIBLadrf[0], 8))
  144. /* set the logical address filter to accept a new multicast address */
  145.     
  146. #define RTL_ADDRF_SET(pIb, crc) 
  147.     (((pIb)->rtlIBLadrf[((crc) & 0x0000003f) >> 3]) |= (1 << ((crc) & 0x7)))
  148. /* This driver supports the following four variants of the RTL Fast */
  149. /* Ethernet Controller Chip. 8129, 8139 - Single Chip Fast */
  150. /* Ethernet Controller. 8139A=8139 with power saving. 8139B=8139A + Cardbus*/
  151. /* PCI/CardBus support */
  152.  
  153. #define RTL_DEV_8129 1
  154. #define RTL_DEV_8139A 2
  155. #define RTL_DEV_8139B 3
  156. #define RTL_DEV_8139C 4 /* almost like  8139C */
  157. /*
  158.  * RealTek PCI vendor ID
  159.  */
  160. #define RTL_VENDORID 0x10EC
  161. /*
  162.  * RealTek chip device IDs.
  163.  */
  164. #define RTL_DEVICEID_8129 0x8129
  165. #define RTL_DEVICEID_8139 0x8139
  166. /*
  167.  * Accton PCI vendor ID
  168.  */
  169. #define ACCTON_VENDORID 0x1113
  170. /*
  171.  * Accton MPX 5030/5038 device ID.
  172.  */
  173. #define ACCTON_DEVICEID_5030 0x1211
  174. /*
  175.  * Delta Electronics Vendor ID.
  176.  */
  177. #define DELTA_VENDORID 0x1500
  178. /*
  179.  * Delta device IDs.
  180.  */
  181. #define DELTA_DEVICEID_8139 0x1360
  182. /*
  183.  * Addtron vendor ID.
  184.  */
  185. #define ADDTRON_VENDORID 0x4033
  186. /*
  187.  * Addtron device IDs.
  188.  */
  189. #define ADDTRON_DEVICEID_8139 0x1360
  190. #if 1
  191. #if _BYTE_ORDER==_BIG_ENDIAN
  192. #define PCI_SWAP(x) LONGSWAP((int)(x))
  193. #define PCI_WORD_SWAP(x) ((LSB((USHORT)(x)) << 8) | MSB((USHORT)(x)))
  194. #else
  195. #define PCI_SWAP(x) (x)
  196. #define PCI_WORD_SWAP(x) (x)
  197. #endif
  198. #endif
  199. /*
  200. #define PCI_SWAP(x) (x)
  201. #define PCI_WORD_SWAP(x) (x)
  202. */
  203. /*
  204.  * Generic shared memory read and write macros.
  205.  */
  206. #ifndef SHMEM_RD
  207. #    define SHMEM_RD(x) *(x)
  208. #endif
  209. #ifndef SHMEM_WR
  210. #    define SHMEM_WR(x,y) (*(x) = y)
  211. #endif
  212. /* RTL81x9 Registers */
  213. #define RTL_REGS_IDR0 0x00
  214. #define RTL_REGS_IDR1 0x01
  215. #define RTL_REGS_IDR2 0x02
  216. #define RTL_REGS_IDR3 0x03
  217. #define RTL_REGS_IDR4 0x04
  218. #define RTL_REGS_IDR5 0x05
  219. #define RTL_REGS_MAR0 0x08 /* Multicast filter. */
  220. #define RTL_REGS_TX_STATUS0 0x10
  221. #define RTL_REGS_TX_STATUS1 0x14
  222. #define RTL_REGS_TX_STATUS2 0x18
  223. #define RTL_REGS_TX_STATUS3 0x1C
  224. #define RTL_REGS_TX_ADDR0 0x20
  225. #define RTL_REGS_TX_ADDR1 0x24
  226. #define RTL_REGS_TX_ADDR2 0x28
  227. #define RTL_REGS_TX_ADDR3 0x29
  228. #define RTL_REGS_RX_BUF 0x30
  229. #define RTL_REGS_RX_EARLY_CNT 0x34
  230. #define RTL_REGS_RX_EARLY_STATUS 0x36
  231. #define RTL_REGS_CHIP_CMD 0x37
  232. #define RTL_REGS_RX_BUF_PTR 0x38
  233. #define RTL_REGS_RX_BUF_ADDR 0x3A
  234. #define RTL_REGS_INTR_MASK 0x3C
  235. #define RTL_REGS_INTR_STATUS 0x3E
  236. #define RTL_REGS_TX_CONFIG 0x40
  237. #define RTL_REGS_RX_CONFIG 0x44
  238. #define RTL_REGS_TIMER 0x48 /* A general-purpose counter. */
  239. #define RTL_REGS_RX_MISSED 0x4C /* 24 bits valid, write clears. */
  240. #define RTL_REGS_CFG_9346 0x50
  241. #define RTL_REGS_CONFIG_0 0x51
  242. #define RTL_REGS_CONFIG_1 0x52
  243. #define RTL_REGS_TIMERINT 0x54
  244. #define RTL_REGS_MSR 0x58
  245. #define RTL_REGS_CONFIG3 0x59
  246. #define RTL_REGS_MII 0x5A /* 8129 chip only */
  247. #define RTL_REGS_MULTI_INTR 0x5C
  248. #define RTL_REGS_PCI_RERID 0x5e
  249. #define RTL_REGS_TX_SUMMARY 0x60
  250. #define RTL_REGS_MII_BMCR 0x62
  251. #define RTL_REGS_MII_BMSR 0x64
  252. #define RTL_REGS_NWAY_ADVERT 0x66
  253. #define RTL_REGS_NWAY_LPAR 0x68
  254. #define RTL_REGS_NWAY_EXPANSION 0x6A
  255. #define RTL_REGS_DIS 0x6c
  256. #define RTL_REGS_FCSC 0x6e
  257. #define RTL_REGS_NWAYTR 0x70 /* N-Way Test Register */
  258. #define RTL_REGS_CSCR 0x74 /* Chip Status and Configuration Register. */
  259. #define RTL_REGS_PARA_78 0x78
  260. #define RTL_REGS_PARA_7c 0x7c /* Magic transceiver parameter register. */
  261. /* Rx Status Bits - From Rx Packet Header */
  262. #define RTL_RX_MULTICAST 0x8000
  263. #define RTL_RX_PHYSICAL 0x4000
  264. #define RTL_RX_BROADCAST 0x2000
  265. #define RTL_RX_BAD_SYMBOL 0x0020
  266. #define RTL_RX_RUNT 0x0010
  267. #define RTL_RX_TOO_LONG 0x0008
  268. #define RTL_RX_CRC_ERROR 0x0004
  269. #define RTL_RX_BAD_ALIGN 0x0002
  270. #define RTL_RX_STATUS_OK 0x0001
  271. #define RTL_RX_UNFINISHED 0xfff0 /* DMA still in progress */
  272. /* Tx Status Bits */
  273. /* TSD0-3 - Offset 0010h - 001Fh - R/W */
  274. #define RTL_TX_HOST_OWNS 0x2000
  275. #define RTL_TX_UNDERRUN 0x4000
  276. #define RTL_TX_STATUS_OK 0x8000
  277. #define RTL_TX_OUT_OF_WINDOW 0x20000000
  278. #define RTL_TX_ABORTED 0x40000000
  279. #define RTL_TX_CARRIER_LOST 0x80000000
  280. /* Chip Command Bits */
  281. /* Offset 0037h - R/W */
  282. #define RTL_CMD_RESET 0x10
  283. #define RTL_CMD_RX_ENB 0x08
  284. #define RTL_CMD_TX_ENB 0x04
  285. #define RTL_CMD_RX_BUF_EMPTY 0x01
  286. /* Interrupt Mask & Status register bits */
  287. /* Mask  - Offset 003Ch-003Dh - R/W */
  288. /* Status  - Offset 003Eh-003Fh - R/W */
  289. #define RTL_IPT_PCI_ERR 0x8000
  290. #define RTL_IPT_PCS_TIMEOUT 0x4000 /* 8129 only */
  291. #define RTL_IPT_CABLE_LEN_CHG 0x2000
  292. #define RTL_IPT_RX_FIFO_OVER 0x40 /* 8139 only */
  293. #define RTL_IPT_RX_UNDERUN 0x20
  294. #define RTL_IPT_RX_OVERFLOW 0x10
  295. #define RTL_IPT_TX_ERR 0x08
  296. #define RTL_IPT_TX_OK 0x04
  297. #define RTL_IPT_RX_ERR 0x02
  298. #define RTL_IPT_RX_OK 0x01
  299. /*#define RTL_VALID_INTERRUPTS 0xe07f*/ /* All Interrupts above */
  300. #define RTL_VALID_INTERRUPTS 0x003f /* All Interrupts above  vicadd */
  301. /*#define RTL_ERROR_INTERRUPTS 0x807a*/ /* All bar OK's, TOUT and LEN_CHG */
  302. #define RTL_ERROR_INTERRUPTS 0x007a  /*vicadd*/
  303. #define RTL_RX_INTERRUPTS 0x73
  304. #define RTL_TX_INTERRUPTS 0x0c
  305. #define RTL_CONFIG_INTERRUPTS 0xe000 /* PCI,PCS,CABLE */
  306. /* Transmit Config Regs */
  307. /* Offset 0040-0043 */
  308. #define RTL_TXCG_HWVER 0x80000000 /* 7 for RTL8139 (A and B) */
  309.    /* 6 for RTL8139 */
  310. #define RTL_TXCG_BLID 0x40000000 /* DevType 0 - A 1 - B) */
  311. #define RTL_TXCG_LBK1 0x40000 /* Loopback Test */
  312. #define RTL_TXCG_LBK0 0x20000 /* 00 - Normal */
  313. /* 01 - MAC */
  314. /* 10 - PHY */
  315. /* 11 - Twister */
  316. #define RTL_TXCG_CRC 0x10000 /* Append CRC */
  317. #define RTL_TXCG_MXDMA2 0x400 /* Max DMA Burst Size */
  318. #define RTL_TXCG_MXDMA1 0x200 /* 000 - 16   001 - 32   */
  319. #define RTL_TXCG_MXDMA0 0x100 /* 010 - 64   011 - 128  */
  320. /* 100 - 256  101 - 512  */
  321. /* 110 - 1024 111 - 2048 */
  322. #define RTL_TXCG_TXRR 0x80 /* Retry Count - 16 * TXRR */
  323. #define RTL_TXCG_CLRABT 0x01 /* Re transmit */
  324. #define RTL_TXCG_MAXDMA 0x00000700 /* max DMA burst size */
  325. #define RTL_TXCG_LOOPBKTST 0x00060000 /* loopback test */
  326. #define RTL_TXCG_IFG 0x03000000 /* interframe gap */
  327. /* Receive Configuration Register */
  328. /* Offset 0044-0047h */
  329. /* Note the Early Threshold bits are set by modifying the sysRtl81x9.c  */
  330. /* file stored within BSP directory. Altering the define RTL81X9_EARX_THRESH  */
  331. /* sets the Ealry threshold required in the passed endload string and then */
  332. /* passed correctly into the configuration routine within the rtl81x9Start  */
  333. /* routine. */
  334. #define RTL_RXCG_ERTH 0x40000 /* Early Rx Threshold Multiplier */
  335. /* 0 - None 1 - 1/16 2 - 2/16  */
  336. /* etc. etc.   */
  337. #define RTL_RXCG_MULERINT 0x20000 /* Multiple Early interrupt */
  338. #define RTL_RXCG_RER8 0x10000 /* Rx Packet Length Error */
  339. #define RTL_RXCG_RXFTH2 0x8000 /* Rx FIFO Threshold in Bytes */
  340. #define RTL_RXCG_RXFTH1 0x4000 /* 000 - 16   , 001 - 32   */
  341. #define RTL_RXCG_RXFTH0 0x2000 /* 010 - 64   , 011 - 128  */
  342. /* 100 - 256  , 101 - 512  */
  343. /* 110 - 1024 , 111 - none */
  344. #define RTL_RXCG_RBLEN1 0x1000 /* Rx Buffer Length */
  345. #define RTL_RXCG_RBLEN0 0x800 /* 00 - 8k  + 16bytes */
  346. /* 01 - 16k + 16bytes */
  347. /* 10 - 32k + 16bytes */
  348. /* 11 - 64k + 16bytes */
  349. #define RTL_RXCG_MXDMA2 0x400 /* Max DMA Burst size per RX DMA */
  350. #define RTL_RXCG_MXDMA1 0x200 /* 000 - 16   , 001 - 32   */
  351. #define RTL_RXCG_MXDMA0 0x100 /* 010 - 64   , 011 - 128  */       
  352. /* 100 - 256  , 101 - 512  */
  353. /* 110 - 1024 , 111 - unlimited */
  354. #define RTL_RXCG_WRAP 0x80
  355. #define RTL_RXCG_9356SEL 0x40 /* Selects EEPROM 1 - 9356 0 - 9346 */
  356. #define RTL_RXCG_AER 0x20 /* Accept Error Packet */
  357. #define RTL_RXCG_AR 0x10 /* Accept RUNT */
  358. #define RTL_RXCG_AB 0x08 /* Accept Broadcast */
  359. #define RTL_RXCG_AM 0x04 /* Accept Multicast */
  360. #define RTL_RXCG_APM 0x02 /* Accept Physical match */
  361. #define RTL_RXCG_AAP 0x01 /* Accept all Phy */
  362. /* The following are used as the initial Tx and Rx Configs */
  363. #define RTL_RXCFG_CONFIG  (RTL_RX_BUF_SZ|RTL_RX_FIFOTHRESH|RTL_RX_MAXDMA)
  364. #define RTL_TXCFG_CONFIG (RTL_TXCG_IFG|RTL_TX_MAXDMA)
  365. /*edit by shichao zhang to do loopback test
  366. #define RTL_TXCFG_CONFIG (RTL_TXCG_IFG|RTL_TX_MAXDMA|RTL_TXCG_LOOPBKTST)
  367. */
  368. /* 9346CR Command Register */
  369. /* Offset 0050h - R/W */
  370. #define RTL_EEMODE_PROGRAM 0x80 /* 8139B Operating Mode */
  371. #define RTL_EEMODE_AUTOLOAD 0x40 /* 00 - Normal */
  372. /* 01 - Auto Load */
  373. /* 10 - 93c46 Prog Mode */
  374. /* 11 - Cfg Reg Write Mode */
  375. #define RTL_EEMODE_WRITECFG (0x80|0x40)
  376. #define RTL_EEMODE_OFF 0x00
  377. /* MII register (8129 only) */
  378. /* Offset 005Ah - R/W */
  379. #define RTL_MII_CLK 0x01
  380. #define RTL_MII_DATAIN 0x02
  381. #define RTL_MII_DATAOUT 0x04
  382. #define RTL_MII_DIR 0x80 /* 0 == input, 1 == output */
  383. /*
  384.  * EEPROM control register
  385.  */
  386. #define RTL_EE_DATAOUT 0x01 /* Data out */
  387. #define RTL_EE_DATAIN 0x02 /* Data in */
  388. #define RTL_EE_CLK 0x04 /* clock */
  389. #define RTL_EE_SEL 0x08 /* chip select */
  390. #define RTL_EE_MODE (0x40|0x80)
  391. /* 9346 EEPROM commands */
  392. #define RTL_EECMD_WRITE 0x140
  393. #define RTL_EECMD_READ 0x180
  394. #define RTL_EECMD_ERASE 0x1c0
  395. /* 9346 EEPROM commands */
  396. #define RTL_EECMD_EWDS 0x100 /*Erase/write disable*/
  397. #define RTL_EECMD_EWEN 0x130 /*Erase/write enable*/
  398. #define RTL_EE_ID 0x00
  399. #define RTL_EE_PCI_VID 0x01
  400. #define RTL_EE_PCI_DID 0x02
  401. /* Location of station address inside EEPROM */
  402. #define RTL_EE_EADDR 0x07
  403. /* Configuration Register 0 */
  404. /* Offset 0051h - R/W */
  405. #define RTL_CONFIG0_BS2 0x04 /* Boot ROM Size */
  406. #define RTL_CONFIG0_BS1 0x02 /* 000 - No  Boot Rom */
  407. #define RTL_CONFIG0_BS0 0x01 /* 001 - 8k  Boot Rom */
  408. /* 010 - 16k Boot Rom */
  409. /* 011 - 32k Boot Rom */
  410. /* 100 - 64k Boot Rom */
  411. /* 101 - 128 Boot Rom */
  412. /* 110 - unused */
  413. /* 111 - unused */
  414. /* Configuration Register 1 */
  415. /* Offset 0052h - R/W */
  416. #define RTL_CONFIG1_LEDS1 0x80 /* LED's */
  417. #define RTL_CONFIG1_LEDS0 0x40 /* Refer to LED IFace */
  418. #define RTL_CONFIG1_DVRLOAD 0x20 /* Driver loaded status bit */
  419. #define RTL_CONFIG1_LWACT 0x10 /* LWAKE Active mode */
  420. #define RTL_CONFIG1_MEMMAP 0x08 /* Registers Mapped to PCI Memory */
  421. #define RTL_CONFIG1_IOMAP 0x04 /* Registers Mapped to PCI I/O space */
  422. #define RTL_CONFIG1_VPD 0x02 /* Vital Product Data */
  423. #define RTL_CONFIG1_PMEN 0x01 /* Power Management Enable */
  424. /* Media Status Bits  */
  425. /* Offset 0058h - R/W  */
  426. #define RTL_MED_RXPF 0x01 /* Rx Pause Flag */
  427. #define RTL_MED_TXPF 0x02 /* Tx Pause Flag */
  428. #define RTL_MED_LINKB 0x04 /* Inverse of Link Status */
  429. /* 0 - Link OK */
  430. #define RTL_MED_SPEED 0x08    /* 1 - 10Mbps, 0 - 100Mbps */
  431. #define RTL_MED_AUX 0x10 /* Aux power Status */
  432. #define RTL_MED_RXFCE 0x40 /* Rx Flow Control enable */
  433. #define RTL_MED_TXFCE 0x80 /* Tx Flow control enable */
  434. /* Configuration Register 3 */
  435. /* Offset 0059h - R/W  */
  436. #define RTL_CONFIG3_GNTSEL 0x80 /* Grant Select */
  437. #define RTL_CONFIG3_PARM_EN 0x40 /* Paramater Enable - 100Mbps only */
  438. #define RTL_CONFIG3_MAGIC 0x20 /* Magic Packet */
  439. #define RTL_CONFIG3_LINKUP 0x10
  440. #define RTL_CONFIG3_CARDB_EN 0x08 /* Card Bus Enable */
  441. #define RTL_CONFIG3_CLKRUN_EN 0x04
  442. #define RTL_CONFIG3_FUNCREG_EN 0x02 /* Functions registers enable */
  443. #define RTL_CONFIG3_FBTBEN 0x01 /* Fast back to back enable */
  444. /* Configuration Register 4 */
  445. /* Offset 005Ah - R/W  */
  446. #define RTL_CONFIG4_RXFIFO_CLR 0x80 /* Automatically clear RX FIFO OFlow */
  447. #define RTL_CONFIG4_ANAOFF 0x40 /* Analogue Power Off */
  448. #define RTL_CONFIG4_LONGWF 0x20 /* Long Wake up Frame */
  449. #define RTL_CONFIG4_LWPME 0x10 /* LANWAKE vs PMEB */
  450. #define RTL_CONFIG4_MSWFB 0x08 /* Microsoft Wake up frame */
  451. #define RTL_CONFIG4_LWPTN 0x04 /* LWAKE Pattern */
  452. #define RTL_CONFIG4_PARM_EN2 0x02 /* Parameter Enable 2  */
  453. #define RTL_CONFIG4_RD_AUX 0x01 /* Rev d - Aux Power Status */
  454. /* Transmit Status of all Descriptors */
  455. /* Offset 0060 - 0061h - R/W    */
  456. /* RTL_REGS_TX_SUMMARY       */
  457. #define RTL_TSAD_TOK_MSK 0xf000 /* Tx Ok Descs          */
  458. #define RTL_TSAD_TUN_MSK 0x0f00 /* Tx Underrun Descs    */
  459. #define RTL_TSAD_TABT_MSK 0x00f0 /* Transmit Abort Descs */
  460. #define RTL_TSAD_OWN_MSK 0x000f /* OWN Bit Descriptors  */
  461. /* Basic Mode Control Register  */
  462. /* Offset 0062-0063h - R/W  */
  463. /* Note : All Default are 0  */
  464. #define RTL_BMCR_RESET 0x8000 /* Sets Status and Control Regs */
  465. /* 1=Software reset 0=normal op */
  466. #define RTL_BMCR_SPD_SET 0x2000 /* Network Speed */
  467. /* 1=100Mbps, 0=10Mbps */
  468. #define RTL_BMCR_ANE 0x1000 /* Auto Negotiation Enable */
  469. #define RTL_BMCR_RAN 0x0200 /* Restart Auto Negotiation */
  470. #define RTL_BMCR_DUPX 0x0100 /* Duplex mode */
  471. /* 1=full duplex, 0=normal */
  472. /* Basic Mode Status Register  */
  473. /* Offset 0064-0065h - R/W  */
  474. #define RTL_BMSR_100BASE_T4 0x8000 /* 1=enable, default = 0 */
  475. #define RTL_BMSR_100BASE_TX_FDUPX 0x4000 /* 1=enable, default = 1 */
  476. #define RTL_BMSR_100BASE_TX_HDUPX 0x2000 /* 1=enable, default = 1 */
  477. #define RTL_BMSR_10BASE_T_FDUPX 0x1000 /* 1=enable, default = 1 */
  478. #define RTL_BMSR_10BASE_T_HDUPX 0x0800 /* 1=enable, default = 1 */
  479. #define RTL_BMSR_AUTO_NEG_COMP 0x0020 /* 1=completed,   default = 0 */
  480. #define RTL_BMSR_REMOTE_FAULT 0x0010 /* 1=detected,    default = 0 */
  481. #define RTL_BMSR_AUTO_NEG_FAIL 0x0008 /* 1=failed,      default = 1 */
  482. #define RTL_BMSR_LINK_STATUS 0x0004 /* 1=established, default = 0 */
  483. #define RTL_BMSR_JABBER_DETECT 0x0002 /* 1=detected,    default = 0 */
  484. #define RTL_BMSR_EXT_CAPABILITY 0x0001 /* 1=extended,    default = 1 */
  485. /* 0=basic regs */
  486. /* Auto Negotiation Advertisement Register  */
  487. /* Offset 0066-0067h - R/W  */
  488. #define RTL_ANAR_NP 0x8000 /* Next Page Bit */
  489. /* 0=primary capability data page  */
  490. /* 1=protocol specific data page */
  491. /* default = 0 */
  492. #define RTL_ANAR_ACK 0x4000 /* 1=acknowledge, default = 0 */
  493. #define RTL_ANAR_RF 0x2000 /* 1=advertise remote fault detection */
  494. /*  default = 0 */
  495. #define RTL_ANAR_PAUSE 0x0400 /* 1=flow control supported locally */
  496. /* default comes from EEPROM */
  497. #define RTL_ANAR_T4 0x0200 /* 1=100Base-T4 supported */
  498. /* default = 0 */
  499. #define RTL_ANAR_TXFD 0x0100 /* 1=100Base-Tx full duplex supported */
  500. /* default = 1 */
  501. #define RTL_ANAR_TX 0x0080 /* 1=100Base-Tx supported */
  502. /* default = 1 */
  503. #define RTL_ANAR_10FD 0x0040 /* 1=10Base-T full duplex supported */
  504. /* default = 1 */
  505. #define RTL_ANAR_10 0x0020 /* 1=10Base-T supported */
  506. /* default = 1 */
  507. #define RTL_ANAR_SELECTOR 0x0001 /* Binary Encoded Selector */
  508. /* Currently only CSMA/CD <00001> */
  509. /* Supported */
  510. /* default = 00001 */
  511. /*  EEPROM_Ctrl bits. */
  512. /* eeprom contents */
  513.     
  514. #define RTL_EE_OEM_ADR0 0x0E
  515. #define RTL_EE_OEM_ADR1 0x11
  516. #define RTL_EE_OEM_ADR2 0x13
  517. #define RTL_VENDOR_ID 0x10ec
  518. #define RTL_VENDOR_ID_MIS 0x1113
  519. #define RTL_8129_DEV_ID 0x8129
  520. #define RTL_8139_DEV_ID  0x8139
  521. #define RTL_MIS_DEV_ID  0x1211
  522. #define RTL_DEV_MASK 0xffff
  523. #define RTL_IO_SIZE 0x80
  524. #define RTL_TIMEOUT 1000
  525. #define RTL_WIN_0     0
  526. #define RTL_MIN_FBUF     100    /* Minimum size of the first buffer in a */
  527.                                /* chain. */
  528. typedef struct rtl_mii_frame {
  529. UINT8 mii_stdelim;
  530. UINT8 mii_opcode;
  531. UINT8 mii_phyaddr;
  532. UINT8 mii_regaddr;
  533. UINT8 mii_turnaround;
  534. USHORT mii_data;
  535. } RTL_MII_FRAME ;
  536. /*
  537.  * MII constants
  538.  */
  539. #define RTL_MII_STARTDELIM 0x01
  540. #define RTL_MII_READOP 0x02
  541. #define RTL_MII_WRITEOP 0x01
  542. #define RTL_MII_TURNAROUND 0x02
  543. /*
  544.  * Texas Instruments PHY identifiers
  545.  */
  546. #define TI_PHY_VENDORID 0x4000
  547. #define TI_PHY_10BT 0x501F
  548. #define TI_PHY_100VGPMI 0x502F
  549. /*
  550.  * These ID values are for the NS DP83840A 10/100 PHY
  551.  */
  552. #define NS_PHY_VENDORID 0x2000
  553. #define NS_PHY_83840A 0x5C0F
  554. /*
  555.  * Level 1 10/100 PHY
  556.  */
  557. #define LEVEL1_PHY_VENDORID 0x7810
  558. #define LEVEL1_PHY_LXT970 0x000F
  559. /*
  560.  * Intel 82555 10/100 PHY
  561.  */
  562. #define INTEL_PHY_VENDORID 0x0A28
  563. #define INTEL_PHY_82555 0x015F
  564. /*
  565.  * SEEQ 80220 10/100 PHY
  566.  */
  567. #define SEEQ_PHY_VENDORID 0x0016
  568. #define SEEQ_PHY_80220 0xF83F
  569. #define RTL_PHY_UNKNOWN 6
  570. #define RTL_PHYADDR_MIN 0x00
  571. #define RTL_PHYADDR_MAX 0x1F
  572. #define RTL_PHY_BMCR 0x00
  573. #define RTL_PHY_BMSR 0x01
  574. #define RTL_PHY_VENID 0x02
  575. #define RTL_PHY_DEVID 0x03
  576. #define RTL_PHY_ANAR 0x04
  577. #define RTL_PHY_LPAR 0x05
  578. #define RTL_PHY_ANEXP 0x06
  579. #define RTL_PHY_ANAR_NEXTPAGE 0x8000
  580. #define RTL_PHY_ANAR_RSVD0 0x4000
  581. #define RTL_PHY_ANAR_TLRFLT 0x2000
  582. #define RTL_PHY_ANAR_RSVD1 0x1000
  583. #define RTL_PHY_ANAR_RSVD2 0x0800
  584. #define RTL_PHY_ANAR_RSVD3 0x0400
  585. #define RTL_PHY_ANAR_100BT4 0x0200
  586. #define RTL_PHY_ANAR_100BTXFULL 0x0100
  587. #define RTL_PHY_ANAR_100BTXHALF 0x0080
  588. #define RTL_PHY_ANAR_10BTFULL 0x0040
  589. #define RTL_PHY_ANAR_10BTHALF 0x0020
  590. #define RTL_PHY_ANAR_PROTO4 0x0010
  591. #define RTL_PHY_ANAR_PROTO3 0x0008
  592. #define RTL_PHY_ANAR_PROTO2 0x0004
  593. #define RTL_PHY_ANAR_PROTO1 0x0002
  594. #define RTL_PHY_ANAR_PROTO0 0x0001
  595. /*
  596.  * These are the register definitions for the PHY (physical layer
  597.  * interface chip).
  598.  */
  599. /*
  600.  * PHY BMCR Basic Mode Control Register
  601.  */
  602. #define RTL_PHY_BMCR_RESET 0x8000
  603. #define RTL_PHY_BMCR_LOOPBK 0x4000
  604. #define RTL_PHY_BMCR_SPEEDSEL 0x2000
  605. #define RTL_PHY_BMCR_AUTONEGENBL 0x1000
  606. #define RTL_PHY_BMCR_RSVD0 0x0800 /* write as zero */
  607. #define RTL_PHY_BMCR_ISOLATE 0x0400
  608. #define RTL_PHY_BMCR_AUTONEGRSTR 0x0200
  609. #define RTL_PHY_BMCR_DUPLEX 0x0100
  610. #define RTL_PHY_BMCR_COLLTEST 0x0080
  611. #define RTL_PHY_BMCR_RSVD1 0x0040 /* write as zero, don't care */
  612. #define RTL_PHY_BMCR_RSVD2 0x0020 /* write as zero, don't care */
  613. #define RTL_PHY_BMCR_RSVD3 0x0010 /* write as zero, don't care */
  614. #define RTL_PHY_BMCR_RSVD4 0x0008 /* write as zero, don't care */
  615. #define RTL_PHY_BMCR_RSVD5 0x0004 /* write as zero, don't care */
  616. #define RTL_PHY_BMCR_RSVD6 0x0002 /* write as zero, don't care */
  617. #define RTL_PHY_BMCR_RSVD7 0x0001 /* write as zero, don't care */
  618. /*
  619.  * RESET: 1 == software reset, 0 == normal operation
  620.  * Resets status and control registers to default values.
  621.  * Relatches all hardware config values.
  622.  *
  623.  * LOOPBK: 1 == loopback operation enabled, 0 == normal operation
  624.  *
  625.  * SPEEDSEL: 1 == 100Mb/s, 0 == 10Mb/s
  626.  * Link speed is selected byt his bit or if auto-negotiation if bit
  627.  * 12 (AUTONEGENBL) is set (in which case the value of this register
  628.  * is ignored).
  629.  *
  630.  * AUTONEGENBL: 1 == Autonegotiation enabled, 0 == Autonegotiation disabled
  631.  * Bits 8 and 13 are ignored when autoneg is set, otherwise bits 8 and 13
  632.  * determine speed and mode. Should be cleared and then set if PHY configured
  633.  * for no autoneg on startup.
  634.  *
  635.  * ISOLATE: 1 == isolate PHY from MII, 0 == normal operation
  636.  *
  637.  * AUTONEGRSTR: 1 == restart autonegotiation, 0 = normal operation
  638.  *
  639.  * DUPLEX: 1 == full duplex mode, 0 == half duplex mode
  640.  *
  641.  * COLLTEST: 1 == collision test enabled, 0 == normal operation
  642.  */
  643. /* 
  644.  * PHY, BMSR Basic Mode Status Register 
  645.  */   
  646. #define RTL_PHY_BMSR_100BT4 0x8000
  647. #define RTL_PHY_BMSR_100BTXFULL 0x4000
  648. #define RTL_PHY_BMSR_100BTXHALF 0x2000
  649. #define RTL_PHY_BMSR_10BTFULL 0x1000
  650. #define RTL_PHY_BMSR_10BTHALF 0x0800
  651. #define RTL_PHY_BMSR_RSVD1 0x0400 /* write as zero, don't care */
  652. #define RTL_PHY_BMSR_RSVD2 0x0200 /* write as zero, don't care */
  653. #define RTL_PHY_BMSR_RSVD3 0x0100 /* write as zero, don't care */
  654. #define RTL_PHY_BMSR_RSVD4 0x0080 /* write as zero, don't care */
  655. #define RTL_PHY_BMSR_MFPRESUP 0x0040
  656. #define RTL_PHY_BMSR_AUTONEGCOMP 0x0020
  657. #define RTL_PHY_BMSR_REMFAULT 0x0010
  658. #define RTL_PHY_BMSR_CANAUTONEG 0x0008
  659. #define RTL_PHY_BMSR_LINKSTAT 0x0004
  660. #define RTL_PHY_BMSR_JABBER 0x0002
  661. #define RTL_PHY_BMSR_EXTENDED 0x0001
  662. /* ethernet media */
  663. #define IFM_ETHER 0x00000020
  664. #define IFM_10_T 3 /* 10BaseT - RJ45 */
  665. #define IFM_10_2 4 /* 10Base2 - Thinnet */
  666. #define IFM_10_5 5 /* 10Base5 - AUI */
  667. #define IFM_100_TX 6 /* 100BaseTX - RJ45 */
  668. #define IFM_100_FX 7 /* 100BaseFX - Fiber */
  669. #define IFM_100_T4 8 /* 100BaseT4 - 4 pair cat 3 */
  670. #define IFM_100_VG 9 /* 100VG-AnyLAN */
  671. #define IFM_100_T2 10 /* 100BaseT2 */
  672. /* Shared media sub-types */
  673. #define IFM_AUTO 0 /* Autoselect best media */
  674. #define IFM_MANUAL 1 /* Jumper/dipswitch selects media */
  675. #define IFM_NONE 2 /* Deselect all media */
  676. /* Shared options */
  677. #define IFM_FDX 0x00100000 /* Force full duplex */
  678. #define IFM_HDX 0x00200000 /* Force half duplex */
  679. #define IFM_FLAG0 0x01000000 /* Driver defined flag */
  680. #define IFM_FLAG1 0x02000000 /* Driver defined flag */
  681. #define IFM_FLAG2 0x04000000 /* Driver defined flag */
  682. #define IFM_LOOP 0x08000000 /* Put hardware in loopback */
  683. /* Masks */
  684. #define IFM_NMASK 0x000000e0 /* Network type */
  685. #define IFM_TMASK 0x0000000f /* Media sub-type */
  686. #define IFM_IMASK 0xf0000000 /* Instance */
  687. #define IFM_ISHIFT 28 /* Instance shift */
  688. #define IFM_OMASK 0x0000ff00 /* Type specific options */
  689. #define IFM_GMASK 0x0ff00000 /* Global options */
  690. /* Status bits */
  691. #define IFM_AVALID 0x00000001 /* Active bit valid */
  692. #define IFM_ACTIVE 0x00000002 /* Iface bound to working net */
  693. /*
  694.  * Macros to extract various bits of information from the media word.
  695.  */
  696. #define IFM_TYPE(x) ((x) & IFM_NMASK)
  697. #define IFM_SUBTYPE(x) ((x) & IFM_TMASK)
  698. #define IFM_INST(x) (((x) & IFM_IMASK) >> IFM_ISHIFT)
  699. #define RTL_FLAG_FORCEDELAY 1
  700. #define RTL_FLAG_SCHEDDELAY 2
  701. #define RTL_FLAG_DELAYTIMEO 3
  702. /* The definition of the driver control structure */
  703. typedef struct rtl_device
  704.     {
  705.     END_OBJ     end; /* The class we inherit from. */
  706.     rtl_ib       *ib; /* ptr to Initialization Block */
  707.     UINT8 devType;     /* 8129, 8139A or 8139B  OR 8139C*/
  708.     int unit; /* unit number */
  709. UINT8 phy_addr; /* PHY address */
  710.     int nextDesc; /* Next Tx Descriptor */
  711.     int freeDesc; /* Free Tx Descriptors */
  712.     char *pDescMem[RTL_NUM_TX_DESC]; /* Pointer to buffer */
  713. char  txmemspace[RTL_NUM_TX_DESC * RTL81x9_BUFSIZE];
  714.     ULONG rmdNext; /* index into the next Rx Pkt */
  715.     char *ptrRxBufSpace; /* Ptr to the Rx Buffer Pool */
  716.     int rringSize; /* RMD ring size */
  717.     int  rringLen;  /* RMD ring length (bytes) */
  718.     RTL_RMD *pRring; /* RMD ring start */
  719.     int         ivec;           /* interrupt vector */
  720.     int         ilevel;         /* interrupt level */
  721.     UINT32 devAdrs; /* device register RAP */
  722.     UINT16 csr3B; /* csr3 value board specific */
  723.     char*       pShMem;         /* real ptr to shared memory */
  724.     char*       memBase;        /* RTL memory pool base */
  725.     char*       memAdrs;        /* RTL memory pool base */
  726.     int         memSize;        /* RTL memory pool size */
  727.     int         memWidth;       /* width of data port */
  728.     int         offset;
  729.     int         csr0Errs;       /* count of csr0 errors */
  730.     UINT32      flags; /* Our local flags */
  731.     UINT32 pciMemBase; /* memory base as seen from PCI*/
  732.     UCHAR enetAddr[6]; /* ethernet address */
  733.     CACHE_FUNCS cacheFuncs;     /* cache function pointers */
  734.     BOOL txBlocked;  /* transmit flow control */
  735.     CL_POOL_ID  pClPoolId;
  736.     END_ERR     lastError;      /* Last error passed to muxError */
  737.     BOOL        errorHandling;  /* task level error handling */
  738.     u_short     errorStat;      /* error status */
  739.     UINT32      reg_rcr; /* RCR for reset */
  740.     } RTL81X9END_DEVICE;
  741. /* Configuration items */
  742. #define RMD_SIZ sizeof(RTL_RMD)
  743. #define IB_SIZ sizeof(rtl_ib)
  744. #ifdef __cplusplus
  745. }
  746. #endif
  747. #endif /* __INCrtl81x9Endh */