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

Linux/Unix编程

开发平台:

Unix_Linux

  1. #ifndef _IBM_LANA_INCLUDE_
  2. #define _IBM_LANA_INCLUDE_
  3. #ifdef _IBM_LANA_DRIVER_
  4. /* version-dependent functions/structures */
  5. #if LINUX_VERSION_CODE >= 0x020318
  6. #define IBMLANA_READB(addr) isa_readb(addr)
  7. #define IBMLANA_TOIO(dest, src, len) isa_memcpy_toio(dest, src, len)
  8. #define IBMLANA_FROMIO(dest, src, len) isa_memcpy_fromio(dest, src, len)
  9. #define IBMLANA_SETIO(dest, val, len) isa_memset_io(dest, val, len)
  10. #define IBMLANA_NETDEV net_device
  11. #else
  12. #define IBMLANA_READB(addr) readb(addr)
  13. #define IBMLANA_TOIO(dest, src, len) memcpy_toio(dest, src, len)
  14. #define IBMLANA_FROMIO(dest, src, len) memcpy_fromio(dest, src, len)
  15. #define IBMLANA_SETIO(dest, val, len) memset_io(dest, val, len)
  16. #define IBMLANA_NETDEV device
  17. #endif
  18. /* maximum packet size */
  19. #define PKTSIZE 1524
  20. /* number of transmit buffers */
  21. #define TXBUFCNT 4
  22. /* Adapter ID's */
  23. #define IBM_LANA_ID 0xffe0
  24. /* media enumeration - defined in a way that it fits onto the LAN/A's
  25.    POS registers... */
  26. typedef enum { Media_10BaseT, Media_10Base5,
  27. Media_Unknown, Media_10Base2, Media_Count
  28. } ibmlana_medium;
  29. /* private structure */
  30. typedef struct {
  31. unsigned int slot; /* MCA-Slot-#                       */
  32. struct net_device_stats stat; /* packet statistics            */
  33. int realirq; /* memorizes actual IRQ, even when 
  34.    currently not allocated          */
  35. ibmlana_medium medium; /* physical cannector               */
  36. u32 tdastart, txbufstart, /* addresses                        */
  37.  rrastart, rxbufstart, rdastart, rxbufcnt, txusedcnt;
  38. int nextrxdescr, /* next rx descriptor to be used    */
  39.  lastrxdescr, /* last free rx descriptor          */
  40.  nexttxdescr, /* last tx descriptor to be used    */
  41.  currtxdescr, /* tx descriptor currently tx'ed    */
  42.  txused[TXBUFCNT]; /* busy flags                       */
  43. } ibmlana_priv;
  44. /* this card uses quite a lot of I/O ports...luckily the MCA bus decodes 
  45.    a full 64K I/O range... */
  46. #define IBM_LANA_IORANGE 0xa0
  47. /* Command Register: */
  48. #define SONIC_CMDREG     0x00
  49. #define CMDREG_HTX       0x0001 /* halt transmission                */
  50. #define CMDREG_TXP       0x0002 /* start transmission               */
  51. #define CMDREG_RXDIS     0x0004 /* disable receiver                 */
  52. #define CMDREG_RXEN      0x0008 /* enable receiver                  */
  53. #define CMDREG_STP       0x0010 /* stop timer                       */
  54. #define CMDREG_ST        0x0020 /* start timer                      */
  55. #define CMDREG_RST       0x0080 /* software reset                   */
  56. #define CMDREG_RRRA      0x0100 /* force SONIC to read first RRA    */
  57. #define CMDREG_LCAM      0x0200 /* force SONIC to read CAM descrs   */
  58. /* Data Configuration Register */
  59. #define SONIC_DCREG      0x02
  60. #define DCREG_EXBUS      0x8000 /* Extended Bus Mode                */
  61. #define DCREG_LBR        0x2000 /* Latched Bus Retry                */
  62. #define DCREG_PO1        0x1000 /* Programmable Outputs             */
  63. #define DCREG_PO0        0x0800
  64. #define DCREG_SBUS       0x0400 /* Synchronous Bus Mode             */
  65. #define DCREG_USR1       0x0200 /* User Definable Pins              */
  66. #define DCREG_USR0       0x0100
  67. #define DCREG_WC0        0x0000 /* 0..3 Wait States                 */
  68. #define DCREG_WC1        0x0040
  69. #define DCREG_WC2        0x0080
  70. #define DCREG_WC3        0x00c0
  71. #define DCREG_DW16       0x0000 /* 16 bit Bus Mode                  */
  72. #define DCREG_DW32       0x0020 /* 32 bit Bus Mode                  */
  73. #define DCREG_BMS        0x0010 /* Block Mode Select                */
  74. #define DCREG_RFT4       0x0000 /* 4/8/16/24 bytes RX  Threshold    */
  75. #define DCREG_RFT8       0x0004
  76. #define DCREG_RFT16      0x0008
  77. #define DCREG_RFT24      0x000c
  78. #define DCREG_TFT8       0x0000 /* 8/16/24/28 bytes TX Threshold    */
  79. #define DCREG_TFT16      0x0001
  80. #define DCREG_TFT24      0x0002
  81. #define DCREG_TFT28      0x0003
  82. /* Receive Control Register */
  83. #define SONIC_RCREG      0x04
  84. #define RCREG_ERR        0x8000 /* accept damaged and collided pkts */
  85. #define RCREG_RNT        0x4000 /* accept packets that are < 64     */
  86. #define RCREG_BRD        0x2000 /* accept broadcasts                */
  87. #define RCREG_PRO        0x1000 /* promiscous mode                  */
  88. #define RCREG_AMC        0x0800 /* accept all multicasts            */
  89. #define RCREG_LB_NONE    0x0000 /* no loopback                      */
  90. #define RCREG_LB_MAC     0x0200 /* MAC loopback                     */
  91. #define RCREG_LB_ENDEC   0x0400 /* ENDEC loopback                   */
  92. #define RCREG_LB_XVR     0x0600 /* Transceiver loopback             */
  93. #define RCREG_MC         0x0100 /* Multicast received               */
  94. #define RCREG_BC         0x0080 /* Broadcast received               */
  95. #define RCREG_LPKT       0x0040 /* last packet in RBA               */
  96. #define RCREG_CRS        0x0020 /* carrier sense present            */
  97. #define RCREG_COL        0x0010 /* recv'd packet with collision     */
  98. #define RCREG_CRCR       0x0008 /* recv'd packet with CRC error     */
  99. #define RCREG_FAER       0x0004 /* recv'd packet with inv. framing  */
  100. #define RCREG_LBK        0x0002 /* recv'd loopback packet           */
  101. #define RCREG_PRX        0x0001 /* recv'd packet is OK              */
  102. /* Transmit Control Register */
  103. #define SONIC_TCREG      0x06
  104. #define TCREG_PINT       0x8000 /* generate interrupt after TDA read */
  105. #define TCREG_POWC       0x4000 /* timer start out of window detect */
  106. #define TCREG_CRCI       0x2000 /* inhibit CRC generation           */
  107. #define TCREG_EXDIS      0x1000 /* disable excessive deferral timer */
  108. #define TCREG_EXD        0x0400 /* excessive deferral occurred       */
  109. #define TCREG_DEF        0x0200 /* single deferral occurred          */
  110. #define TCREG_NCRS       0x0100 /* no carrier detected              */
  111. #define TCREG_CRSL       0x0080 /* carrier lost                     */
  112. #define TCREG_EXC        0x0040 /* excessive collisions occurred     */
  113. #define TCREG_OWC        0x0020 /* out of window collision occurred  */
  114. #define TCREG_PMB        0x0008 /* packet monitored bad             */
  115. #define TCREG_FU         0x0004 /* FIFO underrun                    */
  116. #define TCREG_BCM        0x0002 /* byte count mismatch of fragments */
  117. #define TCREG_PTX        0x0001 /* packet transmitted OK            */
  118. /* Interrupt Mask Register */
  119. #define SONIC_IMREG      0x08
  120. #define IMREG_BREN       0x4000 /* interrupt when bus retry occurred */
  121. #define IMREG_HBLEN      0x2000 /* interrupt when heartbeat lost    */
  122. #define IMREG_LCDEN      0x1000 /* interrupt when CAM loaded        */
  123. #define IMREG_PINTEN     0x0800 /* interrupt when PINT in TDA set   */
  124. #define IMREG_PRXEN      0x0400 /* interrupt when packet received   */
  125. #define IMREG_PTXEN      0x0200 /* interrupt when packet was sent   */
  126. #define IMREG_TXEREN     0x0100 /* interrupt when send failed       */
  127. #define IMREG_TCEN       0x0080 /* interrupt when timer completed   */
  128. #define IMREG_RDEEN      0x0040 /* interrupt when RDA exhausted     */
  129. #define IMREG_RBEEN      0x0020 /* interrupt when RBA exhausted     */
  130. #define IMREG_RBAEEN     0x0010 /* interrupt when RBA too short     */
  131. #define IMREG_CRCEN      0x0008 /* interrupt when CRC counter rolls */
  132. #define IMREG_FAEEN      0x0004 /* interrupt when FAE counter rolls */
  133. #define IMREG_MPEN       0x0002 /* interrupt when MP counter rolls  */
  134. #define IMREG_RFOEN      0x0001 /* interrupt when Rx FIFO overflows */
  135. /* Interrupt Status Register */
  136. #define SONIC_ISREG      0x0a
  137. #define ISREG_BR         0x4000 /* bus retry occurred                */
  138. #define ISREG_HBL        0x2000 /* heartbeat lost                   */
  139. #define ISREG_LCD        0x1000 /* CAM loaded                       */
  140. #define ISREG_PINT       0x0800 /* PINT in TDA set                  */
  141. #define ISREG_PKTRX      0x0400 /* packet received                  */
  142. #define ISREG_TXDN       0x0200 /* packet was sent                  */
  143. #define ISREG_TXER       0x0100 /* send failed                      */
  144. #define ISREG_TC         0x0080 /* timer completed                  */
  145. #define ISREG_RDE        0x0040 /* RDA exhausted                    */
  146. #define ISREG_RBE        0x0020 /* RBA exhausted                    */
  147. #define ISREG_RBAE       0x0010 /* RBA too short for received frame */
  148. #define ISREG_CRC        0x0008 /* CRC counter rolls over           */
  149. #define ISREG_FAE        0x0004 /* FAE counter rolls over           */
  150. #define ISREG_MP         0x0002 /* MP counter rolls  over           */
  151. #define ISREG_RFO        0x0001 /* Rx FIFO overflows                */
  152. #define SONIC_UTDA       0x0c /* current transmit descr address   */
  153. #define SONIC_CTDA       0x0e
  154. #define SONIC_URDA       0x1a /* current receive descr address    */
  155. #define SONIC_CRDA       0x1c
  156. #define SONIC_CRBA0      0x1e /* current receive buffer address   */
  157. #define SONIC_CRBA1      0x20
  158. #define SONIC_RBWC0      0x22 /* word count in receive buffer     */
  159. #define SONIC_RBWC1      0x24
  160. #define SONIC_EOBC       0x26 /* minimum space to be free in RBA  */
  161. #define SONIC_URRA       0x28 /* upper address of CDA & Recv Area */
  162. #define SONIC_RSA        0x2a /* start of receive resource area   */
  163. #define SONIC_REA        0x2c /* end of receive resource area     */
  164. #define SONIC_RRP        0x2e /* resource read pointer            */
  165. #define SONIC_RWP        0x30 /* resource write pointer           */
  166. #define SONIC_CAMEPTR    0x42 /* CAM entry pointer                */
  167. #define SONIC_CAMADDR2   0x44 /* CAM address ports                */
  168. #define SONIC_CAMADDR1   0x46
  169. #define SONIC_CAMADDR0   0x48
  170. #define SONIC_CAMPTR     0x4c /* lower address of CDA             */
  171. #define SONIC_CAMCNT     0x4e /* # of CAM descriptors to load     */
  172. /* Data Configuration Register 2    */
  173. #define SONIC_DCREG2     0x7e
  174. #define DCREG2_EXPO3     0x8000 /* extended programmable outputs    */
  175. #define DCREG2_EXPO2     0x4000
  176. #define DCREG2_EXPO1     0x2000
  177. #define DCREG2_EXPO0     0x1000
  178. #define DCREG2_HD        0x0800 /* heartbeat disable                */
  179. #define DCREG2_JD        0x0200 /* jabber timer disable             */
  180. #define DCREG2_AUTO      0x0100 /* enable AUI/TP auto selection     */
  181. #define DCREG2_XWRAP     0x0040 /* TP transceiver loopback          */
  182. #define DCREG2_PH        0x0010 /* HOLD request timing              */
  183. #define DCREG2_PCM       0x0004 /* packet compress when matched     */
  184. #define DCREG2_PCNM      0x0002 /* packet compress when not matched */
  185. #define DCREG2_RJCM      0x0001 /* inverse packet match via CAM     */
  186. /* Board Control Register: Enable RAM, Interrupts... */
  187. #define BCMREG           0x80
  188. #define BCMREG_RAMEN     0x80 /* switch over to RAM               */
  189. #define BCMREG_IPEND     0x40 /* interrupt pending ?              */
  190. #define BCMREG_RESET     0x08 /* reset board                      */
  191. #define BCMREG_16BIT     0x04 /* adapter in 16-bit slot           */
  192. #define BCMREG_RAMWIN    0x02 /* enable RAM window                */
  193. #define BCMREG_IEN       0x01 /* interrupt enable                 */
  194. /* MAC Address PROM */
  195. #define MACADDRPROM      0x92
  196. /* structure of a CAM entry */
  197. typedef struct {
  198. u32 index; /* pointer into CAM area            */
  199. u32 addr0; /* address part (bits 0..15 used)   */
  200. u32 addr1;
  201. u32 addr2;
  202. } camentry_t;
  203. /* structure of a receive resource */
  204. typedef struct {
  205. u32 startlo; /* start address (bits 0..15 used)  */
  206. u32 starthi;
  207. u32 cntlo; /* size in 16-bit quantities        */
  208. u32 cnthi;
  209. } rra_t;
  210. /* structure of a receive descriptor */
  211. typedef struct {
  212. u32 status; /* packet status                    */
  213. u32 length; /* length in bytes                  */
  214. u32 startlo; /* start address                    */
  215. u32 starthi;
  216. u32 seqno; /* frame sequence                   */
  217. u32 link; /* pointer to next descriptor       */
  218. /* bit 0 = EOL                      */
  219. u32 inuse; /* !=0 --> free for SONIC to write  */
  220. } rda_t;
  221. /* structure of a transmit descriptor */
  222. typedef struct {
  223. u32 status; /* transmit status                  */
  224. u32 config; /* value for TCR                    */
  225. u32 length; /* total length                     */
  226. u32 fragcount; /* number of fragments              */
  227. u32 startlo; /* start address of fragment        */
  228. u32 starthi;
  229. u32 fraglength; /* length of this fragment          */
  230. /* more address/length triplets may */
  231. /* follow here                      */
  232. u32 link; /* pointer to next descriptor       */
  233. /* bit 0 = EOL                      */
  234. } tda_t;
  235. #endif /* _IBM_LANA_DRIVER_ */
  236. extern int ibmlana_probe(struct IBMLANA_NETDEV *);
  237. #endif /* _IBM_LANA_INCLUDE_ */