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

VxWorks

开发平台:

C/C++

  1. /* if_fei.h - Intel 82557 network interface header */
  2. /* Copyright 1990-2001 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01f,09nov01,dat  Adding obsolescence warnings to outdated drivers
  7. 01e,09mar99,cn   added typedef CSR_ID (SPR# 25242).
  8. 01d,17mar98,sbs  added PCI specific board definitions.
  9. 01c.13nov96,hdn  added two members to BOARD_INFO. removed two xxxAddrGet().
  10. 01b.06oct96,myz  added board specific data structure
  11. 01a,02sep96,dzb  written, based on v02h of h/drv/netif/if_ei.h.
  12. */
  13. #ifndef __INCif_feih
  14. #define __INCif_feih
  15. #include "etherLib.h"
  16. #warning "if_fei is obsolete, please use fei82557End driver"
  17. #ifdef __cplusplus
  18. extern "C" {
  19. #endif
  20. #if ((CPU_FAMILY==I960) && (defined __GNUC__))
  21. #pragma align 1                 /* tell gcc960 not to optimize alignments */
  22. #endif /* CPU_FAMILY==I960 */
  23. #define MC_FEI MC_EI  /* temp */
  24. /* board specific infomation */
  25. typedef struct
  26.     {
  27.     UINT32 vector;               /* interrupt vector number */
  28.     UINT32 baseAddr;  /* memory base address for CSR */
  29.     UCHAR  enetAddr[6];  /* ethernet address */
  30.     int (*intEnable)(int unit);  /* board specific interrupt enable routine */
  31.     int (*intDisable)(int unit); /* board specific interrupt disable routine */
  32.     int (*intAck) (int unit);    /* interrupt ack */
  33.     UINT32 (*sysLocalToBus)(int unit,UINT32 localAdr);
  34.     UINT32 (*sysBusToLocal)(int unit,UINT32 sysAdr);
  35.     /* configuration parameters, user can override in the BSP */
  36.     UINT8 phyAddr;  /* PHY device address, valid addresses: 0-32 */
  37.     UINT8 phySpeed;  
  38.     UINT8 phyDpx;
  39.     UINT8 fill0;
  40.     UINT16 tcbTxThresh;
  41.     UINT16 others; /* allow you write all bits to Mode Control Register in the
  42.    PHY device, don't touch it unless you know what you're doing. */
  43.     UINT32 spare1;
  44.     UINT32 spare2;
  45.     UINT32 spare3;
  46.     UINT32 spare4;
  47.     } BOARD_INFO;
  48. /* Intel PRO-100B PCI specific definitions */
  49. #define PRO100B_PCI_VENDOR_ID   0x8086  /* PCI vendor ID */
  50. #define PRO100B_PCI_DEVICE_ID   0x1229  /* PCI device ID */
  51. /* constants needed within this file */
  52. #define FEI_MAX_UNITS 4 /* max units supported */
  53. #define FEI_CFD_DEF 32 /* default number of CFDs */
  54. #define FEI_RFD_DEF 32 /* default number of RFDs */
  55. #define FEI_RFD_LOAN 8 /* number RFDs that can be loaned */
  56. #define EH_SIZE 14   /* avoid structure padding issues */
  57. #define N_MCAST 12
  58. /* Intel 82557 endian safe link macros and structure definitions */
  59. #define LINK_WR(pLink,value)
  60.     (((pLink)->lsw = (UINT16)((UINT32)(value) & 0x0000ffff)),
  61.     ((pLink)->msw  = (UINT16)(((UINT32)(value) >> 16) & 0x0000ffff)))
  62. #define LINK_RD(pLink) ((pLink)->lsw | ((pLink)->msw << 16))
  63. #define STAT_RD LINK_RD /* statistic read is a link read */
  64. #define STAT_WR LINK_WR /* statistic write is a link write */
  65. #define PORT_WR LINK_WR /* port write is a link write */
  66. typedef struct fei_link  /* FEI_LINK - endian resolvable link */
  67.     {
  68.     UINT16  lsw; /* least significant word */
  69.     UINT16  msw; /* most significant word */
  70.     } FEI_LINK;
  71. /* Intel 82557 structure and offset */
  72. typedef struct csr  /* CSR - Control Status Registers */
  73.     {
  74.     volatile UINT16     scbStatus;
  75.     volatile UINT16     scbCommand;
  76.     FEI_LINK  scbGP; /* 0x04: SCB General Pointer */
  77.     FEI_LINK  port; /* 0x08: PORT register */
  78.     UINT16 flashCR; /* 0x0c: FLASH Control Register */
  79.     UINT16 eepromCR; /* 0x0e: EEPROM Control Register */
  80.     FEI_LINK mdiCR; /* 0x10: MDI Control Register */
  81.     FEI_LINK  rxbc; /* 0x14: early RCV Byte Count */
  82.     } CSR;
  83. typedef CSR * CSR_ID;
  84. #define SCB_STATUS 0x00 /* SCB status byte */
  85. #define SCB_CMD 0x02 /* SCB command byte */
  86. #define SCB_POINTER 0x04 /* SCB pointer */
  87. #define SCB_PORT 0x08 /* SCB port register */
  88. #define SCB_FLASH 0x0c /* SCB flash control register */
  89. #define SCB_EEPROM 0x0e /* SCB eeprom control register */
  90. #define SCB_MDI 0x10 /* SCB mdi control register */
  91. #define SCB_EARLYRX 0x14 /* SCB early receive byte count */
  92. /* SCB Status Word byte mask definitions */
  93. #define SCB_S_RUMASK 0x3c /* RU status mask */
  94. #define SCB_S_RUIDLE 0x00 /* RU is idle */
  95. #define SCB_S_RUSUSP 0x04 /* RU is suspended */
  96. #define SCB_S_RUNORSR 0x08 /* RU no more resources */
  97. #define SCB_S_RURDY 0x10 /* RU is ready */
  98. #define SCB_S_RUSUSPNR 0x24 /* RU is suspended/no more resources */
  99. #define SCB_S_RUNORSRBD 0x28 /* RU no more resources/no more RBD's */
  100. #define SCB_S_RURDYBD 0x30 /* RU is ready/no more RBD's */
  101. #define SCB_S_CUMASK 0xc0 /* CU status mask */
  102. #define SCB_S_CUIDLE 0x00 /* CU is idle */
  103. #define SCB_S_CUSUSP 0x40 /* CU is suspended */
  104. #define SCB_S_CUACTIVE 0x80 /* CU is active */
  105. #define SCB_S_MASK      0xff
  106. /* SCB STAT/ACK byte bit mask definitions */
  107. #define SCB_S_STATMASK 0xfc00 /* stat mask */
  108. #define SCB_S_SWI 0x0400 /* software generated interrupt */
  109. #define SCB_S_MDI 0x0800 /* An MDI read or write cycle is done */
  110. #define SCB_S_RNR 0x1000 /* RU left the ready state */
  111. #define SCB_S_CNA 0x2000 /* CU left the active state */
  112. #define SCB_S_CI 0x2000 /* CU entered the idle state */
  113. #define SCB_S_FR 0x4000 /* RU finished receiveing a frame */
  114. #define SCB_S_CX 0x8000 /* CU finished a cmd with I bit set */
  115. #define SCB_S_TNO 0x8000 /* Tx command ended with not OK */
  116. /* SCB Command byte bit mask definitions */
  117. #define SCB_C_RUMASK 0x07 /* RU Command mask */
  118. #define SCB_C_RUNOP 0x00 /* NOP */
  119. #define SCB_C_RUSTART 0x01 /* RU start reception of frames */
  120. #define SCB_C_RURESUME 0x02 /* RU resume reception of frames */
  121. #define SCB_C_RUABORT 0x04 /* RU abort receiver immediately */
  122. #define SCB_C_RULDHDS 0x05 /* RU load header data size */
  123. #define SCB_C_RULDBASE 0x06 /* load RU base address */
  124. #define SCB_C_RURBDRSM 0x07 /* RBD resume */
  125. #define SCB_C_CUMASK 0x70 /* CU Command mask */
  126. #define SCB_C_CUNOP 0x00 /* NOP */
  127. #define SCB_C_CUSTART 0x10 /* CU start execution */
  128. #define SCB_C_CURESUME 0x20 /* CU resume execution */
  129. #define SCB_C_CULDDUMP 0x40 /* load dump counters address */
  130. #define SCB_C_CUDUMP 0x50 /* dump stat counters */
  131. #define SCB_C_CULDBASE 0x60 /* load CU base address */
  132. #define SCB_C_CUDUMPRST 0x70 /* dump and reset stat counters */
  133. #define SCB_CR_MASK     0xff
  134. /* SCB Interrupt Control byte bit mask definitions */
  135. #define SCB_C_M 0x0100 /* interrupt mask */
  136. #define SCB_C_SI 0x0200 /* software generated interrupt */
  137. typedef struct fei_count /* FEI_COUNT - 82557 statistical counters */
  138.     {
  139.     FEI_LINK txGood; /* tx good frames */
  140.     FEI_LINK txMaxCol; /* tx max collisions errors */
  141.     FEI_LINK txLateCol; /* tx late collisions errors */
  142.     FEI_LINK txUnder; /* tx underrun errors */
  143.     FEI_LINK txCRS; /* tx carrier sense loss */
  144.     FEI_LINK txDefer; /* tx deferred */
  145.     FEI_LINK txSglCol; /* tx single collisions */
  146.     FEI_LINK txMultCol; /* tx multiple collisions */
  147.     FEI_LINK txTotCol; /* tx total collisions */
  148.     FEI_LINK rxGood; /* rx good frames */
  149.     FEI_LINK rxCRC; /* rx CRC errors */
  150.     FEI_LINK rxAllgn; /* rx allignment errors */
  151.     FEI_LINK rxRsr; /* rx resource errors */
  152.     FEI_LINK rxOver; /* rx overrun errors */
  153.     FEI_LINK rxCDT; /* rx collision detect errors */
  154.     FEI_LINK rxShort; /* rx short frame errors */
  155.     } FEI_COUNT;
  156. /* PORT commands */
  157. #define FEI_PORT_RESET 0x0 /* PORT reset command */
  158. #define FEI_PORT_SELFTEST 0x1 /* PORT selftest command  */
  159. #define FEI_PORT_SELRESET 0x2 /* PORT selective reset command */
  160. #define FEI_PORT_DUMP 0x3 /* PORT dump command */
  161. /* Action Command Descriptions */
  162. typedef struct ac_iasetup  /* AC_IASETUP - Individual Address Setup */
  163.     {
  164.     UINT8 ciAddress[6]; /* local ethernet address */
  165.     UINT16 ciFill;
  166.     } AC_IASETUP;
  167. typedef struct ac_config  /* AC_CONFIG - i82557 Configure */
  168.     {
  169.     UINT8 ccByte0; /* byte count */
  170.     UINT8 ccByte1; /* FIFO limits */
  171.     UINT8 ccByte2; /* adaptive IFS */
  172.     UINT8 ccByte3; /* reserved - set to 0 */
  173.     UINT8 ccByte4; /* rx max byte count */
  174.     UINT8 ccByte5; /* tx max byte count, byte cnt enable */
  175.     UINT8 ccByte6; /* save bf, CI/TNO int, late SCB */
  176.     UINT8 ccByte7; /* underrun retry, short discard */
  177.     UINT8 ccByte8; /* 503/MII */
  178.     UINT8 ccByte9; /* reserved - set to 0 */
  179.     UINT8 ccByte10; /* loopback, reamble, NSAI */
  180.     UINT8 ccByte11; /* linear priority */
  181.     UINT8 ccByte12; /* interframe spacing, L. pri mode */
  182.     UINT8 ccByte13; /* reserved - set to 0 */
  183.     UINT8 ccByte14; /* reserved - set to 0xf2 */
  184.     UINT8 ccByte15; /* CRS+CDT, Broadcast, promisc  */
  185.     UINT8 ccByte16; /* reserved - set to 0 */
  186.     UINT8 ccByte17; /* reserved - set to 0x40 */
  187.     UINT8 ccByte18; /* CRC, padding, stripping */
  188.     UINT8 ccByte19; /* full duplex, force full duplex */
  189.     UINT8 ccByte20; /* multi IA */
  190.     UINT8 ccByte21; /* multicast */
  191.     } AC_CONFIG;
  192. typedef struct ac_mcast  /* AC_MCAST - Mulitcast Setup */
  193.     {
  194.     UINT16 cmMcCount; /* the number of bytes in MC list */
  195.     UINT8 cmAddrList[6 * N_MCAST];/* mulitcast address list */
  196.     } AC_MCAST;
  197. typedef struct ac_tcb  /* AC_TCB - Transmit Control Blocks */
  198.     {
  199.     FEI_LINK pTBD; /* link to tx buf desc array */
  200.     UINT16 count; /* length of data */
  201.     UINT8 txThresh; /* tx threshold */
  202.     UINT8 tbdNum; /* tx buf desc number */
  203.     UINT8 enetHdr [EH_SIZE];/* the ethernet header */
  204.     char enetData [ETHERMTU];/* transmit data */
  205.     UINT16 ccFill; /* padding */
  206.     } AC_TCB;
  207. /* special TCB-specific command block bit mask definitions */
  208. #define CFD_S_TX_DMA_U 0x1000 /* DMA underrun */
  209. #define TCB_CNT_EOF 0x8000 /* all data kept in TFD */
  210. #define CFD_C_TX_FLEX 0x0008 /* use flexible mode */
  211. typedef struct ac_dump  /* AC_DUMP - Dump */
  212.     {
  213.     FEI_LINK bufAddr;  /* address of dump buffer */
  214.     } AC_DUMP;
  215. /* special Diag-specific command block bit mask definitions */
  216. #define CFD_S_DIAG_F 0x0800 /* diag failed */
  217. /* Command Frame Description and defines */
  218. typedef struct cfd  /* CFD - Command Frame Descriptor */
  219.     {
  220.     volatile UINT16 cfdStatus; /* command status field */
  221.     UINT16 cfdCommand; /* command field */
  222.     FEI_LINK link; /* address of next CB */
  223.     union  /* command dependent section */
  224. {
  225. struct ac_iasetup cfd_iasetup; /* IA setup */
  226. struct ac_config cfd_config; /* config */
  227. struct ac_mcast cfd_mcast; /* multicast setup */
  228. struct ac_tcb cfd_tcb; /* transmit */
  229. struct ac_dump cfd_dump; /* dump */
  230. } cfd_cmd;
  231.     struct cfd * pPrev; /* previos CFD */
  232.     } CFD;
  233. #define cfdIASetup cfd_cmd.cfd_iasetup
  234. #define cfdConfig cfd_cmd.cfd_config
  235. #define cfdMcast  cfd_cmd.cfd_mcast
  236. #define cfdTcb   cfd_cmd.cfd_tcb
  237. #define cfdDump  cfd_cmd.cfd_dump
  238. /* Action Status Word bit mask definitions */
  239. #define CFD_S_OK 0x2000 /* Command completed successfully */
  240. #define CFD_S_B         0x4000          /* CU starts access this CFD */
  241. #define CFD_S_COMPLETE 0x8000 /* Command complete */
  242. /* Action Command Word bit mask definitions */
  243. #define CFD_C_NOP 0x0000 /* No Operation */
  244. #define CFD_C_IASETUP 0x0001 /* Individual Address Setup */
  245. #define CFD_C_CONFIG 0x0002 /* Configure Chip */
  246. #define CFD_C_MASETUP 0x0003 /* Multicast Setup */
  247. #define CFD_C_XMIT 0x0004 /* Transmit (see below too ...) */
  248. #define CFD_C_DUMP 0x0006 /* Dump Registers */
  249. #define CFD_C_DIAG 0x0007 /* Diagnose */
  250. #define CFD_C_INT 0x2000 /* 557 interrupts CPU after execution */
  251. #define CFD_C_SUSP 0x4000 /* CU should suspend after execution */
  252. #define CFD_C_EL 0x8000 /* End of command list */
  253. /* 82557 Receive Frame Descriptors */
  254. typedef struct rfd  /* RFD - Receive Frame Descriptor */
  255.     {
  256.     volatile UINT16 rfdStatus; /* status field */
  257.     UINT16 rfdCommand; /* command field */
  258.     FEI_LINK link; /* link to next rfd */
  259.     FEI_LINK pRBD; /* link to rx buf desc array */
  260.     volatile UINT16 actualCnt; /* actual byte count */
  261.     UINT16 bufSize; /* buffer size */
  262.     UINT8 enetHdr [EH_SIZE];/* the ethernet header */
  263.     char enetData [ETHERMTU];/* received data */
  264.     UINT8 refCnt; /* reference count */
  265.     UINT8 ccFill; /* padding */
  266.     struct rfd * pPrev; /* previos RFD */
  267.     } RFD;
  268. /* RFD bit mask definitions */
  269. #define RFD_S_COLL 0x0001 /* collision during reception */
  270. #define RFD_S_IA 0x0002 /* individual address match */
  271. #define RFD_S_RXER 0x0010 /* receive error */
  272. #define RFD_S_LEN 0x0020 /* type/len field designator */
  273. #define RFD_S_SHORT 0x0080 /* frame too short */
  274. #define RFD_S_DMA 0x0100 /* DMA Overrun failure to get bus */
  275. #define RFD_S_RSRC 0x0200 /* received, but ran out of buffers */
  276. #define RFD_S_ALGN 0x0400 /* received misaligned with CRC error */
  277. #define RFD_S_CRC 0x0800 /* received with CRC error */
  278. #define RFD_S_OK 0x2000 /* frame received successfully */
  279. #define RFD_S_B         0x4000          /* RU begins accessing this RFD */
  280. #define RFD_S_COMPLETE 0x8000 /* frame reception complete */
  281. #define RFD_C_FLEX 0x0008 /* flexible mode */
  282. #define RFD_C_HEADER 0x0010 /* frame is a header */
  283. #define RFD_C_SUSP 0x4000 /* suspend RU after receiving frame */
  284. #define RFD_C_EL 0x8000 /* end of RFD list */
  285. #define RFD_CNT_F 0x4000 /* actual count updated */
  286. #define RFD_CNT_EOF 0x8000 /* end of frame */
  287. /* EEPROM bit definitions */
  288. #define FEI_EESK 0x01 /* EEPROM shift clock */
  289. #define FEI_EECS 0x02 /* EEPROM chip select */
  290. #define FEI_EEDI 0x04 /* EEPROM data in */
  291. #define FEI_EEDO 0x08 /* EEPROM data out */
  292. /* Following defines should be in another header file */
  293. /* MDI definitions */
  294. #define MDI_READ   0x2
  295. #define MDI_WRITE  0x1
  296. #define MDI_CTRL_REG   0x0
  297. #define MDI_STATUS_REG 0x1
  298. /* MDI control register bit  */
  299. #define MDI_CR_COLL_TEST            0x80
  300. #define MDI_CR_FDX                  0x100       /* FDX =1, half duplex =0 */
  301. #define MDI_CR_RESTART              0x200       /* restart auto negotiation */
  302. #define MDI_CR_ISOLATE              0x400       /* isolate PHY from MII */
  303. #define MDI_CR_POWER_DOWN           0x800       /* power down */
  304. #define MDI_CR_SELECT               0x1000      /* auto speed select  */
  305. #define MDI_CR_100                  0x2000      /* 0 = 10mb, 1 = 100mb */
  306. #define MDI_CR_LOOPBACK             0x4000      /* 0 = normal, 1 = loopback */
  307. #define MDI_CR_RESET                0x8000      /* 0 = normal, 1 = PHY reset */
  308. /* MDI Status register bit definitions */
  309. #define MDI_SR_LINK_STATUS          0x4       /* link Status -- 1 = link */
  310. #define MDI_SR_AUTO_SELECT          0x8       /* auto speed select capable */
  311. #define MDI_SR_REMOTE_FAULT         0x10      /* Remote fault detect */
  312. #define MDI_SR_AUTO_NEG             0x20      /* auto negotiation complete */
  313. #define MDI_SR_10T_HALF_DPX         0x800     /* 10BaseT half duplex capable */
  314. #define MDI_SR_10T_FULL_DPX         0x1000    /* 10BaseT full duplex capable */
  315. #define MDI_SR_TX_HALF_DPX          0x2000    /* TX half duplex capable */
  316. #define MDI_SR_TX_FULL_DPX          0x4000     /* TX full duplex capable */
  317. #define MDI_SR_T4                   0x8000    /* T4 capable */
  318. #define PHY_100MBS      1
  319. #define PHY_10MBS       0
  320. #define PHY_AUTO_SPEED  2
  321. #define PHY_FULL_DPX    1
  322. #define PHY_HALF_DPX    0
  323. #define PHY_AUTO_DPX    2
  324. #define PHY_LINK_ERROR  0x10
  325. #define PHY_AUTO_FAIL   0x20
  326. /* PRO/100B definitions */
  327. #define EP100B_PCI_VENDOR_ID    0x8086          /* Intel vendor ID */
  328. #define EP100B_PCI_DEVICE_ID    0x1229          /* PRO/100B device ID */
  329. #if ((CPU_FAMILY==I960) && (defined __GNUC__))
  330. #pragma align 0                 /* turn off alignment requirement */
  331. #endif /* CPU_FAMILY==I960 */
  332. #ifdef __cplusplus
  333. }
  334. #endif
  335. #endif /* __INCif_feih */