RTEMS 6.1-rc5
Loading...
Searching...
No Matches
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
93extern "C" {
94#endif
95
96/*----------------------------------------------------------------------------
97 * Defines
98 *----------------------------------------------------------------------------*/
102#define NUM_GMAC_QUEUES 3
104
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 */
165typedef enum {
166 GMAC_QUE_0 = 0,
167 GMAC_QUE_1 = 1,
168 GMAC_QUE_2 = 2
169} gmacQueList_t;
170
172typedef struct _GmacRxDescriptor {
174 uint32_t val;
176 uint32_t bOwnership: 1,
179 bWrap: 1,
180 addrDW: 30;
181 } bm;
184 uint32_t val;
186 uint32_t len: 12,
190 bSof: 1,
191 bEof: 1,
192 bCFI: 1,
196 typeIDMatchOrCksumResult: 2,
197 bTypeIDMatchFoundOrCksumSNAPState: 1,
198 specAddrMatchRegister: 2,
199 bSpecAddrMatchFound: 1,
200 reserved: 1,
205 } bm;
206 } status;
208
210typedef struct _GmacTxDescriptor {
211 uint32_t addr;
213 uint32_t val;
215 uint32_t len: 11,
216 reserved: 4,
219 reserved1: 10,
223 bWrap: 1,
224 bUsed: 1;
226 } bm;
227 } status;
229
232//-----------------------------------------------------------------------------
233// PHY Exported functions
234//-----------------------------------------------------------------------------
235extern uint8_t GMAC_IsIdle(Gmac *pGmac);
236extern void GMAC_PHYMaintain(Gmac *pGmac,
237 uint8_t bPhyAddr,
238 uint8_t bRegAddr,
239 uint8_t bRW,
240 uint16_t wData);
241extern uint16_t GMAC_PHYData(Gmac *pGmac);
242extern void GMAC_ClearStatistics(Gmac *pGmac);
243extern void GMAC_IncreaseStatistics(Gmac *pGmac);
244extern void GMAC_StatisticsWriteEnable(Gmac *pGmac, uint8_t bEnaDis);
245extern uint8_t GMAC_SetMdcClock(Gmac *pGmac, uint32_t mck);
246extern void GMAC_EnableMdio(Gmac *pGmac);
247extern void GMAC_DisableMdio(Gmac *pGmac);
248extern void GMAC_EnableMII(Gmac *pGmac);
249extern void GMAC_EnableRMII(Gmac *pGmac);
250extern void GMAC_EnableGMII(Gmac *pGmac);
251extern void GMAC_SetLinkSpeed(Gmac *pGmac, uint8_t speed, uint8_t fullduplex);
252extern void GMAC_EnableIt(Gmac *pGmac, uint32_t dwSources,
253 gmacQueList_t queueIdx);
254extern void GMAC_EnableAllQueueIt(Gmac *pGmac, uint32_t dwSources);
255extern void GMAC_DisableIt(Gmac *pGmac, uint32_t dwSources,
256 gmacQueList_t queueIdx);
257extern void GMAC_DisableAllQueueIt(Gmac *pGmac, uint32_t dwSources);
258extern uint32_t GMAC_GetItStatus(Gmac *pGmac, gmacQueList_t queueIdx);
259extern uint32_t GMAC_GetItMask(Gmac *pGmac, gmacQueList_t queueIdx);
260extern uint32_t GMAC_GetTxStatus(Gmac *pGmac);
261extern void GMAC_ClearTxStatus(Gmac *pGmac, uint32_t dwStatus);
262extern uint32_t GMAC_GetRxStatus(Gmac *pGmac);
263extern void GMAC_ClearRxStatus(Gmac *pGmac, uint32_t dwStatus);
264extern void GMAC_ReceiveEnable(Gmac *pGmac, uint8_t bEnaDis);
265extern void GMAC_TransmitEnable(Gmac *pGmac, uint8_t bEnaDis);
266extern uint32_t GMAC_SetLocalLoopBack(Gmac *pGmac);
267extern void GMAC_SetRxQueue(Gmac *pGmac, uint32_t dwAddr,
268 gmacQueList_t queueIdx);
269extern uint32_t GMAC_GetRxQueue(Gmac *pGmac, gmacQueList_t queueIdx);
270extern void GMAC_SetTxQueue(Gmac *pGmac, uint32_t dwAddr,
271 gmacQueList_t queueIdx);
272extern uint32_t GMAC_GetTxQueue(Gmac *pGmac, gmacQueList_t queueIdx);
273extern void GMAC_NetworkControl(Gmac *pGmac, uint32_t bmNCR);
274extern uint32_t GMAC_GetNetworkControl(Gmac *pGmac);
275extern void GMAC_SetAddress(Gmac *pGmac, uint8_t bIndex, uint8_t *pMacAddr);
276extern void GMAC_SetAddress32(Gmac *pGmac, uint8_t bIndex, uint32_t dwMacT,
277 uint32_t dwMacB);
278extern void GMAC_SetAddress64(Gmac *pGmac, uint8_t bIndex, uint64_t ddwMac);
279extern void GMAC_Configure(Gmac *pGmac, uint32_t dwCfg);
280extern void GMAC_SetDMAConfig(Gmac *pGmac, uint32_t dwDmaCfg,
281 gmacQueList_t queueIdx);
282extern uint32_t GMAC_GetDMAConfig(Gmac *pGmac, gmacQueList_t queueIdx);
283extern uint32_t GMAC_GetConfigure(Gmac *pGmac);
284extern void GMAC_TransmissionStart(Gmac *pGmac);
285extern void GMAC_TransmissionHalt(Gmac *pGmac);
286extern void GMAC_EnableRGMII(Gmac *pGmac, uint32_t duplex, uint32_t speed);
287
288void GMAC_ClearScreener1Reg (Gmac *pGmac, gmacQueList_t queueIdx);
289
290void GMAC_WriteScreener1Reg(Gmac *pGmac, gmacQueList_t queueIdx,
291 uint32_t regVal);
292
293void GMAC_ClearScreener2Reg (Gmac *pGmac, gmacQueList_t queueIdx);
294
295void GMAC_WriteScreener2Reg (Gmac *pGmac, gmacQueList_t queueIdx,
296 uint32_t regVal);
297
298void GMAC_WriteEthTypeReg (Gmac *pGmac, gmacQueList_t queueIdx,
299 uint16_t etherType);
300
301void GMAC_WriteCompareReg(Gmac *pGmac, gmacQueList_t queueIdx, uint32_t c0Reg,
302 uint16_t c1Reg);
303
304void GMAC_EnableCbsQueA(Gmac *pGmac);
305
306void GMAC_DisableCbsQueA(Gmac *pGmac);
307
308void GMAC_EnableCbsQueB(Gmac *pGmac);
309
310void GMAC_DisableCbsQueB(Gmac *pGmac);
311
312void GMAC_ConfigIdleSlopeA(Gmac *pGmac, uint32_t idleSlopeA);
313
314void GMAC_ConfigIdleSlopeB(Gmac *pGmac, uint32_t idleSlopeB);
315
316void GMAC_SetTsuTmrIncReg(Gmac *pGmac, uint32_t nanoSec);
317
318uint16_t GMAC_GetPtpEvtMsgRxdMsbSec(Gmac *pGmac);
319
320uint32_t GMAC_GetPtpEvtMsgRxdLsbSec(Gmac *pGmac);
321
322uint32_t GMAC_GetPtpEvtMsgRxdNanoSec(Gmac *pGmac);
323
324void GMAC_SetTsuCompare(Gmac *pGmac, uint32_t seconds47, uint32_t seconds31,
325 uint32_t nanosec);
326
327void GMAC_SetTsuCompareNanoSec(Gmac *pGmac, uint32_t nanosec);
328
329void GMAC_SetTsuCompareSec31(Gmac *pGmac, uint32_t seconds31);
330
331void GMAC_SetTsuCompareSec47(Gmac *pGmac, uint16_t seconds47);
332
333uint32_t GMAC_GetRxEvtFrameSec(Gmac *pGmac);
334
335uint32_t GMAC_GetRxEvtFrameNsec(Gmac *pGmac);
336
337uint32_t GMAC_GetRxPeerEvtFrameSec(Gmac *pGmac);
338
339uint32_t GMAC_GetRxPeerEvtFrameNsec(Gmac *pGmac);
340
341uint32_t GMAC_GetTxEvtFrameSec(Gmac *pGmac);
342
343uint32_t GMAC_GetTxEvtFrameNsec(Gmac *pGmac);
344
345uint32_t GMAC_GetTxPeerEvtFrameSec(Gmac *pGmac);
346
347uint32_t GMAC_GetTxPeerEvtFrameNsec(Gmac *pGmac);
348
349#ifdef __cplusplus
350}
351#endif
352
353#endif // #ifndef GMAC_H
354
uint32_t bPriorityDetected
Definition: gmac.h:194
void GMAC_SetAddress32(Gmac *pGmac, uint8_t bIndex, uint32_t dwMacT, uint32_t dwMacB)
Definition: gmac.c:468
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
uint32_t bUnderrun
Definition: gmac.h:221
uint32_t bUniHashMatch
Definition: gmac.h:201
void GMAC_EnableMII(Gmac *pGmac)
Enable MII mode for GMAC, called once after auto negotiate.
Definition: gmac.c:168
uint32_t GMAC_GetItMask(Gmac *pGmac, gmacQueList_t queueIdx)
Definition: gmac.c:273
void GMAC_ReceiveEnable(Gmac *pGmac, uint8_t bEnaDis)
Definition: gmac.c:318
uint32_t GMAC_SetLocalLoopBack(Gmac *pGmac)
set local loop back
Definition: gmac.c:264
void GMAC_ClearRxStatus(Gmac *pGmac, uint32_t dwStatus)
Definition: gmac.c:309
uint32_t bLastBuffer
Definition: gmac.h:217
void GMAC_TransmitEnable(Gmac *pGmac, uint8_t bEnaDis)
Definition: gmac.c:327
void GMAC_NetworkControl(Gmac *pGmac, uint32_t bmNCR)
Definition: gmac.c:382
void GMAC_SetAddress64(Gmac *pGmac, uint8_t bIndex, uint64_t ddwMac)
Definition: gmac.c:478
void GMAC_SetAddress(Gmac *pGmac, uint8_t bIndex, uint8_t *pMacAddr)
Definition: gmac.c:453
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_SetTxQueue(Gmac *pGmac, uint32_t dwAddr, gmacQueList_t queueIdx)
Definition: gmac.c:359
void GMAC_DisableMdio(Gmac *pGmac)
Enable MDI with PHY.
Definition: gmac.c:151
void GMAC_ClearTxStatus(Gmac *pGmac, uint32_t dwStatus)
Definition: gmac.c:293
uint32_t GMAC_GetTxQueue(Gmac *pGmac, gmacQueList_t queueIdx)
Definition: gmac.c:370
void GMAC_Configure(Gmac *pGmac, uint32_t dwCfg)
Definition: gmac.c:514
void GMAC_DisableIt(Gmac *pGmac, uint32_t dwSources, gmacQueList_t queueIdx)
Definition: gmac.c:430
uint32_t addrDW
Definition: gmac.h:180
void GMAC_PHYMaintain(Gmac *pGmac, uint8_t bPhyAddr, uint8_t bRegAddr, uint8_t bRW, uint16_t wData)
Definition: gmac.c:62
uint32_t bBroadcastDetected
Definition: gmac.h:203
uint32_t GMAC_GetRxQueue(Gmac *pGmac, gmacQueList_t queueIdx)
Definition: gmac.c:348
void GMAC_EnableIt(Gmac *pGmac, uint32_t dwSources, gmacQueList_t queueIdx)
Definition: gmac.c:399
void GMAC_EnableGMII(Gmac *pGmac)
Enable GMII mode for GMAC, called once after auto negotiate.
Definition: gmac.c:185
uint32_t bExhausted
Definition: gmac.h:220
uint32_t bVlanDetected
Definition: gmac.h:195
void GMAC_TransmissionStart(Gmac *pGmac)
Definition: gmac.c:554
uint32_t vlanPriority
Definition: gmac.h:193
void GMAC_ClearStatistics(Gmac *pGmac)
Definition: gmac.c:488
void GMAC_EnableAllQueueIt(Gmac *pGmac, uint32_t dwSources)
Definition: gmac.c:420
uint32_t GMAC_GetItStatus(Gmac *pGmac, gmacQueList_t queueIdx)
Definition: gmac.c:441
uint8_t GMAC_IsIdle(Gmac *pGmac)
Definition: gmac.c:53
uint32_t GMAC_GetNetworkControl(Gmac *pGmac)
Definition: gmac.c:391
void GMAC_SetRxQueue(Gmac *pGmac, uint32_t dwAddr, gmacQueList_t queueIdx)
Definition: gmac.c:337
void GMAC_SetDMAConfig(Gmac *pGmac, uint32_t dwDmaCfg, gmacQueList_t queueIdx)
Definition: gmac.c:523
uint32_t bMultiHashMatch
Definition: gmac.h:202
uint32_t bOwnership
Definition: gmac.h:178
void GMAC_EnableMdio(Gmac *pGmac)
Enable MDI with PHY.
Definition: gmac.c:134
void GMAC_IncreaseStatistics(Gmac *pGmac)
Definition: gmac.c:496
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
uint16_t GMAC_PHYData(Gmac *pGmac)
Definition: gmac.c:83
uint32_t GMAC_GetRxStatus(Gmac *pGmac)
Definition: gmac.c:301
uint32_t GMAC_GetDMAConfig(Gmac *pGmac, gmacQueList_t queueIdx)
Definition: gmac.c:534
union _GmacRxDescriptor::_GmacRxAddr addr
void GMAC_DisableAllQueueIt(Gmac *pGmac, uint32_t dwSources)
Definition: gmac.c:410
uint32_t bWrap
Definition: gmac.h:179
void GMAC_TransmissionHalt(Gmac *pGmac)
Definition: gmac.c:562
uint32_t GMAC_GetConfigure(Gmac *pGmac)
Definition: gmac.c:545
void GMAC_StatisticsWriteEnable(Gmac *pGmac, uint8_t bEnaDis)
Definition: gmac.c:504
uint32_t GMAC_GetTxStatus(Gmac *pGmac)
Definition: gmac.c:285
struct _GmacRxDescriptor sGmacRxDescriptor
struct _GmacTxDescriptor sGmacTxDescriptor
Definition: component_gmac.h:55
Definition: gmac.h:172
Definition: gmac.h:210
Definition: gmac.h:173
Definition: gmac.h:183
Definition: gmac.h:212