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

VxWorks

开发平台:

C/C++

  1. /* motFccEnd.h - Motorola FCC Ethernet network interface header */
  2. /* Copyright 1990-2002 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01f,14dec01,rcs  extended DRV_CTRL and added TODO_NODE and TX_JOB_NODE 
  7.                  for motFccJobQueue() support.
  8. 01e,26nov01,rcs  converted to motFccEnd.h
  9. 01d,17sep01,g_h  fix SPR 70254
  10. 01c,15jul99,ms_  make compliant with our coding standards
  11. 01b,17apr99,ms_  get m8260Cpm.h locally
  12. 01a,09apr99,cn  written from motFecEnd.h, 01c.
  13. */
  14. #ifndef __INCsbcMotFccEndh
  15. #define __INCsbcMotFccEndh
  16. /* includes */
  17. #ifdef __cplusplus
  18. extern "C" {
  19. #endif
  20.  
  21. #include "etherLib.h"
  22. #include "miiLib.h"
  23. #include "m8260Fcc.h"
  24. #include "lstLib.h"
  25. #include "msgQLib.h"
  26. /* defines */
  27. #ifndef M8260ABBREVIATIONS
  28. #define M8260ABBREVIATIONS
  29. #ifdef  _ASMLANGUAGE
  30. #define CAST(x)
  31. #else /* _ASMLANGUAGE */
  32. typedef volatile UCHAR VCHAR;    /* shorthand for volatile UCHAR */
  33. typedef volatile INT32 VINT32;   /* volatile unsigned word */
  34. typedef volatile INT16 VINT16;   /* volatile unsigned halfword */
  35. typedef volatile INT8 VINT8;     /* volatile unsigned byte */
  36. typedef volatile UINT32 VUINT32; /* volatile unsigned word */
  37. typedef volatile UINT16 VUINT16; /* volatile unsigned halfword */
  38. typedef volatile UINT8 VUINT8;   /* volatile unsigned byte */
  39. #define CAST(x) (x)
  40. #endif  /* _ASMLANGUAGE */
  41. #endif /* M8260ABBREVIATIONS */
  42. /*
  43.  * redefine the macro below in the bsp if you need to access the device
  44.  * registers/descriptors in a more suitable way.
  45.  */
  46. #ifndef MOT_FCC_LONG_WR
  47. #define MOT_FCC_LONG_WR(addr, value)                                        
  48.     (* (addr) = ((UINT32) (value)))
  49. #endif /* MOT_FCC_LONG_WR */
  50.  
  51. #ifndef MOT_FCC_WORD_WR
  52. #define MOT_FCC_WORD_WR(addr, value)                                        
  53.     (* (addr) = ((UINT16) (value)))
  54. #endif /* MOT_FCC_WORD_WR */
  55.  
  56. #ifndef MOT_FCC_BYTE_WR
  57. #define MOT_FCC_BYTE_WR(addr, value)                                        
  58.     (* (addr) = ((UINT8) (value)))
  59. #endif /* MOT_FCC_BYTE_WR */
  60.  
  61. #ifndef MOT_FCC_LONG_RD
  62. #define MOT_FCC_LONG_RD(addr, value)                                        
  63.     ((value) = (* (UINT32 *) (addr)))
  64. #endif /* MOT_FCC_LONG_RD */
  65.  
  66. #ifndef MOT_FCC_WORD_RD
  67. #define MOT_FCC_WORD_RD(addr, value)                                        
  68.     ((value) = (* (UINT16 *) (addr)))
  69. #endif /* MOT_FCC_WORD_RD */
  70.  
  71. #ifndef MOT_FCC_BYTE_RD
  72. #define MOT_FCC_BYTE_RD(addr, value)                                        
  73.     ((value) = (* (UINT8 *) (addr)))
  74. #endif /* MOT_FCC_BYTE_RD */
  75.  
  76. /*
  77.  * Default macro definitions for BSP interface.
  78.  * These macros can be redefined in a wrapper file, to generate
  79.  * a new module with an optimized interface.
  80.  */
  81.  
  82. #define MOT_FCC_INUM(pDrvCtrl)
  83.     ((int) INUM_FCC1 + ((pDrvCtrl)->fccNum - 1))
  84. #define MOT_FCC_IVEC(pDrvCtrl)
  85.     INUM_TO_IVEC (MOT_FCC_INUM (pDrvCtrl))
  86. #ifndef SYS_FCC_INT_CONNECT
  87. #define SYS_FCC_INT_CONNECT(pDrvCtrl, pFunc, arg, ret)                  
  88. {                                                                       
  89. IMPORT STATUS intConnect (VOIDFUNCPTR *, VOIDFUNCPTR, int);
  90. ret = OK;                                                               
  91.                                                                         
  92.     pDrvCtrl->intrConnect = TRUE;                                   
  93.     ret = (intConnect) ((VOIDFUNCPTR*) MOT_FCC_IVEC (pDrvCtrl),
  94. (pFunc), (int) (arg));                      
  95. }
  96. #endif /* SYS_FCC_INT_CONNECT */
  97.  
  98. #ifndef SYS_FCC_INT_DISCONNECT
  99. #define SYS_FCC_INT_DISCONNECT(pDrvCtrl, pFunc, arg, ret)                   
  100. {                                                                           
  101. ret = OK;                                                                   
  102.                                                                             
  103. if (MOT_FCC_IVEC (pDrvCtrl) && (_func_motFccIntDisc != NULL))               
  104.     {                                                                       
  105.     pDrvCtrl->intrConnect = FALSE;                                          
  106.     ret = (*_func_motFccIntDisc) ((VOIDFUNCPTR*) MOT_FCC_IVEC (pDrvCtrl),   
  107.     (pFunc));                                       
  108.     }                                                                       
  109. }
  110. #endif /* SYS_FCC_INT_DISCONNECT */
  111.  
  112. #ifndef SYS_FCC_INT_ENABLE
  113. #define SYS_FCC_INT_ENABLE(pDrvCtrl, ret)
  114. {                                                                       
  115. IMPORT int intEnable (int);
  116. ret = OK;                                                               
  117.                                                                         
  118. if (MOT_FCC_INUM (pDrvCtrl))                                            
  119.     ret = intEnable ((int) (MOT_FCC_INUM (pDrvCtrl)));                  
  120. }
  121. #endif /* SYS_FCC_INT_ENABLE */
  122.  
  123. #ifndef SYS_FCC_INT_DISABLE
  124. #define SYS_FCC_INT_DISABLE(pDrvCtrl, ret)
  125. {                                                                       
  126. IMPORT int intDisable (int);
  127. ret = OK;                                                               
  128.                                                                         
  129. if (MOT_FCC_INUM (pDrvCtrl))                                            
  130.     ret = intDisable ((int) (MOT_FCC_INUM (pDrvCtrl)));                  
  131. }
  132. #endif /* SYS_FCC_INT_DISABLE */
  133.  
  134. #ifndef SYS_FCC_INT_ACK
  135. #define SYS_FCC_INT_ACK(pDrvCtrl, ret)
  136. {                                                                       
  137. ret = OK;                                                               
  138. }
  139. #endif /* SYS_FCC_INT_ACK */
  140. #define SYS_FCC_ENET_ADDR_GET(address)                                  
  141. if (sysFccEnetAddrGet != NULL)                                          
  142.     if (sysFccEnetAddrGet (pDrvCtrl->unit, (address)) == ERROR)
  143. {
  144. errnoSet (S_iosLib_INVALID_ETHERNET_ADDRESS);
  145. return (NULL);
  146. }
  147. #define SYS_FCC_ENET_ENABLE                                             
  148. if (sysFccEnetEnable != NULL)                                           
  149.     if (sysFccEnetEnable (pDrvCtrl->immrVal, pDrvCtrl->fccNum) 
  150. == ERROR)               
  151.         return (ERROR);
  152.  
  153. #define SYS_FCC_ENET_DISABLE                                            
  154. if (sysFccEnetDisable != NULL)                                          
  155.     if (sysFccEnetDisable (pDrvCtrl->immrVal, pDrvCtrl->fccNum) 
  156. == ERROR)              
  157.         return (ERROR); 
  158. #define SYS_FCC_MII_BIT_RD(bit)
  159. if (sysFccMiiBitRd != NULL)
  160.     if (sysFccMiiBitRd (pDrvCtrl->immrVal, pDrvCtrl->fccNum, (bit))
  161. == ERROR)              
  162.         return (ERROR);
  163. #define SYS_FCC_MII_BIT_WR(bit)
  164. if (sysFccMiiBitWr != NULL)
  165.     if (sysFccMiiBitWr (pDrvCtrl->immrVal, pDrvCtrl->fccNum, (bit))
  166. == ERROR)              
  167.         return (ERROR);
  168. #define MOT_FCC_MII_WR(data, len)
  169.     {
  170.     UINT8 i = len;
  171.     while (i--)
  172. SYS_FCC_MII_BIT_WR (((data) >> i) & 0x1);
  173.     }
  174. #define MOT_FCC_MII_RD(data, len)
  175.     {
  176.     UINT8 i = len;
  177.     UINT8 bitVal = 0;
  178.     while (i--)
  179. {
  180. (data) <<= 1;
  181. SYS_FCC_MII_BIT_RD (&bitVal);
  182. (data) |= bitVal & 0x1;
  183. }
  184.     }
  185. #define MOT_FCC_LOOP_NS 10
  186. #define MOT_FCC_DEV_NAME        "motfcc"
  187. #define MOT_FCC_DEV_NAME_LEN    7
  188. #define MOT_FCC_TBD_DEF_NUM     32 /* default number of TBDs */
  189. #define MOT_FCC_RBD_DEF_NUM     32 /* default number of RBDs */
  190. #define MOT_FCC_TX_CL_NUM     64 /* number of tx clusters */
  191. #define MOT_FCC_BD_LOAN_NUM     32 /* loaned BDs */
  192. #define MOT_FCC_TX_POLL_NUM      1        /* one TBD for poll operation */
  193. #define MOT_FCC_TBD_MAX         128      /* max number of TBDs */
  194. #define MOT_FCC_RBD_MAX         128      /* max number of TBDs */
  195. #define MOT_FCC_WAIT_MAX 0xf0000000 /* max delay after sending */
  196. #define MOT_FCC_MIN_TX_PKT_SZ 100 /* the smallest packet we send */
  197. #define MOT_FCC_ADDR_LEN        6               /* ethernet address length */
  198. #define MOT_FCC_RIPTR_VAL       0xb800          /* rx FIFO pointer value */
  199. #define MOT_FCC_TIPTR_VAL       0xba00          /* tx FIFO pointer value */
  200. #define MOT_FCC_RES_VAL        0x0000          /* reserved field value */
  201. #define MOT_FCC_FCR_DEF_VAL     M8260_FCR_BO_BE /* def value for the FCR */
  202. #define MOT_FCC_C_MASK_VAL      0xdebb20e3      /* recommended value */
  203. #define MOT_FCC_C_PRES_VAL      0xffffffff      /* recommended value */
  204. #define MOT_FCC_CLEAR_VAL       0x00000000      /* clear this field */
  205. #define MOT_FCC_RET_LIM_VAL     0xf       /* recommended value */
  206. #define MOT_FCC_MINFLR_VAL      0x40       /* recommended value */
  207. #define MOT_FCC_PAD_VAL        MOT_FCC_TIPTR_VAL /* padding value */
  208. #define MOT_FCC_MAXD_VAL      1520       /* recommended value */
  209. #define MOT_FCC_DSR_VAL        0xD555          /* recommended value */
  210. #define MOT_FCC_FCCE_VAL        0xffff          /* clear all events */
  211. /* rx/tx buffer descriptors definitions */
  212.  
  213. #define MOT_FCC_RBD_SZ          8       /* RBD size in byte */
  214. #define MOT_FCC_TBD_SZ          8       /* TBD size in byte */
  215. #define MOT_FCC_TBD_MIN        16       /* min number of TBDs */
  216. #define MOT_FCC_RBD_MIN        16       /* min number of RBDs */
  217. #define CL_OVERHEAD             4       /* prepended cluster overhead */
  218. #define CL_ALIGNMENT            4       /* cluster required alignment */
  219. #define MBLK_ALIGNMENT          4       /* mBlks required alignment */
  220. #define MOT_FCC_BD_ALIGN        0x8     /* required alignment for BDs */
  221. #define MOT_FCC_BUF_ALIGN       0x20    /* required alignment for data buffer */
  222. #define MOT_FCC_RBD_ERR         (M8260_FETH_RBD_LG  |                      
  223.                                  M8260_FETH_RBD_NO  |                      
  224.                                  M8260_FETH_RBD_SH  |                      
  225.                                  M8260_FETH_RBD_CR  |                      
  226.                                  M8260_FETH_RBD_CL  |                      
  227.                                  M8260_FETH_RBD_OV)
  228.  
  229. /* allowed PHY's speeds */
  230. #define MOT_FCC_100MBS 100000000       /* bits per sec */
  231. #define MOT_FCC_10MBS 10000000        /* bits per sec */
  232. /*
  233.  * user flags: full duplex mode, loopback mode, serial interface etc.
  234.  * the user may configure some of this options according to his needs 
  235.  * by setting the related bits in the <userFlags> field of the load string.
  236.  */
  237.  
  238. #define MOT_FCC_USR_PHY_NO_AN 0x00000001 /* do not auto-negotiate */
  239. #define MOT_FCC_USR_PHY_TBL     0x00000002 /* use negotiation table */
  240. #define MOT_FCC_USR_PHY_NO_FD 0x00000004 /* do not use full duplex */
  241. #define MOT_FCC_USR_PHY_NO_100 0x00000008 /* do not use 100Mbit speed */
  242. #define MOT_FCC_USR_PHY_NO_HD 0x00000010 /* do not use half duplex */
  243. #define MOT_FCC_USR_PHY_NO_10 0x00000020 /* do not use 10Mbit speed */
  244. #define MOT_FCC_USR_PHY_ISO     0x00000100 /* isolate a PHY */
  245. #define MOT_FCC_USR_RMON        0x00000200 /* enable RMON support */
  246. #define MOT_FCC_USR_LOOP        0x00000400 /* external loopback mode */ 
  247.                         /* only use it for testing */
  248. #define MOT_FCC_USR_HBC 0x00000800 /* perform heartbeat control */
  249. #define MOT_FCC_USR_BUF_LBUS 0x00001000 /* buffers are on local bus */
  250. #define MOT_FCC_USR_BD_LBUS 0x00002000 /* BDs are on local bus */
  251. #define MOT_FCC_USR_NO_ZCOPY 0x00004000 /* inhibit zcopy mode */ 
  252.                                                 /* required if bufs are on */
  253.                                                 /* local bus, optional */
  254.                                                 /* otherwise */
  255. #define MOT_FCC_USR_DPRAM_ALOC  0x00008000      /* Using DPAM auto allocation */
  256. #define MOT_FCC_TBD_OK 0x1 /* the TBD is a good one */
  257. #define MOT_FCC_TBD_BUSY 0x2 /* the TBD has not been used */
  258. #define MOT_FCC_TBD_ERROR 0x4 /* the TBD is errored */
  259. /* frame descriptors definitions */
  260.  
  261. typedef char * MOT_FCC_BD_ID; 
  262. typedef MOT_FCC_BD_ID    MOT_FCC_TBD_ID;
  263. typedef MOT_FCC_BD_ID    MOT_FCC_RBD_ID;
  264. /*
  265.  * this table may be customized by the user in configNet.h
  266.  */
  267.  
  268. IMPORT INT16 motFccPhyAnOrderTbl [];
  269. typedef struct {
  270.     UINT32 numIsrEntries;
  271.     UINT32 numIsrExits;
  272.     UINT32 numZcopySends;
  273.     UINT32 numNonZcopySends;
  274.     UINT32 numTXBInts;
  275.     UINT32 numrecoveryeasy;
  276.     UINT32 numRXFInts;
  277.     UINT32 numRXFHandlerEntries;
  278.     UINT32 numRXFHandlerExits;
  279.     UINT32 numRXFHandlerErrQuits;
  280.     UINT32 numRXFHandlerEmptyLoopBreaks;
  281.     UINT32 numRXFHandlerFramesProcessed;
  282.     UINT32 numRXFHandlerFramesRejected;
  283.     UINT32 numRXFramesLostToBufferReuse;
  284.     UINT32 numLSCHandlerEntries;
  285.     UINT32 numLSCHandlerExits;
  286.     UINT32 numStallsEntered;
  287.     UINT32 numStallsCleared;
  288.     UINT32 motFccTxErr;
  289.     UINT32 motFccHbFailErr;
  290.     UINT32 motFccTxLcErr;
  291.     UINT32 motFccTxUrErr;
  292.     UINT32 motFccTxCslErr;
  293.     UINT32 motFccTxRlErr;
  294.     UINT32 motFccRxBsyErr;
  295.     UINT32 motFccRxLgErr;
  296.     UINT32 motFccRxNoErr;
  297.     UINT32 motFccRxCrcErr;
  298.     UINT32 motFccRxOvErr;
  299.     UINT32 motFccRxShErr;
  300.     UINT32 motFccRxLcErr;
  301.     UINT32 motFccRxMemErr;
  302. }FCC_DRIVER_STATS;
  303. /*---------------------------------------------------------------------*/
  304. /*       F C C   E T H E R N E T   P A R A M E T E R S                 */
  305. /*---------------------------------------------------------------------*/
  306. typedef volatile unsigned long VULONG;
  307. typedef volatile unsigned short VUSHORT;
  308. typedef volatile unsigned char VUCHAR;
  309. #pragma pack(1)
  310. typedef struct {
  311.     VULONG    stat_bus;       /* Internal use buffer. */
  312.     VULONG    cam_ptr;        /* CAM address. */
  313.     VULONG    c_mask;         /* CRC constant mask*/
  314.     VULONG    c_pres;       /* CRC preset */
  315.     VULONG    crcec;          /* CRC error counter */
  316.     VULONG    alec;           /* alignment error counter */
  317.     VULONG    disfc;          /* discarded frame counter */
  318.     VUSHORT   ret_lim;        /* Retry limit threshold. */
  319.     VUSHORT   ret_cnt;        /* Retry limit counter. */
  320.     VUSHORT   p_per;          /* persistence */
  321.     VUSHORT   boff_cnt;       /* back-off counter */
  322.     VULONG    gaddr_h;        /* group address filter, high */
  323.     VULONG    gaddr_l;        /* group address filter, low */
  324.     VUSHORT   tfcstat;        /* out of sequece Tx BD staus. */
  325.     VUSHORT   tfclen;         /* out of sequece Tx BD length. */
  326.     VULONG    tfcptr;         /* out of sequece Tx BD data pointer. */
  327.     VUSHORT   maxflr;         /* maximum frame length reg */
  328.     VUSHORT   paddr_h;        /* physical address (MSB) */
  329.     VUSHORT   paddr_m;        /* physical address */
  330.     VUSHORT   paddr_l;        /* physical address (LSB) */
  331.     VUSHORT   ibd_cnt;        /* internal BD counter. */
  332.     VUSHORT   ibd_start;      /* internal BD start pointer. */
  333.     VUSHORT   ibd_end;        /* internal BD end pointer. */
  334.     VUSHORT   tx_len;         /* tx frame length counter */
  335.     VUCHAR    ibd_base[0x20]; /* internal micro code usage. */
  336.     VULONG    iaddr_h;        /* individual address filter, high */
  337.     VULONG    iaddr_l;        /* individual address filter, low */
  338.     VUSHORT   minflr;         /* minimum frame length reg */
  339.     VUSHORT   taddr_h;        /* temp address (MSB) */
  340.     VUSHORT   taddr_m;        /* temp address */
  341.     VUSHORT   taddr_l;        /* temp address (LSB) */
  342.     VUSHORT   pad_ptr;        /* pad_ptr. */
  343.     VUSHORT   cf_type;        /* flow control frame type coding. */
  344.     VUSHORT   cf_range;       /* flow control frame range. */
  345.     VUSHORT   max_b;          /* max buffer descriptor byte count. */
  346.     VUSHORT   maxd1;          /* max DMA1 length register. */
  347.     VUSHORT   maxd2;          /* max DMA2 length register. */
  348.     VUSHORT   maxd;           /* Rx max DMA. */
  349.     VUSHORT   dma_cnt;        /* Rx DMA counter. */
  350.     /* counter: */
  351.     VULONG    octc;           /* received octets counter. */
  352.     VULONG    colc;           /* estimated number of collisions */
  353.     VULONG    broc;           /* received good packets of broadcast address */
  354.     VULONG    mulc;           /* received good packets of multicast address */
  355.     VULONG    uspc;           /* received packets shorter then 64 octets. */
  356.     VULONG    frgc;           /* as uspc + bad packets */
  357.     VULONG    ospc;           /* received packets longer then 1518 octets. */
  358.     VULONG    jbrc;           /* as ospc + bad packets  */
  359.     VULONG    p64c;           /* received packets of 64 octets.. */
  360.     VULONG    p65c;           /* received packets of 65-128 octets.. */
  361.     VULONG    p128c;          /* received packets of 128-255 octets.. */
  362.     VULONG    p256c;          /* received packets of 256-511 octets.. */
  363.     VULONG    p512c;          /* received packets of 512-1023 octets.. */
  364.     VULONG    p1024c;         /* received packets of 1024-1518 octets.. */
  365.     VULONG    cam_buf;        /* cam respond internal buffer. */
  366.     VUSHORT   rfthr;          /* received frames threshold */
  367.     VUSHORT   rfcnt;          /* received frames count */
  368. } FCC_ETH_PARAM_T;
  369. #pragma pack()
  370. /*---------------------------------------------------------------------*/
  371. /*               F C C     P A R A M E T E R S                         */
  372. /*---------------------------------------------------------------------*/
  373. #pragma pack(1)
  374. typedef struct {
  375.     VUSHORT   riptr;      /* Rx internal temporary data pointer. */
  376.     VUSHORT   tiptr;      /* Tx internal temporary data pointer. */
  377.     VUSHORT   RESERVED0;  /* Reserved */
  378.     VUSHORT   mrblr;      /* Rx buffer length */
  379.     VULONG    rstate;     /* Rx internal state */
  380.     VULONG    rbase;      /* RX BD base address */
  381.     VUSHORT   rbdstat;    /* Rx BD status and control */
  382.     VUSHORT   rbdlen;     /* Rx BD data length */
  383.     VULONG    rdptr;      /* rx BD data pointer */
  384.     VULONG    tstate;     /* Tx internal state */
  385.     VULONG    tbase;      /* TX BD base address */
  386.     VUSHORT   tbdstat;    /* Tx BD status and control */
  387.     VUSHORT   tbdlen;     /* Tx BD data length */
  388.     VULONG    tdptr;      /* Tx  data pointer */
  389.     VULONG    rbptr;      /* rx BD pointer */
  390.     VULONG    tbptr;      /* Tx BD pointer */
  391.     VULONG    rcrc;       /* Temp receive CRC */
  392.     VULONG    tcrc;       /* Temp transmit CRC */
  393.   VULONG foo;
  394.     /*-----------------------------------------------------------------*/
  395.     /*                   Protocol Specific Parameters                  */
  396.     /*-----------------------------------------------------------------*/
  397.     union {
  398. /* Force this union to be 256 bytes - 0x34 bytes big.
  399. The 0x34 is the size of the protocol independent part
  400. of the structure.
  401. */
  402.     UCHAR pads[0xc4];
  403.     FCC_ETH_PARAM_T     e;
  404.     } prot;      
  405. } FCC_PARAM_T;
  406. #pragma pack()
  407. /*-----------------------------------------------------------------*/
  408. /*                   FCC registers                                 */
  409. /*-----------------------------------------------------------------*/
  410. #pragma pack(1)
  411. typedef struct {
  412.     VULONG fcc_gmr; /* General Mode Register */
  413.     VULONG fcc_psmr; /* Protocol Specific Mode Reg */
  414.     VUSHORT fcc_todr; /* Transmit On Demand Reg */
  415.     VUCHAR reserved22[0x2];
  416.     VUSHORT fcc_dsr; /* Data Sync Register */
  417.     VUCHAR reserved23[0x2];
  418.     VUSHORT fcc_fcce; /* Event Register */
  419.     VUSHORT unused1;
  420.     VUSHORT fcc_fccm; /* Mask Register */
  421.     VUSHORT unused2;
  422.     VUCHAR fcc_fccs; /* Status Register */
  423.     VUCHAR reserved24[0x3];
  424.     VULONG fcc_tirr; /* Transmit Partial Rate Reg */
  425. } FCC_REG_T;
  426. #pragma pack()
  427. typedef struct {
  428.     VUSHORT word1;
  429.     VUSHORT bdLen;
  430.     VULONG bdAddr;
  431. }FCC_BD;
  432. typedef struct _pool {
  433.     FCC_BD desc;
  434.     void *pBuf;
  435.     struct _pool *next;
  436. }BPOOL;
  437. typedef struct fcc_tbd_list {
  438.     void *pBuf;
  439.     VULONG info;
  440. #define PKT_TYPE_MULTI 0x10 /* packet with a multicast address */
  441. #define PKT_TYPE_UNI 0x20 /* packet with a unicast address */
  442. #define PKT_TYPE_NONE 0x40 /* address type is not meaningful */
  443. #define BUF_TYPE_CL 0x01 /* this's a cluster pointer */
  444. #define BUF_TYPE_MBLK 0x02 /* this's a mblk pointer */
  445. } FCC_TBD_LIST;
  446. typedef struct
  447.     {
  448.     FUNCPTR routine;    /* routine to be called */
  449.     int param1;         /* arg to routine */
  450.     int param2;
  451.     int param3;
  452.     int param4;
  453.     int param5;
  454.     } TODO_NODE;
  455. typedef struct tx_job_node 
  456.     {
  457.     NODE   node;  /* linked list node */
  458.     TODO_NODE   todo;  /* to do node */
  459.     } TX_JOB_NODE;
  460. /* The definition of the driver control structure */
  461.  
  462. typedef struct drv_ctrl {
  463.     END_OBJ             endObj;         /* base class */
  464.     int                 unit;           /* unit number */
  465.     FCC_DRIVER_STATS *Stats;
  466.     FCC_REG_T *fccReg;
  467.     FCC_ETH_PARAM_T     *fccEthPar;
  468.     FCC_PARAM_T *fccPar;
  469.     BPOOL *RxContainers, *RxEmpty, *RxFree, *RxHead, *RxTail;
  470.     volatile int RxBufCount;
  471.     volatile int rxHandling;
  472.     volatile int lscHandling;
  473.     UINT8 fccNum; /* FCC being used */
  474.     UINT32              immrVal;   /* internal RAM base address */
  475.     UINT32              fifoTxBase;     /* address of Tx FIFO in internal RAM */
  476.     UINT32              fifoRxBase;     /* address of Rx FIFO in internal RAM */
  477.     char *              pBufBase;       /* FCC memory pool base */
  478.     ULONG               bufSize;        /* FCC memory pool size */
  479.     char *              pBdBase;        /* FCC BDs base */
  480.     ULONG               bdSize;         /* FCC BDs size */
  481.     UINT16              rbdNum;         /* number of RBDs */
  482.     FCC_BD *rbdBase; /* RBD ring */
  483.     volatile UINT16 rbdIndex;       /* RBD index */
  484.     void *rBufList[MOT_FCC_RBD_MAX];
  485.     UINT32 mblkMult;
  486.     UINT32 clMult;
  487.     UINT16              tbdNum;         /* number of TBDs */
  488.     FCC_BD *tbdBase; /* TBD ring */
  489.     volatile UINT16 tbdIndex;       /* TBD index */
  490.     volatile UINT16 usedTbdIndex;   /* used TBD index */
  491.     volatile UINT16 cleanTbdNum;    /* number of clean TBDs */
  492.     volatile BOOL txStall;        /* tx handler stalled - no Tbd */
  493.     UINT16 unStallThresh; /* a threshold */
  494.     FCC_TBD_LIST pTbdList[MOT_FCC_TBD_MAX]; /* list of TBDs */
  495.     ULONG               userFlags;      /* some user flags */
  496.     BOOL zeroBufFlag;
  497.     INT8                flags;          /* driver state */
  498.     BOOL                loaded;         /* interface has been loaded */
  499.     BOOL                intrConnect;    /* interrupt has been connected */
  500.     UINT32 intMask; /* interrupt mask register */
  501.     UINT32 fccIramAddr; /* base addr of this fcc */
  502.     UINT32 fccPramAddr; /* parameter RAM addr of this fcc */
  503.     UCHAR * pTxPollBuf; /* cluster pointer for poll mode */
  504.     SEM_ID graSem; /* synch semaphore for graceful */
  505. /* transmit command */
  506.     char *              pClBlkArea;     /* cluster block pointer */
  507.     UINT32              clBlkSize;      /* clusters block memory size */
  508.     char *              pMBlkArea;      /* mBlock area pointer */
  509.     UINT32              mBlkSize;      /* mBlocks area memory size */
  510.     CACHE_FUNCS         bdCacheFuncs;   /* cache descriptor */
  511.     CACHE_FUNCS         bufCacheFuncs;  /* cache descriptor */
  512.     CL_POOL_ID          pClPoolId;      /* cluster pool identifier */
  513.     PHY_INFO *phyInfo; /* info on a MII-compliant PHY */
  514.     int                 offset;         /* Alignment offset */
  515.     UINT                deviceId;       /* PCI device ID */
  516.     END_ERR             lastError;      /* Last error passed to muxError */
  517.     UINT                errorNoBufs;    /* cluster exhaustion */
  518.     MSG_Q_ID txJobMsgQId;  /* message queue for defering tx jobs */
  519.     int          txJobMsgQLen;   /* tx message queue length */
  520.     BOOL txJobQState;   /* handshake for tx message queue */
  521. } DRV_CTRL;
  522. /* 
  523.  * this cache functions descriptors is used to flush/invalidate
  524.  * the FCC's data buffers. They are set to the system's cache
  525.  * flush and invalidate routine. This will allow proper operation
  526.  * of the driver if data cache are turned on.
  527.  */
  528. IMPORT STATUS   cacheArchInvalidate (CACHE_TYPE, void *, size_t);
  529.  
  530. IMPORT STATUS   cacheArchFlush (CACHE_TYPE, void *, size_t);
  531.  
  532. LOCAL   CACHE_FUNCS     motFccBufCacheFuncs;
  533. #if FALSE
  534. LOCAL FUNCPTR motFccBufInvRtn = cacheArchInvalidate;
  535. LOCAL FUNCPTR motFccBufFlushRtn = cacheArchFlush;
  536. #endif /* FALSE */
  537. FUNCPTR _func_motFccIntDisc = NULL; /* assign a proper disc routine */
  538. IMPORT STATUS   sysFccEnetAddrGet (int unit,UCHAR *address);
  539. IMPORT STATUS sysFccEnetEnable (UINT32 immrVal, UINT8 fccNum);
  540. IMPORT STATUS sysFccEnetDisable (UINT32 immrVal, UINT8 fccNum);
  541. IMPORT STATUS sysFccMiiBitWr (UINT32 immrVal, UINT8 fccNum,
  542. INT32 bit);
  543. IMPORT STATUS sysFccMiiBitRd (UINT32 immrVal, UINT8 fccNum,
  544. INT8 * bit);
  545. IMPORT STATUS miiPhyInit (PHY_INFO * phyInfo);
  546. IMPORT FUNCPTR  _func_motFccPhyInit;
  547. IMPORT FUNCPTR  _func_motFccHbFail;
  548. #ifdef __cplusplus
  549. }
  550. #endif
  551. #endif /* __INCsbcMotFccEndh */