00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082 #ifndef _GMAC_H
00083 #define _GMAC_H
00084
00085
00086
00087
00088 #include "chip.h"
00089
00090 #include <stdint.h>
00091
00092 #ifdef __cplusplus
00093 extern "C" {
00094 #endif
00095
00096
00097
00098
00099
00100
00101
00102 #define NUM_GMAC_QUEUES 3
00103
00104
00105 #define GMAC_DUPLEX_HALF 0
00106 #define GMAC_DUPLEX_FULL 1
00107
00108
00109 #define GMAC_SPEED_10M 0
00110 #define GMAC_SPEED_100M 1
00111 #define GMAC_SPEED_1000M 2
00112
00113
00114
00115
00116
00117
00118
00119
00120 #define GMAC_ADDRESS_MASK ((unsigned int)0xFFFFFFFC)
00121 #define GMAC_LENGTH_FRAME ((unsigned int)0x3FFF) /// Length of frame mask
00122
00123
00124 #define GMAC_RX_OWNERSHIP_BIT (1u << 0)
00125 #define GMAC_RX_WRAP_BIT (1u << 1)
00126 #define GMAC_RX_SOF_BIT (1u << 14)
00127 #define GMAC_RX_EOF_BIT (1u << 15)
00128
00129
00130 #define GMAC_TX_LAST_BUFFER_BIT (1u << 15)
00131 #define GMAC_TX_WRAP_BIT (1u << 30)
00132 #define GMAC_TX_USED_BIT (1u << 31)
00133 #define GMAC_TX_RLE_BIT (1u << 29) /// Retry Limit Exceeded
00134 #define GMAC_TX_UND_BIT (1u << 28) /// Tx Buffer Under-run
00135 #define GMAC_TX_ERR_BIT (1u << 27) /// Exhausted in mid-frame
00136 #define GMAC_TX_ERR_BITS \
00137 (GMAC_TX_RLE_BIT | GMAC_TX_UND_BIT | GMAC_TX_ERR_BIT)
00138
00139
00140 #define GMAC_INT_RX_BITS \
00141 (GMAC_IER_RCOMP | GMAC_IER_RXUBR | GMAC_IER_ROVR)
00142 #define GMAC_INT_TX_ERR_BITS \
00143 (GMAC_IER_TUR | GMAC_IER_RLEX | GMAC_IER_TFC | GMAC_IER_HRESP)
00144 #define GMAC_INT_TX_BITS \
00145 (GMAC_INT_TX_ERR_BITS | GMAC_IER_TCOMP)
00146
00147
00148
00149
00150
00151
00152
00153 typedef enum {
00154 GMAC_QUE_0 = 0,
00155 GMAC_QUE_1 = 1,
00156 GMAC_QUE_2 = 2
00157 }gmacQueList_t;
00158
00159
00160 typedef struct _GmacRxDescriptor {
00161 union _GmacRxAddr {
00162 uint32_t val;
00163 struct _GmacRxAddrBM {
00164 uint32_t bOwnership:1,
00165
00166
00167 bWrap:1,
00168 addrDW:30;
00169 } bm;
00170 } addr;
00171 union _GmacRxStatus {
00172 uint32_t val;
00173 struct _GmacRxStatusBM {
00174 uint32_t len:12,
00175 offset:2,
00176
00177
00178 bSof:1,
00179 bEof:1,
00180 bCFI:1,
00181 vlanPriority:3,
00182 bPriorityDetected:1,
00183 bVlanDetected:1,
00184 bTypeIDMatch:1,
00185 bAddr4Match:1,
00186 bAddr3Match:1,
00187 bAddr2Match:1,
00188 bAddr1Match:1,
00189 reserved:1,
00190 bExtAddrMatch:1,
00191 bUniHashMatch:1,
00192 bMultiHashMatch:1,
00193 bBroadcastDetected:1;
00194
00195 } bm;
00196 } status;
00197 } sGmacRxDescriptor ;
00198
00199
00200 typedef struct _GmacTxDescriptor {
00201 uint32_t addr;
00202 union _GmacTxStatus {
00203 uint32_t val;
00204 struct _GmacTxStatusBM {
00205 uint32_t len:11,
00206 reserved:4,
00207 bLastBuffer:1,
00208 bNoCRC:1,
00209 reserved1:10,
00210 bExhausted:1,
00211 bUnderrun:1,
00212 bError:1,
00213 bWrap:1,
00214 bUsed:1;
00215
00216 } bm;
00217 } status;
00218 } sGmacTxDescriptor;
00219
00220
00221
00222
00223
00224
00225 extern uint8_t GMAC_IsIdle(Gmac *pGmac);
00226 extern void GMAC_PHYMaintain(Gmac *pGmac,
00227 uint8_t bPhyAddr,
00228 uint8_t bRegAddr,
00229 uint8_t bRW,
00230 uint16_t wData);
00231 extern uint16_t GMAC_PHYData(Gmac *pGmac);
00232 extern void GMAC_ClearStatistics(Gmac *pGmac);
00233 extern void GMAC_IncreaseStatistics(Gmac *pGmac);
00234 extern void GMAC_StatisticsWriteEnable(Gmac *pGmac, uint8_t bEnaDis);
00235 extern uint8_t GMAC_SetMdcClock(Gmac *pGmac, uint32_t mck );
00236 extern void GMAC_EnableMdio(Gmac *pGmac );
00237 extern void GMAC_DisableMdio(Gmac *pGmac );
00238 extern void GMAC_EnableMII(Gmac *pGmac );
00239 extern void GMAC_EnableRMII(Gmac *pGmac );
00240 extern void GMAC_EnableGMII( Gmac *pGmac );
00241 extern void GMAC_SetLinkSpeed(Gmac *pGmac, uint8_t speed, uint8_t fullduplex);
00242 extern void GMAC_EnableIt(Gmac *pGmac, uint32_t dwSources, gmacQueList_t queueIdx);
00243 extern void GMAC_EnableAllQueueIt(Gmac *pGmac, uint32_t dwSources);
00244 extern void GMAC_DisableIt(Gmac *pGmac, uint32_t dwSources, gmacQueList_t queueIdx);
00245 extern void GMAC_DisableAllQueueIt(Gmac *pGmac, uint32_t dwSources);
00246 extern uint32_t GMAC_GetItStatus(Gmac *pGmac, gmacQueList_t queueIdx);
00247 extern uint32_t GMAC_GetItMask(Gmac *pGmac, gmacQueList_t queueIdx);
00248 extern uint32_t GMAC_GetTxStatus(Gmac *pGmac);
00249 extern void GMAC_ClearTxStatus(Gmac *pGmac, uint32_t dwStatus);
00250 extern uint32_t GMAC_GetRxStatus(Gmac *pGmac);
00251 extern void GMAC_ClearRxStatus(Gmac *pGmac, uint32_t dwStatus);
00252 extern void GMAC_ReceiveEnable(Gmac* pGmac, uint8_t bEnaDis);
00253 extern void GMAC_TransmitEnable(Gmac *pGmac, uint8_t bEnaDis);
00254 extern uint32_t GMAC_SetLocalLoopBack(Gmac *pGmac);
00255 extern void GMAC_SetRxQueue(Gmac *pGmac, uint32_t dwAddr, gmacQueList_t queueIdx);
00256 extern uint32_t GMAC_GetRxQueue(Gmac *pGmac, gmacQueList_t queueIdx);
00257 extern void GMAC_SetTxQueue(Gmac *pGmac, uint32_t dwAddr, gmacQueList_t queueIdx);
00258 extern uint32_t GMAC_GetTxQueue(Gmac *pGmac, gmacQueList_t queueIdx);
00259 extern void GMAC_NetworkControl(Gmac *pGmac, uint32_t bmNCR);
00260 extern uint32_t GMAC_GetNetworkControl(Gmac *pGmac);
00261 extern void GMAC_SetAddress(Gmac *pGmac, uint8_t bIndex, uint8_t *pMacAddr);
00262 extern void GMAC_SetAddress32(Gmac *pGmac, uint8_t bIndex, uint32_t dwMacT, uint32_t dwMacB);
00263 extern void GMAC_SetAddress64(Gmac *pGmac, uint8_t bIndex, uint64_t ddwMac);
00264 extern void GMAC_Configure(Gmac *pGmac, uint32_t dwCfg);
00265 extern void GMAC_SetDMAConfig(Gmac *pGmac, uint32_t dwDmaCfg, gmacQueList_t queueIdx);
00266 extern uint32_t GMAC_GetDMAConfig(Gmac *pGmac, gmacQueList_t queueIdx);
00267 extern uint32_t GMAC_GetConfigure(Gmac *pGmac);
00268 extern void GMAC_TransmissionStart(Gmac *pGmac);
00269 extern void GMAC_TransmissionHalt(Gmac *pGmac);
00270 extern void GMAC_EnableRGMII(Gmac *pGmac, uint32_t duplex, uint32_t speed);
00271
00272 void GMAC_ClearScreener1Reg (Gmac* pGmac, gmacQueList_t queueIdx);
00273
00274 void GMAC_WriteScreener1Reg(Gmac* pGmac, gmacQueList_t queueIdx, uint32_t regVal);
00275
00276 void GMAC_ClearScreener2Reg (Gmac* pGmac, gmacQueList_t queueIdx);
00277
00278 void GMAC_WriteScreener2Reg (Gmac* pGmac, gmacQueList_t queueIdx, uint32_t regVal);
00279
00280 void GMAC_WriteEthTypeReg (Gmac* pGmac, gmacQueList_t queueIdx, uint16_t etherType);
00281
00282 void GMAC_WriteCompareReg(Gmac* pGmac, gmacQueList_t queueIdx, uint32_t c0Reg, uint16_t c1Reg);
00283
00284 void GMAC_EnableCbsQueA(Gmac *pGmac);
00285
00286 void GMAC_DisableCbsQueA(Gmac *pGmac);
00287
00288 void GMAC_EnableCbsQueB(Gmac *pGmac);
00289
00290 void GMAC_DisableCbsQueB(Gmac *pGmac);
00291
00292 void GMAC_ConfigIdleSlopeA(Gmac *pGmac, uint32_t idleSlopeA);
00293
00294 void GMAC_ConfigIdleSlopeB(Gmac *pGmac, uint32_t idleSlopeB);
00295
00296 void GMAC_SetTsuTmrIncReg( Gmac *pGmac, uint32_t nanoSec);
00297
00298 uint16_t GMAC_GetPtpEvtMsgRxdMsbSec( Gmac *pGmac );
00299
00300 uint32_t GMAC_GetPtpEvtMsgRxdLsbSec( Gmac *pGmac );
00301
00302 uint32_t GMAC_GetPtpEvtMsgRxdNanoSec( Gmac *pGmac );
00303
00304 void GMAC_SetTsuCompare(Gmac *pGmac, uint32_t seconds47, uint32_t seconds31, uint32_t nanosec );
00305
00306 void GMAC_SetTsuCompareNanoSec(Gmac *pGmac, uint32_t nanosec);
00307
00308 void GMAC_SetTsuCompareSec31(Gmac *pGmac, uint32_t seconds31);
00309
00310 void GMAC_SetTsuCompareSec47(Gmac *pGmac, uint16_t seconds47);
00311
00312 uint32_t GMAC_GetRxEvtFrameSec(Gmac *pGmac);
00313
00314 uint32_t GMAC_GetRxEvtFrameNsec(Gmac *pGmac);
00315
00316 uint32_t GMAC_GetRxPeerEvtFrameSec(Gmac *pGmac);
00317
00318 uint32_t GMAC_GetRxPeerEvtFrameNsec(Gmac *pGmac);
00319
00320 uint32_t GMAC_GetTxEvtFrameSec(Gmac *pGmac);
00321
00322 uint32_t GMAC_GetTxEvtFrameNsec(Gmac *pGmac);
00323
00324 uint32_t GMAC_GetTxPeerEvtFrameSec(Gmac *pGmac);
00325
00326 uint32_t GMAC_GetTxPeerEvtFrameNsec(Gmac *pGmac);
00327
00328 #ifdef __cplusplus
00329 }
00330 #endif
00331
00332 #endif // #ifndef GMAC_H
00333