Cs8900hw.h
上传用户:qiulin1960
上传日期:2013-10-16
资源大小:2844k
文件大小:8k
源码类别:

Windows CE

开发平台:

Windows_Unix

  1. /*++
  2. THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
  3. ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
  4. THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
  5. PARTICULAR PURPOSE.
  6. Copyright (c) 1995-1998  Microsoft Corporation
  7. Module Name:
  8.     cs8900hw.h
  9. Abstract:
  10.     The main program for an CS8900 miniport driver.
  11. Notes:
  12. --*/
  13. #ifndef _CS8900HARDWARE_
  14. #define _CS8900HARDWARE_
  15. /////////////////////////////////////////////////////////////////////////////////////////////
  16. // Registers : CS8900A
  17. /////////////////////////////////////////////////////////////////////////////////////////////
  18. /* Packet page base address */
  19. #define IO_PACKET_PAGE_BASE_ADDR        0xA7000300
  20. /*
  21.  * Bus interface registers
  22.  */
  23. #define PKTPG_EISA_NUM 0x0000
  24. #define PKTPG_PRODUCT_ID 0x0002
  25. #define PKTPG_IO_BASE 0x0020
  26. #define PKTPG_INT_NUM 0x0022
  27. #define PKTPG_DMA_CHANNEL_NUMBER 0x0024
  28. #define PKTPG_DMA_START_OF_FRAME 0x0026
  29. #define PKTPG_DMA_FRAME_COUNT 0x0028
  30. #define PKTPG_RX_DMA_BYTE_COUNT 0x002a
  31. #define PKTPG_MEM_BASE 0x002c
  32. #define PKTPG_BOOT_PROM_BASE_ADDR 0x0030
  33. #define PKTPG_BOOT_PROM_ADDR_MASK 0x0034
  34. #define PKTPG_EEPROM_CMD 0x0040
  35. #define PKTPG_EEPROM_DATA 0x0042
  36. #define PKTPG_RX_FRAME_BYTE_COUNT 0x0050
  37. /*
  38.  * Status and control registers
  39.  */
  40. #define PKTPG_ISQ 0x0120
  41. #define PKTPG_RX_CFG 0x0102
  42. #define PKTPG_RX_EVENT 0x0124
  43. #define PKTPG_RX_CTL 0x0104
  44. #define PKTPG_TX_CFG 0x0106
  45. #define PKTPG_TX_EVENT 0x0128
  46. #define PKTPG_TX_CMD_ST 0x0108
  47. #define PKTPG_BUF_CFG 0x010a
  48. #define PKTPG_BUF_EVENT 0x012c
  49. #define PKTPG_RX_MISS 0x0130
  50. #define PKTPG_TX_COL 0x0132
  51. #define PKTPG_LINE_CTL 0x0112
  52. #define PKTPG_LINE_ST 0x0134
  53. #define PKTPG_SELF_CTL 0x0114
  54. #define PKTPG_SELF_ST 0x0136
  55. #define PKTPG_BUS_CTL 0x0116
  56. #define PKTPG_BUS_ST 0x0138
  57. #define PKTPG_TEST_CTL 0x0118
  58. #define PKTPG_AUI_TIME_DOMAIN_REF 0x013c
  59. #define PKTPG_INTERRUPT_NUMBER 0x0022
  60. #define SELF_ST_INITD 0x0080
  61. #define SELF_ST_SIBUSY 0x0100
  62. /*
  63.  * Initiate transmit registers
  64.  */
  65. #define PKTPG_TX_CMD_REQ 0x0144
  66. #define PKTPG_TX_LENGTH 0x0146
  67. /*
  68.  * Address filter registers
  69.  */
  70. #define PKTPG_LOGICAL_ADDR_FILTER 0x0150
  71. #define PKTPG_IND_ADDR 0x0158
  72. #define PKTPG_INDIVISUAL_ADDR 0x0158
  73. /*
  74.  * Frame locations
  75.  */
  76. #define PKTPG_RX_STATUS 0x0400
  77. #define PKTPG_RX_LENGTH 0x0402
  78. #define PKTPG_RX_FRAME 0x0404
  79. #define PKTPG_TX_FRAME 0x0a00
  80. /*
  81.  * Bit masks
  82.  */
  83. #define SELF_CTL_RESET 0x0040
  84. #define SELF_CTL_LOW_BITS 0x0015
  85. #define SELF_ST_INIT_DONE 0x0080
  86. #define SELF_ST_SI_BUSY 0x0100
  87. /* Bus Status Register */
  88. #define BUS_ST_TX_BID_ERR 0x0080
  89. #define BUS_ST_RDY4TXNOW 0x0100
  90. /* Bus Control Register */
  91. #define BUS_CTL_LOW_BITS 0x0017
  92. #define BUS_CTL_USE_SA 0x0200
  93. #define BUS_CTL_MEM_MODE 0x0400
  94. #define BUS_CTL_IOCHRDY 0x1000
  95. #define BUS_CTL_INT_ENBL 0x8000
  96. #define BUS_CTL_ENABLE_IRQ 0x8000
  97. /* Line Control Register */
  98. #define LINE_CTL_RX_ON 0x0040
  99. #define LINE_CTL_TX_ON 0x0080
  100. #define LINE_CTL_AUI_ONLY 0x0100
  101. #define LINE_CTL_10BASET 0x0000
  102. #define TX_CMD_START_5 0x0000
  103. #define TX_CMD_START_381 0x0040
  104. #define TX_CMD_START_1021 0x0080
  105. #define TX_CMD_START_ALL 0x00c0
  106. #define TX_CMD_FORCE 0x0100
  107. #define TX_CMD_ONECOLL 0x0200
  108. #define TX_CMD_NO_CRC 0x1000
  109. #define TX_CMD_NO_PAD 0x2000
  110. #define TX_CMD_LOW_BITS 0x0009
  111. #define ISQ_REG_NUM 0x003f
  112. #define ISQ_REG_CONTENT 0xffc0
  113. #define RX_EVENT_RX_OK 0x0100
  114. #define RX_EVENT_HASHED 0x0200
  115. #define RX_EVENT_IND_ADDR 0x0400
  116. #define RX_EVENT_BROADCAST 0x0800
  117. #define RX_CTL_RX_OK_A 0x0100
  118. #define RX_CTL_IND_A 0x0400
  119. #define RX_CTL_BCAST_A 0x0800
  120. #define RX_CTL_LOW_BITS 0x0005
  121. #define RX_CFG_SKIP 0x0040
  122. #define RX_CFG_RX_OK_IE 0x0100
  123. #define RX_CFG_LOW_BITS 0x0003
  124. #define RX_CFG_RX_OK_I_E 0x0100
  125. #define RX_CTL_RX_OK_A 0x0100
  126. #define RX_CTL_IND_ADDR_A 0x0400
  127. #define RX_CTL_BROADCAST_A 0x0800
  128. #define BUF_EVENT_RDY_4_TX 0x0100
  129. #define BUF_CFG_RDY_4_TX_I_E 0x0100
  130. #define BUF_CFG_LOW_BITS 0x000b
  131. #define TX_CFG_LOSS_OF_CRC_I_E 0x0040
  132. #define TX_CFG_SQE_ERROR_I_E 0x0080
  133. #define TX_CFG_TX_OK_I_E 0x0100
  134. #define TX_CFG_OUT_OF_WINDOW_I_E 0x0200
  135. #define TX_CFG_JABBER_I_E 0x0400
  136. #define TX_CFG_ANYCOLL_I_E 0x0800
  137. #define TX_CFG_16_COLL_I_E 0x8000
  138. #define TX_CFG_ALL_IE 0x8fc0
  139. #define TX_CFG_LOW_BITS 0x0007
  140. #define TX_CFG_ALL 0x8fc0
  141. #define TX_EVENT_LOSS_OF_CRS 0x0040
  142. #define TX_EVENT_SQE_ERROR 0x0080
  143. #define TX_EVENT_TX_OK 0x0100
  144. #define TX_EVENT_OUT_OF_WINDOW 0x0200
  145. #define TX_EVENT_JABBER 0x0400
  146. #define TX_EVENT_NUM_TX_COLL 0x7800
  147. #define TX_EVENT_16_COLL 0x8000
  148. /* One of the values of 0, 1, 2, 3 */
  149. #define INTERRUPT_NUMBER 0x0000
  150. #define LINE_CTL_10_BASE_T 0x0000
  151. #define LINE_CTL_AUI_ONLY 0x0100
  152. #define LINE_CTL_RX_ON 0x0040
  153. #define LINE_CTL_TX_ON 0x0080
  154. #define LINE_CTL_MOD_BACKOFF 0x0800
  155. #define LINE_CTL_LOW_BITS 0x0013
  156. #define TEST_CTL_FDX 0x4000
  157. #define TEST_CTL_LOW_BITS 0x0019
  158. /*
  159.  * Register numbers
  160.  */
  161. #define REG_NUM_MASK 0x003F
  162. #define REG_NUM_RX_EVENT 0x0004
  163. #define REG_NUM_TX_EVENT 0x0008
  164. #define REG_NUM_BUF_EVENT 0x000c
  165. #define REG_NUM_RX_MISS 0x0010
  166. #define REG_NUM_TX_COL 0x0012
  167. /*
  168.  * I/O mode register mapping
  169.  */
  170. #define IO_RX_TX_DATA_0 0x0000
  171. #define IO_RX_TX_DATA_1 0x0002
  172. #define IO_TX_CMD 0x0004
  173. #define IO_TX_LENGTH 0x0006
  174. #define IO_ISQ 0x0008
  175. #define IO_PACKET_PAGE_POINTER 0x000a
  176. #define IO_PACKET_PAGE_DATA_0 0x000c
  177. #define IO_PACKET_PAGE_DATA_1 0x000e
  178. #define PORT_RXTX_DATA (IO_PACKET_PAGE_BASE_ADDR+0x0000)
  179. #define PORT_RXTX_DATA_1 (IO_PACKET_PAGE_BASE_ADDR+0x0002)
  180. #define PORT_TX_CMD (IO_PACKET_PAGE_BASE_ADDR+0x0004)
  181. #define PORT_TX_LENGTH (IO_PACKET_PAGE_BASE_ADDR+0x0006)
  182. #define PORT_ISQ (IO_PACKET_PAGE_BASE_ADDR+0x0008)
  183. #define PORT_PKTPG_PTR (IO_PACKET_PAGE_BASE_ADDR+0x000A)
  184. #define PORT_PKTPG_DATA (IO_PACKET_PAGE_BASE_ADDR+0x000C)
  185. #define PORT_PKTPG_DATA_1 (IO_PACKET_PAGE_BASE_ADDR+0x000E)
  186. /**********************************************************************
  187.  * Inline functions
  188.  *********************************************************************/
  189. extern volatile unsigned char*  ioPacketPage;
  190. extern volatile struct gpioreg *gpioRegs;
  191. void SetD_SlowIO(ULONG regaddrs, unsigned short regvalue);
  192. unsigned short GetD_SlowIO(ULONG regaddrs);
  193. /*
  194.  * Read data from I/O port.
  195.  */
  196. #define readIoPort(offset) ((unsigned short)GetD_SlowIO((unsigned long)&EthCommand[(offset)]))
  197. /*
  198.  * Write data to I/O port.
  199.  */
  200. #define writeIoPort(offset, data) 
  201. (SetD_SlowIO((unsigned long)&EthCommand[(offset)], (data)))
  202. #if 1
  203. #define CS8900_Tacs (0x0) // 0clk
  204. #define CS8900_Tcos (0x3) // 4clk
  205. #define CS8900_Tacc (0x7) // 14clk
  206. #define CS8900_Tcoh (0x1) // 1clk
  207. #define CS8900_Tah (0x3) // 4clk
  208. #define CS8900_Tacp (0x3) // 6clk
  209. #define CS8900_PMC (0x3) // 16data), hzh
  210. #else
  211. #define CS8900_Tacs (0x3) // 4clk
  212. #define CS8900_Tcos (0x3) // 4clk
  213. #define CS8900_Tacc (0x7) // 14clk
  214. #define CS8900_Tcoh (0x3) // 1clk
  215. #define CS8900_Tah (0x3) // 4clk
  216. #define CS8900_Tacp (0x3) // 6clk
  217. #define CS8900_PMC (0x3) // normal(1data)
  218. #endif
  219. /////////////////////////////////////////////////////////////////////////////////////////////
  220. // Definitions for supporting clone adapters.
  221. /////////////////////////////////////////////////////////////////////////////////////////////
  222. //
  223. // Default value for Adapter->IoBaseAddr
  224. //
  225. #define DEFAULT_IOBASEADDR (PVOID)0x300
  226. //
  227. // Default value for Adapter->InterruptNumber
  228. //
  229. #define DEFAULT_INTERRUPTNUMBER 3
  230. //
  231. // Default value for Adapter->MulticastListMax
  232. //
  233. #define DEFAULT_MULTICASTLISTMAX 8
  234. #endif // _CS8900HARDWARE_