RTEMS  5.1
gmac.h
Go to the documentation of this file.
1 /* ---------------------------------------------------------------------------- */
2 /* Atmel Microcontroller Software Support */
3 /* SAM Software Package License */
4 /* ---------------------------------------------------------------------------- */
5 /* Copyright (c) 2015, Atmel Corporation */
6 /* */
7 /* All rights reserved. */
8 /* */
9 /* Redistribution and use in source and binary forms, with or without */
10 /* modification, are permitted provided that the following condition is met: */
11 /* */
12 /* - Redistributions of source code must retain the above copyright notice, */
13 /* this list of conditions and the disclaimer below. */
14 /* */
15 /* Atmel's name may not be used to endorse or promote products derived from */
16 /* this software without specific prior written permission. */
17 /* */
18 /* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR */
19 /* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */
20 /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE */
21 /* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, */
22 /* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT */
23 /* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */
24 /* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF */
25 /* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */
26 /* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */
27 /* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
28 /* ---------------------------------------------------------------------------- */
29 
82 #ifndef _GMAC_H
83 #define _GMAC_H
84 
85 /*----------------------------------------------------------------------------
86  * Headers
87  *----------------------------------------------------------------------------*/
88 #include "chip.h"
89 
90 #include <stdint.h>
91 
92 #ifdef __cplusplus
93 extern "C" {
94 #endif
95 
96 /*----------------------------------------------------------------------------
97  * Defines
98  *----------------------------------------------------------------------------*/
102 #define NUM_GMAC_QUEUES 3
103 
105 #define GMAC_DUPLEX_HALF 0
106 #define GMAC_DUPLEX_FULL 1
107 
108 //
109 #define GMAC_SPEED_10M 0
110 #define GMAC_SPEED_100M 1
111 #define GMAC_SPEED_1000M 2
112 
113 /*------------------------------------------------------------------------------
114  Definitions
115 ------------------------------------------------------------------------------
116 */
120 #define GMAC_ADDRESS_MASK ((unsigned int)0xFFFFFFFC)
121 #define GMAC_LENGTH_FRAME ((unsigned int)0x3FFF)
122 
123 // receive buffer descriptor bits
124 #define GMAC_RX_OWNERSHIP_BIT (1u << 0)
125 #define GMAC_RX_WRAP_BIT (1u << 1)
126 #define GMAC_RX_SOF_BIT (1u << 14)
127 #define GMAC_RX_EOF_BIT (1u << 15)
128 
129 // Transmit buffer descriptor bits
130 #define GMAC_TX_LAST_BUFFER_BIT (1u << 15)
131 #define GMAC_TX_WRAP_BIT (1u << 30)
132 #define GMAC_TX_USED_BIT (1u << 31)
133 #define GMAC_TX_RLE_BIT (1u << 29)
134 #define GMAC_TX_UND_BIT (1u << 28)
135 #define GMAC_TX_ERR_BIT (1u << 27)
136 #define GMAC_TX_ERR_BITS \
137  (GMAC_TX_RLE_BIT | GMAC_TX_UND_BIT | GMAC_TX_ERR_BIT)
138 
139 // Interrupt bits
140 #define GMAC_INT_RX_BITS \
141  (GMAC_IER_RCOMP | GMAC_IER_RXUBR | GMAC_IER_ROVR)
142 #define GMAC_INT_TX_ERR_BITS \
143  (GMAC_IER_TUR | GMAC_IER_RLEX | GMAC_IER_TFC | GMAC_IER_HRESP)
144 #define GMAC_INT_TX_BITS \
145  (GMAC_INT_TX_ERR_BITS | GMAC_IER_TCOMP)
146 // Interrupt Status bits
147 #define GMAC_INT_RX_STATUS_BITS \
148  (GMAC_ISR_RCOMP | GMAC_ISR_RXUBR | GMAC_ISR_ROVR)
149 #define GMAC_INT_TX_STATUS_ERR_BITS \
150  (GMAC_ISR_TUR | GMAC_ISR_RLEX | GMAC_ISR_TFC | GMAC_ISR_HRESP)
151 
152 // Rx descriptor status flags
153 #define GMAC_RXDESC_ST_CKSUM_RESULT_NOT_CHECKED (0)
154 #define GMAC_RXDESC_ST_CKSUM_RESULT_IP_CHECKED (1)
155 #define GMAC_RXDESC_ST_CKSUM_RESULT_IP_AND_TCP_CHECKED (2)
156 #define GMAC_RXDESC_ST_CKSUM_RESULT_IP_AND_UDP_CHECKED (3)
157 
158 /*----------------------------------------------------------------------------
159  * Types
160  *----------------------------------------------------------------------------*/
164 /* This is the list of GMAC queue */
165 typedef enum {
166  GMAC_QUE_0 = 0,
167  GMAC_QUE_1 = 1,
168  GMAC_QUE_2 = 2
169 } gmacQueList_t;
170 
172 typedef struct _GmacRxDescriptor {
173  union _GmacRxAddr {
174  uint32_t val;
175  struct _GmacRxAddrBM {
176  uint32_t bOwnership: 1,
179  bWrap: 1,
180  addrDW: 30;
181  } bm;
182  } addr;
184  uint32_t val;
186  uint32_t len: 12,
187  offset: 2,
190  bSof: 1,
191  bEof: 1,
192  bCFI: 1,
193  vlanPriority: 3,
194  bPriorityDetected: 1,
195  bVlanDetected: 1,
196  typeIDMatchOrCksumResult: 2,
197  bTypeIDMatchFoundOrCksumSNAPState: 1,
198  specAddrMatchRegister: 2,
199  bSpecAddrMatchFound: 1,
200  reserved: 1,
201  bUniHashMatch: 1,
202  bMultiHashMatch: 1,
203  bBroadcastDetected: 1;
205  } bm;
206  } status;
207 } sGmacRxDescriptor; /* GCC */
208 
210 typedef struct _GmacTxDescriptor {
211  uint32_t addr;
213  uint32_t val;
215  uint32_t len: 11,
216  reserved: 4,
217  bLastBuffer: 1,
218  bNoCRC: 1,
219  reserved1: 10,
220  bExhausted: 1,
221  bUnderrun: 1,
222  bError: 1,
223  bWrap: 1,
224  bUsed: 1;
226  } bm;
227  } status;
228 } sGmacTxDescriptor; /* GCC */
229 
232 //-----------------------------------------------------------------------------
233 // PHY Exported functions
234 //-----------------------------------------------------------------------------
235 extern uint8_t GMAC_IsIdle(Gmac *pGmac);
236 extern void GMAC_PHYMaintain(Gmac *pGmac,
237  uint8_t bPhyAddr,
238  uint8_t bRegAddr,
239  uint8_t bRW,
240  uint16_t wData);
241 extern uint16_t GMAC_PHYData(Gmac *pGmac);
242 extern void GMAC_ClearStatistics(Gmac *pGmac);
243 extern void GMAC_IncreaseStatistics(Gmac *pGmac);
244 extern void GMAC_StatisticsWriteEnable(Gmac *pGmac, uint8_t bEnaDis);
245 extern uint8_t GMAC_SetMdcClock(Gmac *pGmac, uint32_t mck);
246 extern void GMAC_EnableMdio(Gmac *pGmac);
247 extern void GMAC_DisableMdio(Gmac *pGmac);
248 extern void GMAC_EnableMII(Gmac *pGmac);
249 extern void GMAC_EnableRMII(Gmac *pGmac);
250 extern void GMAC_EnableGMII(Gmac *pGmac);
251 extern void GMAC_SetLinkSpeed(Gmac *pGmac, uint8_t speed, uint8_t fullduplex);
252 extern void GMAC_EnableIt(Gmac *pGmac, uint32_t dwSources,
253  gmacQueList_t queueIdx);
254 extern void GMAC_EnableAllQueueIt(Gmac *pGmac, uint32_t dwSources);
255 extern void GMAC_DisableIt(Gmac *pGmac, uint32_t dwSources,
256  gmacQueList_t queueIdx);
257 extern void GMAC_DisableAllQueueIt(Gmac *pGmac, uint32_t dwSources);
258 extern uint32_t GMAC_GetItStatus(Gmac *pGmac, gmacQueList_t queueIdx);
259 extern uint32_t GMAC_GetItMask(Gmac *pGmac, gmacQueList_t queueIdx);
260 extern uint32_t GMAC_GetTxStatus(Gmac *pGmac);
261 extern void GMAC_ClearTxStatus(Gmac *pGmac, uint32_t dwStatus);
262 extern uint32_t GMAC_GetRxStatus(Gmac *pGmac);
263 extern void GMAC_ClearRxStatus(Gmac *pGmac, uint32_t dwStatus);
264 extern void GMAC_ReceiveEnable(Gmac *pGmac, uint8_t bEnaDis);
265 extern void GMAC_TransmitEnable(Gmac *pGmac, uint8_t bEnaDis);
266 extern uint32_t GMAC_SetLocalLoopBack(Gmac *pGmac);
267 extern void GMAC_SetRxQueue(Gmac *pGmac, uint32_t dwAddr,
268  gmacQueList_t queueIdx);
269 extern uint32_t GMAC_GetRxQueue(Gmac *pGmac, gmacQueList_t queueIdx);
270 extern void GMAC_SetTxQueue(Gmac *pGmac, uint32_t dwAddr,
271  gmacQueList_t queueIdx);
272 extern uint32_t GMAC_GetTxQueue(Gmac *pGmac, gmacQueList_t queueIdx);
273 extern void GMAC_NetworkControl(Gmac *pGmac, uint32_t bmNCR);
274 extern uint32_t GMAC_GetNetworkControl(Gmac *pGmac);
275 extern void GMAC_SetAddress(Gmac *pGmac, uint8_t bIndex, uint8_t *pMacAddr);
276 extern void GMAC_SetAddress32(Gmac *pGmac, uint8_t bIndex, uint32_t dwMacT,
277  uint32_t dwMacB);
278 extern void GMAC_SetAddress64(Gmac *pGmac, uint8_t bIndex, uint64_t ddwMac);
279 extern void GMAC_Configure(Gmac *pGmac, uint32_t dwCfg);
280 extern void GMAC_SetDMAConfig(Gmac *pGmac, uint32_t dwDmaCfg,
281  gmacQueList_t queueIdx);
282 extern uint32_t GMAC_GetDMAConfig(Gmac *pGmac, gmacQueList_t queueIdx);
283 extern uint32_t GMAC_GetConfigure(Gmac *pGmac);
284 extern void GMAC_TransmissionStart(Gmac *pGmac);
285 extern void GMAC_TransmissionHalt(Gmac *pGmac);
286 extern void GMAC_EnableRGMII(Gmac *pGmac, uint32_t duplex, uint32_t speed);
287 
288 void GMAC_ClearScreener1Reg (Gmac *pGmac, gmacQueList_t queueIdx);
289 
290 void GMAC_WriteScreener1Reg(Gmac *pGmac, gmacQueList_t queueIdx,
291  uint32_t regVal);
292 
293 void GMAC_ClearScreener2Reg (Gmac *pGmac, gmacQueList_t queueIdx);
294 
295 void GMAC_WriteScreener2Reg (Gmac *pGmac, gmacQueList_t queueIdx,
296  uint32_t regVal);
297 
298 void GMAC_WriteEthTypeReg (Gmac *pGmac, gmacQueList_t queueIdx,
299  uint16_t etherType);
300 
301 void GMAC_WriteCompareReg(Gmac *pGmac, gmacQueList_t queueIdx, uint32_t c0Reg,
302  uint16_t c1Reg);
303 
304 void GMAC_EnableCbsQueA(Gmac *pGmac);
305 
306 void GMAC_DisableCbsQueA(Gmac *pGmac);
307 
308 void GMAC_EnableCbsQueB(Gmac *pGmac);
309 
310 void GMAC_DisableCbsQueB(Gmac *pGmac);
311 
312 void GMAC_ConfigIdleSlopeA(Gmac *pGmac, uint32_t idleSlopeA);
313 
314 void GMAC_ConfigIdleSlopeB(Gmac *pGmac, uint32_t idleSlopeB);
315 
316 void GMAC_SetTsuTmrIncReg(Gmac *pGmac, uint32_t nanoSec);
317 
318 uint16_t GMAC_GetPtpEvtMsgRxdMsbSec(Gmac *pGmac);
319 
320 uint32_t GMAC_GetPtpEvtMsgRxdLsbSec(Gmac *pGmac);
321 
322 uint32_t GMAC_GetPtpEvtMsgRxdNanoSec(Gmac *pGmac);
323 
324 void GMAC_SetTsuCompare(Gmac *pGmac, uint32_t seconds47, uint32_t seconds31,
325  uint32_t nanosec);
326 
327 void GMAC_SetTsuCompareNanoSec(Gmac *pGmac, uint32_t nanosec);
328 
329 void GMAC_SetTsuCompareSec31(Gmac *pGmac, uint32_t seconds31);
330 
331 void GMAC_SetTsuCompareSec47(Gmac *pGmac, uint16_t seconds47);
332 
333 uint32_t GMAC_GetRxEvtFrameSec(Gmac *pGmac);
334 
335 uint32_t GMAC_GetRxEvtFrameNsec(Gmac *pGmac);
336 
337 uint32_t GMAC_GetRxPeerEvtFrameSec(Gmac *pGmac);
338 
339 uint32_t GMAC_GetRxPeerEvtFrameNsec(Gmac *pGmac);
340 
341 uint32_t GMAC_GetTxEvtFrameSec(Gmac *pGmac);
342 
343 uint32_t GMAC_GetTxEvtFrameNsec(Gmac *pGmac);
344 
345 uint32_t GMAC_GetTxPeerEvtFrameSec(Gmac *pGmac);
346 
347 uint32_t GMAC_GetTxPeerEvtFrameNsec(Gmac *pGmac);
348 
349 #ifdef __cplusplus
350 }
351 #endif
352 
353 #endif // #ifndef GMAC_H
354 
uint16_t GMAC_PHYData(Gmac *pGmac)
Definition: gmac.c:83
uint32_t bPriorityDetected
Definition: gmac.h:186
void GMAC_DisableIt(Gmac *pGmac, uint32_t dwSources, gmacQueList_t queueIdx)
Definition: gmac.c:430
void GMAC_DisableMdio(Gmac *pGmac)
Enable MDI with PHY.
Definition: gmac.c:151
uint32_t addrDW
Definition: gmac.h:178
Definition: gmac.h:173
void GMAC_EnableMdio(Gmac *pGmac)
Enable MDI with PHY.
Definition: gmac.c:134
void GMAC_StatisticsWriteEnable(Gmac *pGmac, uint8_t bEnaDis)
Definition: gmac.c:504
Definition: component_gmac.h:55
void GMAC_ClearStatistics(Gmac *pGmac)
Definition: gmac.c:488
uint8_t GMAC_SetMdcClock(Gmac *pGmac, uint32_t mck)
Set MDC clock according to current board clock. Per 802.3, MDC should be less then 2....
Definition: gmac.c:99
void GMAC_TransmitEnable(Gmac *pGmac, uint8_t bEnaDis)
Definition: gmac.c:327
void GMAC_ReceiveEnable(Gmac *pGmac, uint8_t bEnaDis)
Definition: gmac.c:318
void GMAC_EnableAllQueueIt(Gmac *pGmac, uint32_t dwSources)
Definition: gmac.c:420
void GMAC_SetTxQueue(Gmac *pGmac, uint32_t dwAddr, gmacQueList_t queueIdx)
Definition: gmac.c:359
uint32_t bExhausted
Definition: gmac.h:215
void GMAC_SetLinkSpeed(Gmac *pGmac, uint8_t speed, uint8_t fullduplex)
Setup the GMAC for the link : speed 100M/10M and Full/Half duplex.
Definition: gmac.c:242
void GMAC_NetworkControl(Gmac *pGmac, uint32_t bmNCR)
Definition: gmac.c:382
uint32_t GMAC_GetItStatus(Gmac *pGmac, gmacQueList_t queueIdx)
Definition: gmac.c:441
uint32_t GMAC_GetTxQueue(Gmac *pGmac, gmacQueList_t queueIdx)
Definition: gmac.c:370
uint32_t bOwnership
Definition: gmac.h:178
void GMAC_IncreaseStatistics(Gmac *pGmac)
Definition: gmac.c:496
uint32_t bUnderrun
Definition: gmac.h:215
void GMAC_SetAddress64(Gmac *pGmac, uint8_t bIndex, uint64_t ddwMac)
Definition: gmac.c:478
Definition: gmac.h:183
Definition: gmac.h:212
uint32_t bLastBuffer
Definition: gmac.h:215
void GMAC_ClearRxStatus(Gmac *pGmac, uint32_t dwStatus)
Definition: gmac.c:309
union _GmacRxDescriptor::_GmacRxAddr addr
void GMAC_EnableMII(Gmac *pGmac)
Enable MII mode for GMAC, called once after auto negotiate.
Definition: gmac.c:168
uint32_t bBroadcastDetected
Definition: gmac.h:186
void GMAC_EnableRGMII(Gmac *pGmac, uint32_t duplex, uint32_t speed)
Enable RGMII mode for GMAC, called once after auto negotiate.
Definition: gmac.c:206
void GMAC_EnableIt(Gmac *pGmac, uint32_t dwSources, gmacQueList_t queueIdx)
Definition: gmac.c:399
uint32_t bVlanDetected
Definition: gmac.h:186
void GMAC_SetRxQueue(Gmac *pGmac, uint32_t dwAddr, gmacQueList_t queueIdx)
Definition: gmac.c:337
void GMAC_TransmissionStart(Gmac *pGmac)
Definition: gmac.c:554
void GMAC_DisableAllQueueIt(Gmac *pGmac, uint32_t dwSources)
Definition: gmac.c:410
uint32_t bMultiHashMatch
Definition: gmac.h:186
uint32_t GMAC_GetNetworkControl(Gmac *pGmac)
Definition: gmac.c:391
uint32_t bUniHashMatch
Definition: gmac.h:186
void GMAC_Configure(Gmac *pGmac, uint32_t dwCfg)
Definition: gmac.c:514
void GMAC_PHYMaintain(Gmac *pGmac, uint8_t bPhyAddr, uint8_t bRegAddr, uint8_t bRW, uint16_t wData)
Definition: gmac.c:62
uint8_t GMAC_IsIdle(Gmac *pGmac)
Definition: gmac.c:53
uint32_t GMAC_GetTxStatus(Gmac *pGmac)
Definition: gmac.c:285
uint32_t GMAC_GetDMAConfig(Gmac *pGmac, gmacQueList_t queueIdx)
Definition: gmac.c:534
struct _GmacTxDescriptor sGmacTxDescriptor
void GMAC_SetDMAConfig(Gmac *pGmac, uint32_t dwDmaCfg, gmacQueList_t queueIdx)
Definition: gmac.c:523
uint32_t vlanPriority
Definition: gmac.h:186
Definition: gmac.h:210
uint32_t GMAC_GetRxQueue(Gmac *pGmac, gmacQueList_t queueIdx)
Definition: gmac.c:348
uint32_t GMAC_GetItMask(Gmac *pGmac, gmacQueList_t queueIdx)
Definition: gmac.c:273
void GMAC_EnableGMII(Gmac *pGmac)
Enable GMII mode for GMAC, called once after auto negotiate.
Definition: gmac.c:185
void GMAC_SetAddress32(Gmac *pGmac, uint8_t bIndex, uint32_t dwMacT, uint32_t dwMacB)
Definition: gmac.c:468
uint32_t GMAC_GetConfigure(Gmac *pGmac)
Definition: gmac.c:545
Definition: gmac.h:172
void GMAC_SetAddress(Gmac *pGmac, uint8_t bIndex, uint8_t *pMacAddr)
Definition: gmac.c:453
uint32_t GMAC_GetRxStatus(Gmac *pGmac)
Definition: gmac.c:301
uint32_t bWrap
Definition: gmac.h:178
uint32_t GMAC_SetLocalLoopBack(Gmac *pGmac)
set local loop back
Definition: gmac.c:264
struct _GmacRxDescriptor sGmacRxDescriptor
void GMAC_ClearTxStatus(Gmac *pGmac, uint32_t dwStatus)
Definition: gmac.c:293
void GMAC_TransmissionHalt(Gmac *pGmac)
Definition: gmac.c:562