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

VxWorks

开发平台:

C/C++

  1. /* motCpmEnd.h - Motorola CPM core Ethernet interface header */
  2. /* Copyright 1996 - 2002 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01g,24jan02,rcs  removed #include "drv/netif/if_cpm.h"
  7. 01f,24jan02,rcs  moved General SCC Mode Register definitions,
  8.                  SCC Ethernet Protocol Specific Mode Register definitions,
  9.                  SCC Ethernet Event and Mask Register definitions,
  10.                  SCC Ethernet Receive Buffer Descriptor definitions,
  11.                  SCC Ethernet Transmit Buffer Descriptor definitions,
  12.                  SCC Serial Comunications Controller,
  13.                  SCC device descriptor, and 
  14.                  #include "drv/multi/ppc860Cpm.h" from h/drv/netif/if_cpm.h
  15. 01e,08jan02,mil  Backed out last update "Remove compilation warning".
  16. 01d,22dec01,g_h  Remove compilation warning
  17. 01c,28aug98,dat  changed all motCmp names to motCpm.
  18. 01b,29jun98,cn   fixed compiler errors for CPUs other than CPU32 or PPC860.
  19. 01a,22jun98,cn   created. 
  20. */
  21. /*
  22. This file contains definitions to support the end-style Network Driver 
  23. for the Motorola CPM core Ethernet controller used in the M68EN360 and 
  24. PPC800-series communications controllers. These definitions are compiler
  25. dependant, meaning that their values are based on the particular cpu
  26. being used.
  27. */
  28. #ifndef __INCmotCpmEndh
  29. #define __INCmotCpmEndh
  30. #ifdef __cplusplus
  31. extern "C" {
  32. #endif
  33. #if (CPU == PPC860)
  34. #include "drv/multi/ppc860Cpm.h"
  35. #include "drv/multi/ppc860Siu.h"
  36. #else
  37. #include "drv/multi/m68360.h"  /* default: use CPU32 include file */
  38. #endif /* CPU == PPC860 */
  39. /* defines */
  40. /*
  41.  * the following may be redefined in the bsp to account for the actual
  42.  * number of SCC devices in the system.
  43.  */
  44. #ifndef MAX_SCC_CHANNELS
  45. #define MAX_SCC_CHANNELS  4       /* max SCC number for Ethernet channels */
  46. #endif /* MAX_SCC_CHANNELS */
  47. #if (CPU == PPC860)
  48. #define CPM_DPR_SCC1(baseAddr)  MPC860_DPR_SCC1 (baseAddr)
  49. #define CPM_GSMR_L1(baseAddr)   GSMR_L1 (baseAddr)
  50. #define CPM_CIMR_SCC4           CIMR_SCC4
  51. #define CPM_CIMR(baseAddr)      CIMR (baseAddr)
  52. #define CPM_CISR(baseAddr)      CISR (baseAddr)
  53. #define CPM_CPCR(baseAddr)      CPCR (baseAddr)
  54. #define END_OBJ_STRING "MPC860 Power-QUICC Enhanced Network Driver"
  55. #define MOT_DEV_NAME "cpm"
  56. #define MOT_DEV_NAME_LEN 4
  57. /* General SCC Mode Register definitions */
  58. #define SCC_GSMRL_HDLC          0x00000000      /* HDLC mode */
  59. #define SCC_GSMRL_APPLETALK     0x00000002      /* AppleTalk mode (LocalTalk) */
  60. #define SCC_GSMRL_SS7           0x00000003      /* SS7 mode (microcode) */
  61. #define SCC_GSMRL_UART          0x00000004      /* UART mode */
  62. #define SCC_GSMRL_PROFI_BUS     0x00000005      /* Profi-Bus mode (microcode) */
  63. #define SCC_GSMRL_ASYNC_HDLC    0x00000006      /* async HDLC mode (microcode)*/
  64. #define SCC_GSMRL_V14           0x00000007      /* V.14 mode */
  65. #define SCC_GSMRL_BISYNC        0x00000008      /* BISYNC mode */
  66. #define SCC_GSMRL_DDCMP         0x00000009      /* DDCMP mode (microcode) */
  67. #define SCC_GSMRL_ETHERNET      0x0000000c      /* ethernet mode (SCC1 only) */
  68. #define SCC_GSMRL_ENT           0x00000010      /* enable transmitter */
  69. #define SCC_GSMRL_ENR           0x00000020      /* enable receiver */
  70. #define SCC_GSMRL_LOOPBACK      0x00000040      /* local loopback mode */
  71. #define SCC_GSMRL_ECHO          0x00000080      /* automatic echo mode */
  72. #define SCC_GSMRL_TENC          0x00000700      /* transmitter encoding method*/
  73. #define SCC_GSMRL_RENC          0x00003800      /* receiver encoding method */
  74. #define SCC_GSMRL_RDCR_X8       0x00004000      /* receive DPLL clock x8 */
  75. #define SCC_GSMRL_RDCR_X16      0x00008000      /* receive DPLL clock x16 */
  76. #define SCC_GSMRL_RDCR_X32      0x0000c000      /* receive DPLL clock x32 */
  77. #define SCC_GSMRL_TDCR_X8       0x00010000      /* transmit DPLL clock x8 */
  78. #define SCC_GSMRL_TDCR_X16      0x00020000      /* transmit DPLL clock x16 */
  79. #define SCC_GSMRL_TDCR_X32      0x00030000      /* transmit DPLL clock x32 */
  80. #define SCC_GSMRL_TEND          0x00040000      /* transmitter frame ending */
  81. #define SCC_GSMRL_TPP_00        0x00180000      /* Tx preamble pattern = 00 */
  82. #define SCC_GSMRL_TPP_10        0x00080000      /* Tx preamble pattern = 10 */
  83. #define SCC_GSMRL_TPP_01        0x00100000      /* Tx preamble pattern = 01 */
  84. #define SCC_GSMRL_TPP_11        0x00180000      /* Tx preamble pattern = 11 */
  85. #define SCC_GSMRL_TPL_NONE      0x00000000      /* no Tx preamble (default) */
  86. #define SCC_GSMRL_TPL_8         0x00200000      /* Tx preamble = 1 byte */
  87. #define SCC_GSMRL_TPL_16        0x00400000      /* Tx preamble = 2 bytes */
  88. #define SCC_GSMRL_TPL_32        0x00600000      /* Tx preamble = 4 bytes */
  89. #define SCC_GSMRL_TPL_48        0x00800000      /* Tx preamble = 6 bytes */
  90. #define SCC_GSMRL_TPL_64        0x00a00000      /* Tx preamble = 8 bytes */
  91. #define SCC_GSMRL_TPL_128       0x00c00000      /* Tx preamble = 16 bytes */
  92. #define SCC_GSMRL_TINV          0x01000000      /* DPLL transmit input invert */
  93. #define SCC_GSMRL_RINV          0x02000000      /* DPLL receive input invert */
  94. #define SCC_GSMRL_TSNC          0x0c000000      /* transmit sense */
  95. #define SCC_GSMRL_TCI           0x10000000      /* transmit clock invert */
  96. #define SCC_GSMRL_EDGE          0x60000000      /* adjustment edge +/- */
  97.  
  98. #define SCC_GSMRH_RSYN          0x00000001      /* receive sync timing*/
  99. #define SCC_GSMRH_RTSM          0x00000002      /* RTS* mode */
  100. #define SCC_GSMRH_SYNL          0x0000000c      /* sync length */
  101. #define SCC_GSMRH_TXSY          0x00000010      /* transmitter/receiver sync */
  102. #define SCC_GSMRH_RFW           0x00000020      /* Rx FIFO width */
  103. #define SCC_GSMRH_TFL           0x00000040      /* transmit FIFO length */
  104. #define SCC_GSMRH_CTSS          0x00000080      /* CTS* sampling */
  105. #define SCC_GSMRH_CDS           0x00000100      /* CD* sampling */
  106. #define SCC_GSMRH_CTSP          0x00000200      /* CTS* pulse */
  107. #define SCC_GSMRH_CDP           0x00000400      /* CD* pulse */
  108. #define SCC_GSMRH_TTX           0x00000800      /* transparent transmitter */
  109. #define SCC_GSMRH_TRX           0x00001000      /* transparent receiver */
  110. #define SCC_GSMRH_REVD          0x00002000      /* reverse data */
  111. #define SCC_GSMRH_TCRC          0x0000c000      /* transparent CRC */
  112. #define SCC_GSMRH_GDE           0x00010000      /* glitch detect enable */
  113. /* CPM - Communication Processor Module */
  114. /* SCC Ethernet Protocol Specific Mode Register definitions */
  115.  
  116. #define SCC_ETHER_PSMR_NIB_13   0x0000          /* SFD 13 bits after TENA */
  117. #define SCC_ETHER_PSMR_NIB_14   0x0002          /* SFD 14 bits after TENA */
  118. #define SCC_ETHER_PSMR_NIB_15   0x0004          /* SFD 15 bits after TENA */
  119. #define SCC_ETHER_PSMR_NIB_16   0x0006          /* SFD 16 bits after TENA */
  120. #define SCC_ETHER_PSMR_NIB_21   0x0008          /* SFD 21 bits after TENA */
  121. #define SCC_ETHER_PSMR_NIB_22   0x000a          /* SFD 22 bits after TENA */
  122. #define SCC_ETHER_PSMR_NIB_23   0x000c          /* SFD 23 bits after TENA */
  123. #define SCC_ETHER_PSMR_NIB_24   0x000e          /* SFD 24 bits after TENA */
  124. #define SCC_ETHER_PSMR_LCW      0x0100          /* late collision window */
  125. #define SCC_ETHER_PSMR_SIP      0x0200          /* sample input pins */
  126. #define SCC_ETHER_PSMR_LPB      0x0400          /* loopback operation */
  127. #define SCC_ETHER_PSMR_SBT      0x0800          /* stop backoff timer */
  128. #define SCC_ETHER_PSMR_BRO      0x0100          /* broadcast address */
  129. #define SCC_ETHER_PSMR_PRO      0x0200          /* promiscuous mode */
  130. #define SCC_ETHER_PSMR_CRC      0x0800          /* CRC selection */
  131. #define SCC_ETHER_PSMR_IAM      0x1000          /* individual address mode */
  132. #define SCC_ETHER_PSMR_RSH      0x2000          /* receive short frame */
  133. #define SCC_ETHER_PSMR_FC       0x4000          /* force collision */
  134. #define SCC_ETHER_PSMR_HBC      0x8000          /* heartbeat checking*/
  135.  
  136. /* SCC Ethernet Event and Mask Register definitions */
  137.  
  138. #define SCC_ETHER_SCCX_RXB      0x0001          /* buffer received event */
  139. #define SCC_ETHER_SCCX_TXB      0x0002          /* buffer transmitted event */
  140. #define SCC_ETHER_SCCX_BSY      0x0004          /* busy condition */
  141. #define SCC_ETHER_SCCX_RXF      0x0008          /* frame received event */
  142. #define SCC_ETHER_SCCX_TXE      0x0010          /* transmission error event */
  143. #define SCC_ETHER_SCCX_GRA      0x0080          /* graceful stop event */
  144.  
  145. /* SCC Ethernet Receive Buffer Descriptor definitions */
  146.  
  147. #define SCC_ETHER_RX_BD_CL      0x0001          /* collision condition */
  148. #define SCC_ETHER_RX_BD_OV      0x0002          /* overrun condition */
  149. #define SCC_ETHER_RX_BD_CR      0x0004          /* Rx CRC error */
  150. #define SCC_ETHER_RX_BD_SH      0x0008          /* short frame received */
  151. #define SCC_ETHER_RX_BD_NO      0x0010          /* Rx nonoctet aligned frame */
  152. #define SCC_ETHER_RX_BD_LG      0x0020          /* Rx frame length violation */
  153. #define SCC_ETHER_RX_BD_M       0x0100          /* miss bit for prom mode */
  154. #define SCC_ETHER_RX_BD_F       0x0400          /* buffer is first in frame */
  155. #define SCC_ETHER_RX_BD_L       0x0800          /* buffer is last in frame */
  156. #define SCC_ETHER_RX_BD_I       0x1000          /* interrupt on receive */
  157. #define SCC_ETHER_RX_BD_W       0x2000          /* last BD in ring */
  158. #define SCC_ETHER_RX_BD_E       0x8000          /* buffer is empty */
  159.  
  160. /* SCC Ethernet Transmit Buffer Descriptor definitions */
  161.  
  162. #define SCC_ETHER_TX_BD_CSL     0x0001          /* carrier sense lost */
  163. #define SCC_ETHER_TX_BD_UN      0x0002          /* underrun */
  164. #define SCC_ETHER_TX_BD_RC      0x003c          /* retry count */
  165. #define SCC_ETHER_TX_BD_RL      0x0040          /* retransmission limit */
  166. #define SCC_ETHER_TX_BD_LC      0x0080          /* late collision */
  167. #define SCC_ETHER_TX_BD_HB      0x0100          /* heartbeat */
  168. #define SCC_ETHER_TX_BD_DEF     0x0200          /* defer indication */
  169. #define SCC_ETHER_TX_BD_TC      0x0400          /* auto transmit CRC */
  170. #define SCC_ETHER_TX_BD_L       0x0800          /* buffer is last in frame */
  171. #define SCC_ETHER_TX_BD_I       0x1000          /* interrupt on transmit */
  172. #define SCC_ETHER_TX_BD_W       0x2000          /* last BD in ring */
  173. #define SCC_ETHER_TX_BD_PAD     0x4000          /* auto pad short frames */
  174. #define SCC_ETHER_TX_BD_R       0x8000          /* buffer is ready */
  175. /* typedefs */
  176. /* SCC - Serial Comunications Controller */
  177. typedef struct          /* SCC_ETHER_PROTO */
  178.     {
  179.     UINT32       c_pres;             /* preset CRC */
  180.     UINT32       c_mask;             /* constant mask for CRC */
  181.     volatile UINT32     crcec;              /* CRC error counter */
  182.     volatile UINT32     alec;               /* alignment error counter */
  183.     volatile UINT32     disfc;              /* discard frame counter */
  184.     UINT16       pads;               /* short frame pad value */
  185.     UINT16       ret_lim;            /* retry limit threshold */
  186.     volatile UINT16     ret_cnt;            /* retry limit counter */
  187.     UINT16       mflr;               /* maximum frame length register */
  188.     UINT16       minflr;             /* minimum frame length register */
  189.     UINT16       maxd1;              /* max DMA1 length register */
  190.     UINT16       maxd2;              /* max DMA2 length register */
  191.     volatile UINT16     maxd;               /* Rx max DMA */
  192.     volatile UINT16     dma_cnt;            /* Rx DMA counter */
  193.     volatile UINT16     max_b;              /* max BD byte count */
  194.     UINT16       gaddr1;             /* group address filter 1 */
  195.     UINT16       gaddr2;             /* group address filter 2 */
  196.     UINT16       gaddr3;             /* group address filter 3 */
  197.     UINT16       gaddr4;             /* group address filter 4 */
  198.     volatile UINT32     tbuf0_data0;        /* save area 0 - current frame */
  199.     volatile UINT32     tbuf0_data1;        /* save area 1 - current frame */
  200.     volatile UINT32     tbuf0_rba0;         /* ? */
  201.     volatile UINT32     tbuf0_crc;          /* ? */
  202.     volatile UINT16     tbuf0_bcnt;         /* ? */
  203.     UINT16       paddr1_h;           /* physical address 1 (MSB) */
  204.     UINT16       paddr1_m;           /* physical address 1 */
  205.     UINT16       paddr1_l;           /* physical address 1 (LSB) */
  206.     UINT16       p_per;              /* persistence */
  207.     volatile UINT16     rfbd_ptr;           /* Rx first BD pointer */
  208.     volatile UINT16     tfbd_ptr;           /* Tx first BD pointer */
  209.     volatile UINT16     tlbd_ptr;           /* Tx last BD pointer */
  210.     volatile UINT32     tbuf1_data0;        /* save area 0 - next frame */
  211.     volatile UINT32     tbuf1_data1;        /* ? */
  212.     volatile UINT32     tbuf1_rba0;         /* ? */
  213.     volatile UINT32     tbuf1_crc;          /* ? */
  214.     volatile UINT16     tbuf1_bcnt;         /* ? */
  215.     volatile UINT16     tx_len;             /* Tx frame length counter */
  216.     UINT16       iaddr1;             /* individual address filter 1 */
  217.     UINT16       iaddr2;             /* individual address filter 2 */
  218.     UINT16       iaddr3;             /* individual address filter 3 */
  219.     UINT16       iaddr4;             /* individual address filter 4 */
  220.     volatile UINT16     boff_cnt;           /* backoff counter */
  221.     UINT16       taddr_h;            /* temp address (MSB) */
  222.     UINT16       taddr_m;            /* temp address */
  223.     UINT16       taddr_l;            /* temp address (LSB) */
  224.     } SCC_ETHER_PROTO;
  225.  
  226. /* SCC device descriptor */
  227. typedef struct          /* SCC_ETHER_DEV */
  228.     {
  229.     int                 sccNum;         /* number of SCC device */
  230.     int                 txBdNum;        /* number of transmit buf descriptors */
  231.     int                 rxBdNum;        /* number of receive buf descriptors */
  232.     SCC_BUF *           txBdBase;       /* transmit BD base address */
  233.     SCC_BUF *           rxBdBase;       /* receive BD base address */
  234.     u_char *            txBufBase;      /* transmit buffer base address */
  235.     u_char *            rxBufBase;      /* receive buffer base address */
  236.     UINT32              txBufSize;      /* transmit buffer size */
  237.     UINT32              rxBufSize;      /* receive buffer size */
  238.     int                 txBdNext;       /* next transmit BD to fill */
  239.     int                 rxBdNext;       /* next receive BD to read */
  240.     volatile SCC *      pScc;           /* SCC parameter RAM */
  241.     volatile SCC_REG *  pSccReg;        /* SCC registers */
  242.     UINT32              intMask;        /* interrupt acknowledge mask */
  243.     } SCC_ETHER_DEV;
  244. #else /* default: use CPU32 definitions */
  245. #define SCC_ETHER_DEV SCC_DEV
  246. #define CPM_DPR_SCC1(baseAddr)  M360_DPR_SCC1 (baseAddr)
  247. #define CPM_GSMR_L1(baseAddr)   M360_CPM_GSMR_L1 (baseAddr)
  248. #define CPM_CIMR_SCC4           CPIC_CIXR_SCC4
  249. #define CPM_CIMR(baseAddr)      M360_CPM_CIMR (baseAddr)
  250. #define CPM_CISR(baseAddr)      M360_CPM_CISR (baseAddr)
  251. #define CPM_CPCR(baseAddr)      M360_CPM_CR (baseAddr)
  252. #define END_OBJ_STRING "MC68EN360 QUICC Enhanced Network Driver"
  253. #define MOT_DEV_NAME "qu"
  254. #define MOT_DEV_NAME_LEN 3
  255. #endif /* CPU == PPC860 */
  256. /* bsp-specific routine to include */
  257. #if (CPU == PPC860)
  258. #define SYS_ENET_ADDR_GET(address)                                  
  259. if (sysCpmEnetAddrGet != NULL)                                          
  260.     if (sysCpmEnetAddrGet (pDrvCtrl->unit, (address)) == ERROR)
  261. {
  262. errnoSet (S_iosLib_INVALID_ETHERNET_ADDRESS);
  263. return (NULL);
  264. }
  265.  
  266. #define SYS_ENET_ENABLE                                             
  267. if (sysCpmEnetEnable != NULL)                                           
  268.     if (sysCpmEnetEnable (pDrvCtrl->unit) == ERROR)
  269. return (ERROR);
  270.  
  271. #define SYS_ENET_DISABLE                                            
  272. if (sysCpmEnetDisable != NULL)                                          
  273.     sysCpmEnetDisable (pDrvCtrl->unit);
  274.  
  275. #else /* default: use CPU32 definitions */
  276. #define SYS_ENET_ADDR_GET(address)                                  
  277. if (sys360EnetAddrGet != NULL)                                          
  278.     if (sys360EnetAddrGet (pDrvCtrl->unit, (address)) == ERROR)
  279. {
  280. errnoSet (S_iosLib_INVALID_ETHERNET_ADDRESS);
  281. return (NULL);
  282. }
  283.  
  284. #define SYS_ENET_ENABLE                                             
  285. if (sys360EnetEnable != NULL)                                           
  286.     if (sys360EnetEnable (pDrvCtrl->unit, pDrvCtrl->regBase) == ERROR)  
  287. return (ERROR);
  288.  
  289. #define SYS_ENET_DISABLE                                            
  290. if (sys360EnetDisable != NULL)                                          
  291.     sys360EnetDisable (pDrvCtrl->unit, pDrvCtrl->regBase);
  292.  
  293. #endif /* CPU == PPC860 */
  294. /* globals */
  295.  
  296. #if (CPU == PPC860)
  297. IMPORT STATUS sysCpmEnetEnable  (int unit); /* enable ctrl */
  298. IMPORT void   sysCpmEnetDisable (int unit); /* disable ctrl */
  299. IMPORT STATUS sysCpmEnetAddrGet (int unit, u_char * addr);  /* get enet addr */
  300. #else /* default: use CPU32 prototypes */
  301. IMPORT STATUS sys360EnetEnable  (int unit, UINT32 regBase); /* enable ctrl */
  302. IMPORT void   sys360EnetDisable (int unit, UINT32 regBase); /* disable ctrl */
  303. IMPORT STATUS sys360EnetAddrGet (int unit, u_char * addr);  /* get enet addr */
  304. #endif /* CPU == PPC860 */
  305. #ifdef __cplusplus
  306. }
  307. #endif
  308. #endif /* __INCmotCpmEndh */