3c359.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:7k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  *  3c359.h (c) 2000 Mike Phillips (mikep@linuxtr.net) All Rights Reserved
  3.  *
  4.  *  Linux driver for 3Com 3C359 Token Link PCI XL cards.
  5.  *
  6.  *  This software may be used and distributed according to the terms
  7.  *  of the GNU General Public License Version 2 or (at your option) 
  8.  *  any later verion, incorporated herein by reference.
  9.  */
  10. #ifndef PCI_DEVICE_ID_3COM_3C359
  11. #define PCI_DEVICE_ID_3COM_3C359 0x3590
  12. #endif
  13. /* Memory Access Commands */
  14. #define IO_BYTE_READ 0x28 << 24
  15. #define IO_BYTE_WRITE 0x18 << 24 
  16. #define IO_WORD_READ 0x20 << 24
  17. #define IO_WORD_WRITE 0x10 << 24
  18. #define MMIO_BYTE_READ 0x88 << 24
  19. #define MMIO_BYTE_WRITE 0x48 << 24
  20. #define MMIO_WORD_READ 0x80 << 24
  21. #define MMIO_WORD_WRITE 0x40 << 24
  22. #define MEM_BYTE_READ 0x8C << 24
  23. #define MEM_BYTE_WRITE 0x4C << 24
  24. #define MEM_WORD_READ 0x84 << 24
  25. #define MEM_WORD_WRITE 0x44 << 24
  26. #define PMBAR 0x1C80
  27. #define PMB_CPHOLD (1<<10)
  28. #define CPATTENTION 0x180D
  29. #define CPA_PMBARVIS (1<<7)
  30. #define CPA_MEMWREN (1<<6)
  31. #define SWITCHSETTINGS 0x1C88
  32. #define EECONTROL 0x1C8A
  33. #define EEDATA 0x1C8C
  34. #define EEREAD 0x0080 
  35. #define EEWRITE 0x0040
  36. #define EEERASE 0x0060
  37. #define EE_ENABLE_WRITE 0x0030
  38. #define EEBUSY (1<<15)
  39. #define WRBR 0xCDE02
  40. #define WWOR 0xCDE04
  41. #define WWCR 0xCDE06
  42. #define MACSTATUS 0xCDE08 
  43. #define MISR_RW 0xCDE0B
  44. #define MISR_AND 0xCDE2B
  45. #define MISR_SET 0xCDE4B
  46. #define RXBUFAREA 0xCDE10
  47. #define RXEARLYTHRESH 0xCDE12
  48. #define TXSTARTTHRESH 0x58
  49. #define DNPRIREQTHRESH 0x2C
  50. #define MISR_CSRB (1<<5)
  51. #define MISR_RASB (1<<4)
  52. #define MISR_SRBFR (1<<3)
  53. #define MISR_ASBFR (1<<2)
  54. #define MISR_ARBF (1<<1) 
  55. /* MISR Flags memory locations */
  56. #define MF_SSBF 0xDFFE0 
  57. #define MF_ARBF 0xDFFE1
  58. #define MF_ASBFR 0xDFFE2
  59. #define MF_SRBFR 0xDFFE3
  60. #define MF_RASB 0xDFFE4
  61. #define MF_CSRB 0xDFFE5
  62. #define MMIO_MACDATA 0x10 
  63. #define MMIO_MAC_ACCESS_CMD 0x14
  64. #define MMIO_TIMER 0x1A
  65. #define MMIO_DMA_CTRL 0x20
  66. #define MMIO_DNLISTPTR 0x24
  67. #define MMIO_HASHFILTER 0x28
  68. #define MMIO_CONFIG 0x29
  69. #define MMIO_DNPRIREQTHRESH 0x2C
  70. #define MMIO_DNPOLL 0x2D
  71. #define MMIO_UPPKTSTATUS 0x30
  72. #define MMIO_FREETIMER 0x34
  73. #define MMIO_COUNTDOWN 0x36
  74. #define MMIO_UPLISTPTR 0x38
  75. #define MMIO_UPPOLL 0x3C
  76. #define MMIO_UPBURSTTHRESH 0x40
  77. #define MMIO_DNBURSTTHRESH 0x41
  78. #define MMIO_INTSTATUS_AUTO 0x56
  79. #define MMIO_TXSTARTTHRESH 0x58
  80. #define MMIO_INTERRUPTENABLE 0x5A
  81. #define MMIO_INDICATIONENABLE 0x5C
  82. #define MMIO_COMMAND 0x5E  /* These two are meant to be the same */
  83. #define MMIO_INTSTATUS 0x5E /* Makes the code more readable this way */
  84. #define INTSTAT_CMD_IN_PROGRESS (1<<12) 
  85. #define INTSTAT_SRB (1<<14)
  86. #define INTSTAT_INTLATCH (1<<0)
  87. /* Indication / Interrupt Mask 
  88.  * Annoyingly the bits to be set in the indication and interrupt enable
  89.  * do not match with the actual bits received in the interrupt, although
  90.  * they are in the same order. 
  91.  * The mapping for the indication / interrupt are:
  92.  * Bit Indication / Interrupt
  93.  *   0 HostError
  94.  *   1 txcomplete
  95.  *   2 updneeded
  96.  *   3 rxcomplete
  97.  *   4 intrequested
  98.  *   5 macerror
  99.  *   6  dncomplete
  100.  *   7 upcomplete
  101.  *   8 txunderrun
  102.  *   9 asbf
  103.  *  10 srbr
  104.  *  11 arbc
  105.  *
  106.  *  The only ones we don't want to receive are txcomplete and rxcomplete
  107.  *  we use dncomplete and upcomplete instead.
  108.  */
  109. #define INT_MASK 0xFF5
  110. /* Note the subtle difference here, IND and INT */
  111. #define SETINDENABLE (8<<12)
  112. #define SETINTENABLE (7<<12)
  113. #define SRBBIT (1<<10)
  114. #define ASBBIT (1<<9)
  115. #define ARBBIT (1<<11)
  116. #define SRB 0xDFE90
  117. #define ASB 0xDFED0
  118. #define ARB 0xD0000
  119. #define SCRATCH 0xDFEF0
  120. #define INT_REQUEST 0x6000 /* (6 << 12) */
  121. #define ACK_INTERRUPT 0x6800 /* (13 <<11) */
  122. #define GLOBAL_RESET 0x00 
  123. #define DNDISABLE 0x5000 
  124. #define DNENABLE 0x4800 
  125. #define DNSTALL 0x3002
  126. #define DNRESET 0x5800
  127. #define DNUNSTALL 0x3003
  128. #define UPRESET 0x2800
  129. #define UPSTALL 0x3000
  130. #define UPUNSTALL 0x3001
  131. #define SETCONFIG 0x4000
  132. #define SETTXSTARTTHRESH 0x9800 
  133. /* Received Interrupts */
  134. #define ASBFINT (1<<13)
  135. #define SRBRINT (1<<14)
  136. #define ARBCINT (1<<15)
  137. #define TXUNDERRUN (1<<11)
  138. #define UPCOMPINT (1<<10)
  139. #define DNCOMPINT (1<<9)
  140. #define HARDERRINT (1<<7)
  141. #define RXCOMPLETE (1<<4)
  142. #define TXCOMPINT (1<<2)
  143. #define HOSTERRINT (1<<1)
  144. /* Receive descriptor bits */
  145. #define RXOVERRUN (1<<19)
  146. #define RXFC (1<<21)
  147. #define RXAR (1<<22)
  148. #define RXUPDCOMPLETE (1<<23)
  149. #define RXUPDFULL (1<<24)
  150. #define RXUPLASTFRAG (1<<31)
  151. /* Transmit descriptor bits */
  152. #define TXDNCOMPLETE (1<<16)
  153. #define TXTXINDICATE (1<<27)
  154. #define TXDPDEMPTY (1<<29)
  155. #define TXDNINDICATE (1<<31)
  156. #define TXDNFRAGLAST (1<<31)
  157. /* Interrupts to Acknowledge */
  158. #define LATCH_ACK 1 
  159. #define TXCOMPACK (1<<1)
  160. #define INTREQACK (1<<2)
  161. #define DNCOMPACK (1<<3)
  162. #define UPCOMPACK (1<<4)
  163. #define ASBFACK (1<<5)
  164. #define SRBRACK (1<<6)
  165. #define ARBCACK (1<<7)
  166. #define XL_IO_SPACE 128
  167. #define SRB_COMMAND_SIZE 50
  168. /* Adapter Commands */
  169. #define REQUEST_INT 0x00
  170. #define MODIFY_OPEN_PARMS 0x01
  171. #define RESTORE_OPEN_PARMS 0x02
  172. #define OPEN_NIC 0x03
  173. #define CLOSE_NIC 0x04
  174. #define SET_SLEEP_MODE 0x05
  175. #define SET_GROUP_ADDRESS 0x06
  176. #define SET_FUNC_ADDRESS 0x07
  177. #define READ_LOG 0x08
  178. #define SET_MULTICAST_MODE 0x0C
  179. #define CHANGE_WAKEUP_PATTERN 0x0D
  180. #define GET_STATISTICS 0x13
  181. #define SET_RECEIVE_MODE 0x1F
  182. /* ARB Commands */
  183. #define RECEIVE_DATA 0x81
  184. #define RING_STATUS_CHANGE 0x84
  185. /* ASB Commands */
  186. #define ASB_RECEIVE_DATE 0x81 
  187. /* Defines for LAN STATUS CHANGE reports */
  188. #define LSC_SIG_LOSS 0x8000
  189. #define LSC_HARD_ERR 0x4000
  190. #define LSC_SOFT_ERR 0x2000
  191. #define LSC_TRAN_BCN 0x1000
  192. #define LSC_LWF      0x0800
  193. #define LSC_ARW      0x0400
  194. #define LSC_FPE      0x0200
  195. #define LSC_RR       0x0100
  196. #define LSC_CO       0x0080
  197. #define LSC_SS       0x0040
  198. #define LSC_RING_REC 0x0020
  199. #define LSC_SR_CO    0x0010
  200. #define LSC_FDX_MODE 0x0004
  201. #define XL_MAX_ADAPTERS 8 /* 0x08 __MODULE_STRING can't hand 0xnn */
  202. /* 3c359 defaults for buffers */
  203.  
  204. #define XL_RX_RING_SIZE 16 /* must be a power of 2 */
  205. #define XL_TX_RING_SIZE 16 /* must be a power of 2 */
  206. #define PKT_BUF_SZ 4096 /* Default packet size */
  207. /* 3c359 data structures */
  208. struct xl_tx_desc {
  209. u32 dnnextptr ; 
  210. u32 framestartheader ; 
  211. u32 buffer ;
  212. u32 buffer_length ;
  213. };
  214. struct xl_rx_desc {
  215. u32 upnextptr ; 
  216. u32 framestatus ; 
  217. u32 upfragaddr ; 
  218. u32 upfraglen ; 
  219. };
  220. struct xl_private {
  221. /* These two structures must be aligned on 8 byte boundaries */
  222. /* struct xl_rx_desc xl_rx_ring[XL_RX_RING_SIZE]; */
  223. /* struct xl_tx_desc xl_tx_ring[XL_TX_RING_SIZE]; */
  224. struct xl_rx_desc *xl_rx_ring ; 
  225. struct xl_tx_desc *xl_tx_ring ; 
  226. struct sk_buff *tx_ring_skb[XL_TX_RING_SIZE], *rx_ring_skb[XL_RX_RING_SIZE];
  227. int tx_ring_head, tx_ring_tail ;  
  228. int rx_ring_tail, rx_ring_no ; 
  229. int free_ring_entries ; 
  230. u16 srb;
  231. u16 arb;
  232. u16 asb;
  233. u8 *xl_mmio;
  234. char *xl_card_name;
  235. struct pci_dev *pdev ; 
  236. spinlock_t xl_lock ; 
  237. volatile int srb_queued;    
  238. struct wait_queue *srb_wait;
  239. volatile int asb_queued;   
  240. struct net_device_stats xl_stats ;
  241. u16 mac_buffer ; 
  242. u16 xl_lan_status ;
  243. u8 xl_ring_speed ;
  244. u16 pkt_buf_sz ; 
  245. u8 xl_message_level; 
  246. u16 xl_copy_all_options ;  
  247. unsigned char xl_functional_addr[4] ; 
  248. u16 xl_addr_table_addr, xl_parms_addr ; 
  249. u8 xl_laa[6] ; 
  250. u32 rx_ring_dma_addr ; 
  251. u32 tx_ring_dma_addr ; 
  252. };