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

VxWorks

开发平台:

C/C++

  1. /* sh7615End.h - Ethernet driver header */
  2.  
  3. /* Copyright 1984-2000 Wind River Systems, Inc. */
  4.  
  5. /*
  6. modification history
  7. --------------------
  8. 01j,28mar02,h_k  added lastError in SH7615END_DRV_CTRL (SPR #74021).
  9. 01i,02nov00,frf  changed macros definitions for PHY registers.
  10. 01h,26sep00,rsh  remove some macros related to allowing bsp to provide shared
  11.                  memory
  12. 01g,25sep00,rsh  add macro defs for reading and writing registers a'la
  13.                  motFecEnd
  14. 01f,25sep00,rsh  add some additional macros that make code more readable
  15. 01e,22sep00,rsh  continue development
  16. 01d,14sep00,rsh  continue development
  17. 01c,18aug00,rsh  continue developement
  18. 01b,16aug00,rsh  continue development
  19. 01a,14aug00,rsh   written 
  20. */
  21.  
  22. #ifndef __INCsh7615Endh
  23. #define __INCsh7615Endh
  24.  
  25. #ifdef __cplusplus
  26. extern "C" {
  27. #endif
  28.  
  29. /* driver flags */
  30. /* Ethernet Controller register offsets */
  31. #define ETHERC_ECMR 0xFFFFFD60 /* R/W: EtherC mode register */
  32. #define ETHERC_ECSR 0xFFFFFD64 /* R/W: EtherC status register */
  33. #define ETHERC_ECSIPR 0xFFFFFD68 /* R/W: EtherC status int permission */
  34. #define ETHERC_PIR 0xFFFFFD6C /* R/W: PHY Interface register */
  35. #define ETHERC_MAHR 0xFFFFFD70 /* R/W: MAC Address High register */
  36. #define ETHERC_MALR 0xFFFFFD74 /* R/W: MAC Address Low register */
  37. #define ETHERC_RFLR 0xFFFFFD78 /* R/W: Receive frame length register */
  38. #define ETHERC_PSR 0xFFFFFD7C /* R:   PHY status register */
  39. #define ETHERC_TROCR 0xFFFFFD80 /* R/W: Tx retry over counter register */
  40. #define ETHERC_CDCR 0xFFFFFD84 /* R/W: Collision detect counter register */
  41. #define ETHERC_LCCR 0xFFFFFD88 /* R/W: Lost Carrier counter register */
  42. #define ETHERC_CNDCR 0xFFFFFD8C /* R/W: Carrier not detect counter */
  43. #define ETHERC_IFLCR 0xFFFFFD90 /* R/W: Illegal frame length counter */
  44. #define ETHERC_CEFCR 0xFFFFFD94 /* R/W: CRC error frame recv counter */
  45. #define ETHERC_FRECR 0xFFFFFD98 /* R/W: Frame receive error counter */
  46. #define ETHERC_TSFRCR 0xFFFFFD9C /* R/W: Too-short Frame recv counter */
  47. #define ETHERC_TLFRCR 0xFFFFFDA0 /* R/W: Too-long Frame recv counter */
  48. #define ETHERC_RFCR 0xFFFFFDA4 /* R/W: Residual bit frame counter */
  49. #define ETHERC_MAFCR 0xFFFFFDA8 /* R/W: Multicast addr frame counter */
  50. /* E-DMAC registers */
  51. #define E_DMAC_EDMR 0xFFFFFD00 /* R/W: E-DMAC mode register */
  52. #define E_DMAC_EDTRR 0xFFFFFD04 /* R/W: E-DMAC tran request register */
  53. #define E_DMAC_EDRRR 0xFFFFFD08 /* R/W: E-DMAC recv request register */
  54. #define E_DMAC_TDLAR 0xFFFFFD0C /* R/W: Tx desc list addr register */
  55. #define E_DMAC_RDLAR 0xFFFFFD10 /* R/W: Rx desc list addr register */
  56. #define E_DMAC_EESR 0xFFFFFD14 /* R/W: EtherC/E-DMAC status register */
  57. #define E_DMAC_EESIPR 0xFFFFFD18 /* R/W: EtherC/E-DMAC status interrupt
  58.                                                                    permission register */
  59. #define E_DMAC_TRSCER 0xFFFFFD1C /* R/W: Tx/Rx status copy enable */  
  60. #define E_DMAC_RMFCR 0xFFFFFD20 /* R/W: Recevied missed-frame counter */  
  61. #define E_DMAC_TFTR 0xFFFFFD24 /* R/W: Tx FIFO threshold register */  
  62. #define E_DMAC_FDR 0xFFFFFD28 /* R/W: FIFO depth register */  
  63. #define E_DMAC_RCR 0xFFFFFD2C /* R/W: Receiver control register */  
  64. #define E_DMAC_EDOCR 0xFFFFFD30 /* R/W: E-DMAC operation control */  
  65. /* Ethernet Controller register bit definitions */
  66. /*
  67.  * EtherC mode Register bits
  68.  */
  69. #define ECMR_PRCEF 0x00001000  /* Permit Receive CRC Error Frame */
  70. #define ECMR_MPDE 0x00000200 /* Magic Packet Detection enable */
  71. #define ECMR_RE 0x00000040 /* Receiver Enable */
  72. #define ECMR_TE 0x00000020 /* Transmitter Enable */
  73. #define ECMR_ILB 0x00000008 /* Internal loop back mode */
  74. #define ECMR_ELB 0x00000004 /* External loop back mode */
  75. #define ECMR_DM 0x00000002 /* Duplex Mode */
  76. #define ECMR_PRM 0x00000001 /* Promiscuous Mode */
  77. /*
  78.  * EtherC Status Register
  79.  */
  80. #define ECSR_LCHNG 0x00000004 /* LINK signal changed */
  81. #define ECSR_MPR 0x00000002 /* Magic Packet received */
  82. #define ECSR_ICD 0x00000001 /* Illegal Carrier detection */
  83. #define ECSR_CLEAR 0x00000007      /* clear all sources */
  84. /* 
  85.  * EtherC Status Interrupt Permission Register
  86.  */
  87. #define ECSIPR_LCHNGIP 0x00000004 /* LINK signal change int enable */
  88. #define ECSIPR_MPRIP 0x00000002 /* Magic Packet received int enable */
  89. #define ECSIPR_ICDIP 0x00000001 /* Illegal Carrier detection int enalbe */
  90. #define ECSIPR_CLEAR    0x00000000 /* Disable all sources */
  91. /* 
  92.  * PHY Interface Register
  93.  */
  94. #define PIR_MDI 0x00000008 /* MII Management Data-In */
  95. #define PIR_MDO 0x00000004 /* MII Management Data-Out */
  96. #define PIR_MMD 0x00000002 /* MII Management Data Mode */
  97. #define PIR_MDC 0x00000001 /* MII Management Data Clock */
  98. /*
  99.  * Receive Frame Length Register
  100.  */
  101. #define RFLR_1518 0x000005ee /* 1518 bytes */
  102. #define RFLR_1519 0x000005ef /* 1519 bytes */
  103. #define RFLR_1520 0x000005f0 /* 1520 bytes */
  104. #define RFLR_2047 0x000007ff /* 2047 bytes */
  105. #define RFLR_2048 0x00000800 /* 2048 bytes */
  106. /*
  107.  * PHY Interface Status Register
  108.  */
  109. #define PSR_LMON 0x00000001 /* Link Monitor */
  110. /*
  111.  * counter register clear macros
  112.  */
  113. #define TXROC_CLEAR 0x0000FFFF /* clear counter */
  114. #define CDCR_CLEAR 0x0000FFFF /* clear counter */
  115. #define LCCR_CLEAR 0x0000FFFF /* clear counter */
  116. #define CNDCR_CLEAR 0x0000FFFF /* clear counter */
  117. #define IFLCR_CLEAR 0x0000FFFF /* clear counter */
  118. #define CEFCR_CLEAR 0x0000FFFF /* clear counter */
  119. #define FRECR_CLEAR 0x0000FFFF /* clear counter */
  120. #define TSFRCR_CLEAR 0x0000FFFF /* clear counter */
  121. #define TLFRCR_CLEAR 0x0000FFFF /* clear counter */
  122. #define RFCR_CLEAR 0x0000FFFF /* clear counter */
  123. #define MAFCR_CLEAR 0x0000FFFF /* clear counter */
  124. /* E-DMAC register bit definitions */
  125. /*
  126.  * E-DMAC Mode Register 
  127.  */
  128. #define EDMR_DL1 0x00000020 /* Descriptor length */
  129. #define EDMR_DL0 0x00000010 /* Descriptor length */
  130. #define EDMR_SWR 0x00000001 /* Software reset */
  131. /* 
  132.  * E-DMAC Transmit request register 
  133.  */
  134. #define EDTRR_TR 0x00000001 /* Transmit request */
  135. /* 
  136.  * E-DMAC Receive request register 
  137.  */
  138. #define EDRRR_RR 0x00000001 /* Receive request */
  139. /* 
  140.  * EtherC/E-DMAC status register
  141.  */
  142. #define EESR_RFCOF 0x01000000 /* Receive frame counter overflow */ 
  143. #define EESR_ECI 0x00400000 /* EtherC status regsiter interrupt */ 
  144. #define EESR_TC 0x00200000 /* Tx Complete */ 
  145. #define EESR_TDE 0x00100000  /* Tx Descriptor Exhausted */
  146. #define EESR_TFUF 0x00080000 /* Tx FIFO Underflow */ 
  147. #define EESR_FR 0x00040000 /* Frame Received */ 
  148. #define EESR_RDE 0x00020000 /* Rx Descriptor Exhausted */ 
  149. #define EESR_RFOF 0x00010000 /* Rx FIFO Overflow */ 
  150. #define EESR_ITF 0x00001000 /* Illegal Tx Frame */ 
  151. #define EESR_CND 0x00000800 /* Carrier not detected */ 
  152. #define EESR_DLC 0x00000400 /* Detect loss of carrier */ 
  153. #define EESR_CD 0x00000200 /* Collision Detect */ 
  154. #define EESR_TRO 0x00000100 /* Tx Retry Over */ 
  155. #define EESR_RMAF 0x00000080 /* Receive Multicast Address frame */ 
  156. #define EESR_RRF 0x00000010 /* Receive residual-bit frame */ 
  157. #define EESR_RTLF 0x00000008 /* Receive Too-long frame */ 
  158. #define EESR_RTSF 0x00000004 /* Receive Too-short frame */ 
  159. #define EESR_PRE 0x00000002 /* PHY-LSI Receive Error */ 
  160. #define EESR_CERF 0x00000001 /* CRC Error on Received frame */ 
  161. #define EESR_VALID_INT_MSK 0x017f1f9f   /* all possible interrupt sources */
  162. #define EESR_CLEAR         0x017f1f9f   /* all possible interrupt sources */
  163. /* 
  164.  * EtherC/E-DMAC status Interrupt Permission register
  165.  */
  166. #define EESIPR_RFCOFIP 0x01000000 /* Receive frame counter overflow */ 
  167. #define EESIPR_ECIIP 0x00400000 /* EtherC status regsiter interrupt */ 
  168. #define EESIPR_TCIP 0x00200000 /* Tx Complete */ 
  169. #define EESIPR_TDEIP 0x00100000  /* Tx Descriptor Exhausted */
  170. #define EESIPR_TFUFIP 0x00080000 /* Tx FIFO Underflow */ 
  171. #define EESIPR_FRIP 0x00040000 /* Frame Received */ 
  172. #define EESIPR_RDEIP 0x00020000 /* Rx Descriptor Exhausted */ 
  173. #define EESIPR_RFOFIP 0x00010000 /* Rx FIFO Overflow */ 
  174. #define EESIPR_ITFIP 0x00001000 /* Illegal Tx Frame */ 
  175. #define EESIPR_CNDIP 0x00000800 /* Carrier not detected */ 
  176. #define EESIPR_DLCIP 0x00000400 /* Detect loss of carrier */ 
  177. #define EESIPR_CDIP 0x00000200 /* Collision Detect */ 
  178. #define EESIPR_TROIP 0x00000100 /* Tx Retry Over */ 
  179. #define EESIPR_RMAFIP 0x00000080 /* Receive Multicast Address frame */ 
  180. #define EESIPR_RRFIP 0x00000010 /* Receive residual-bit frame */ 
  181. #define EESIPR_RTLFIP 0x00000008 /* Receive Too-long frame */ 
  182. #define EESIPR_RTSFIP 0x00000004 /* Receive Too-short frame */ 
  183. #define EESIPR_PREIP 0x00000002 /* PHY-LSI Receive Error */ 
  184. #define EESIPR_CERFIP 0x00000001 /* CRC Error on Received frame */ 
  185. /*
  186.  * Tx/Rx status copy enable register 
  187.  */
  188. #define TRSCER_ITFCE 0x00001000 /* Illegal Tx Frame */
  189. #define TRSCER_CNDCE 0x00000800 /* Carrier not detected */
  190. #define TRSCER_DLCCE 0x00000400 /* Detect loss of carrier */
  191. #define TRSCER_CDCE 0x00000200 /* Collision Detect */
  192. #define TRSCER_TROCE 0x00000100 /* Tx Retry Over */
  193. #define TRSCER_RMAFCE 0x00000080 /* Receive Multicast Address frame */
  194. #define TRSCER_RRFCE 0x00000010 /* Receive residual-bit frame */
  195. #define TRSCER_RTLFCE 0x00000008 /* Receive Too-long frame */
  196. #define TRSCER_RTSFCE 0x00000004 /* Receive Too-short frame */
  197. #define TRSCER_PRECE 0x00000002 /* PHY-LSI Receive Error */
  198. #define TRSCER_CERFCE 0x00000001 /* CRC Error on Received frame */
  199. /*
  200.  * FIFO Depth Register
  201.  */
  202. /*  */
  203. /*
  204.  * Receiver Control Register
  205.  */
  206. #define RCR_RNC 0x00000001 /* Receive Enable Control */
  207. /*
  208.  * E-DMAC Operation Control Register
  209.  */
  210. #define EDOCR_FEC 0x00000004 /* FIFO Error control */
  211. #define EDOCR_AEC 0x00000002 /* Address Error Control*/
  212. #define EDOCR_EDH 0x00000001 /* E-DMAC Halted */
  213. /* Transmit descriptor bit definitions */
  214. #define TD0_TACT 0x80000000 /* Tx Descriptor Active */
  215. #define TD0_OWN TD0_TACT        /* the chip owns the descriptor */
  216. #define TD0_TDL 0x40000000 /* Tx Descriptor Last */
  217. #define TD0_TFP1 0x20000000 /* Tx Frame Position */
  218. #define TD0_TFP0 0x10000000 /* Tx FRame Position */
  219. #define TD0_TFP    0x30000000      /* buffer contains entire frame */
  220. #define TD0_TFE 0x08000000 /* Tx Frame Error */
  221. #define TD0_TFS4 0x00000010 /* Tx Illegal Frame */
  222. #define TD0_IF TD0_TFS4
  223. #define TD0_TFS3 0x00000008 /* Tx Carrier Not Detect */
  224. #define TD0_CND TD0_TFS3
  225. #define TD0_TFS2 0x00000004 /* Tx Detect Loss Carrier */
  226. #define TD0_DLC TD0_TFS2
  227. #define TD0_TFS1 0x00000002 /* Tx Collision Detect */
  228. #define TD0_CD TD0_TFS1
  229. #define TD0_TFS0 0x00000001 /* Tx Retry Over */
  230. #define TD0_TRO TD0_TFS0
  231. #define TD0_CLEAR_ERRORS_N_STATS 0xf0000000
  232. #define SH7615END_TBS_PUT(x)      ((x) << 16) 
  233. /* Receive descriptor bit definitions */
  234. #define RD0_RACT 0x80000000 /* Rx Descriptor Active */
  235. #define RD0_OWN RD0_RACT        /* the chip owns the descriptor */
  236. #define RD0_RDL 0x40000000 /* Rx Descriptor Last */
  237. #define RD0_RFP1 0x20000000 /* Rx Frame Position */
  238. #define RD0_RFP0 0x10000000 /* Rx FRame Position */
  239. #define RD0_RFE 0x08000000 /* Rx Frame Error */
  240. #define RD0_RFS9 0x00000200 /* Rx FIFO Overflow */
  241. #define RD0_RFS7 0x00000080 /* Rx Multicast Addr Frame */
  242. #define RD0_RFS4 0x00000010 /* Rx Residual-Bit FRame */
  243. #define RD0_RFS3 0x00000008 /* Rx Too-Long Frame */
  244. #define RD0_RFS2 0x00000004 /* Rx Too-Short Frame */
  245. #define RD0_RFS1 0x00000002 /* Rx PHY-LSI Recv Error */
  246. #define RD0_RFS0 0x00000001 /* Rx CRC Error on Received */
  247. #define SH7615END_FRAME_LEN_MSK       0x0000FFFF      /* Frame length mask */
  248. #define SH7615END_FRAME_LEN_GET(x)    ((x) & SH7615END_FRAME_LEN_MSK)
  249. /* DP83843BVJE PHY Chip */
  250. #define PHY_ADDR 0x01
  251. /* DP83843BVJE Phyter MII offset registers */
  252. #define BMCR            0x00 /* Basic Mode Control Register */
  253. #define BMSR 0x01 /* Basic Mode status Register */
  254. #define PHYIDR1 0x02 /* PHY Identifier register #1 */
  255. #define PHYIDR2 0x03 /* PHY Identifier register #2 */
  256. #define ANAR            0x04 /* Auto-Negotiation Advertisement
  257.    Register */
  258. #define ANLPAR          0x05 /* Auto-Negotiation Link Partner
  259.    Ability Register */
  260. #define ANER            0x06 /* Auto-Negotiation Expansion
  261.    Register */
  262. #define ANNPTR          0x07 /* Auto-Negotiation Next Page TX */
  263. /*                      0x08-0x0f  Reserved */
  264. #define PHYSTS 0x10 /* PHY Status Register */
  265. #define MIPSCR          0x11 /* MII Interrupt PHY Specific Control
  266.    Register */
  267. #define MIPGSR 0x12 /* MII Interrupt PHY Generic Status
  268.    Register */
  269. #define DCR             0x13 /* Disconnect Count Register */
  270. #define FCSCR           0x14  /* False Carrier Sense Counter
  271.    Register */
  272. #define RECR            0x15 /* Receive Error Counter Register */
  273. #define PCSR            0x16 /* PCS Sub-Layer Configuration and
  274.    Status Register */
  275. #define LBR             0x17  /* Loopback and Bypass Register */
  276. #define BTSCR           0x18 /* 10Base-T Status & Control Register */
  277. #define PHYCTRL         0x19 /* PHY Control Register */
  278. /* 0x1A-0x1F  Reserved */
  279. /* DP83843BVJE Phyter MII register data */
  280. #define D_RESET 0x8000
  281. #define D_BMCR          0x0000  
  282. #define D_ANAR          0x01e1  
  283. #define D_ANLPAR        0x0021  
  284. #define D_ANER          0x0004 
  285. #define D_ANNPTR        0x2001
  286. #define D_MIPSCR        0x0000
  287. #define D_DCR           0x0000
  288. #define D_FCSCR         0x0000
  289. #define D_RECR          0x0000
  290. #define D_PCSR          0x0000
  291. #define D_LBR           0x0000
  292. #define D_10BTSCR       0x0000
  293. #define D_PHYCTRL       0x0801
  294. /*
  295.  * Receive Message Descriptor Entry.
  296.  * Four words per entry.  Number of entries must be a power of two.
  297.  */
  298. typedef struct rDesc
  299.     {
  300.     UINT32       rDesc0;         /* status */
  301.     UINT32       rDesc1;         /* buffer & data count */
  302.     UINT32       rDesc2;         /* buffer address 1 */
  303.     UINT32       rDesc3;         /* Pad */
  304.     } SH7615_RD;
  305.  
  306. /*
  307.  * Transmit Message Descriptor Entry.
  308.  * Four words per entry.  Number of entries must be a power of two.
  309.  */
  310. typedef struct tDesc
  311.     {
  312.     UINT32       tDesc0;         /* status */
  313.     UINT32       tDesc1;         /* data count */
  314.     UINT32       tDesc2;         /* buffer address 1 */
  315.     UINT32       tDesc3;         /* Pad */
  316.     } SH7615_TD;
  317. typedef struct free_buf
  318.     {
  319.     void *      pClBuf;                  /* pointer cluster buffer */
  320.     } FREE_BUF;
  321.  
  322. /* typedefs */
  323.  
  324. typedef struct sh7615EndDrvCtrl
  325.     {
  326.     END_OBJ     end;                    /* The class we inherit from. */
  327.     END_ERR lastError; /* Last error passed to muxError */
  328.     long        flags;                  /* Our local flags. */
  329.     ULONG       userFlags;              /* some user flags */
  330.     int         unit;                   /* unit number */
  331.  
  332.     int         numRds;                 /* RD ring size */
  333.     int         rxIndex;               /* current RMD index */
  334.     SH7615_RD*  rxRing;                 /* RMD ring start */
  335.  
  336.     int         numTds;                 /* TD ring size */
  337.     int         txIndex;               /* current TMD index */
  338.     int         txDiIndex;              /* current TMD index */
  339.     SH7615_TD*  txRing;                 /* TMD ring start */
  340.  
  341.     int         ivec;                   /* interrupt vector */
  342.     int         ilevel;                 /* interrupt level */
  343.     UINT32      intrMask;               /* interrupt mask */
  344.     char*       pShMem;                 /* real ptr to shared memory */
  345.     char*       memBase;                /* LANCE memory pool base */
  346.     int         memSize;                /* LANCE memory pool size */
  347.  
  348.     BOOL        loaded;                 /* interface has been loaded */
  349.     char *      pClBlkArea;             /* cluster block pointer */
  350.     UINT32      clBlkSize;              /* clusters block memory size */
  351.     char *      pMBlkArea;              /* mBlock area pointer */
  352.     UINT32      mBlkSize;               /* mBlocks area memory size */
  353.     UCHAR       enetAddr[6];            /* ethernet address */
  354.     CL_POOL_ID  pClPoolId;              /* cluster pool */
  355.     BOOL        rxHandling;             /* rcv task is scheduled */
  356.     BOOL        txCleaning;
  357.     BOOL        txBlocked;              /* variable for blocking */
  358. /* REVISIT - shouldn't this be the same array size as number of possible buffers? */
  359.     FREE_BUF    freeBuf[128];
  360. /*    PHY_INFO    *phyInfo;  */             /* info on a MII-compliant PHY */
  361.     } SH7615END_DRV_CTRL;
  362.  
  363. /* rx/tx buffer descriptors definitions */
  364. #define SH7615END_RBD_SZ          16      /* RBD size in byte */
  365. #define SH7615END_TBD_SZ          16      /* TBD size in byte */
  366. #define SH7615END_TBD_MIN         6       /* min number of TBDs */
  367. #define SH7615END_RBD_MIN         4       /* min number of RBDs */
  368. #define SH7615END_TBD_POLL_NUM    1       /* one TBD for poll operation */
  369. #define CL_OVERHEAD               4       /* prepended cluster overhead */
  370. #define CL_ALIGNMENT              4       /* cluster required alignment */
  371. #define MBLK_ALIGNMENT            4       /* mBlks required alignment */
  372. #define SH7615END_BD_ALIGN        0x10    /* required alignment for RBDs */
  373. #define SH7615END_MAX_PCK_SZ      (ETHERMTU + SIZEOF_ETHERHEADER          
  374.                                  + ETHER_CRC_LEN)
  375. #define SH7615END_RBD_DEF_NUM  48      /* default number of Recv descriptors */
  376. #define SH7615END_TBD_DEF_NUM  64      /* default number of Xmit descriptors */
  377. #define NUM_LOAN        16      /* number of loaner buffers */
  378. #ifdef __cplusplus
  379. }
  380. #endif
  381.  
  382. #endif /* __INCsh7615Endh */