RTEMS 6.1-rc1
gmacd.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
60#ifndef _GMACD_H_
61#define _GMACD_H_
62
63/*---------------------------------------------------------------------------
64 * Headers
65 *---------------------------------------------------------------------------*/
66
67#include "chip.h"
68
69
70/*---------------------------------------------------------------------------
71 * Definitions
72 *---------------------------------------------------------------------------*/
79#define GMACD_OK 0
80#define GMACD_TX_BUSY 1
81#define GMACD_RX_NULL 1
83#define GMACD_SIZE_TOO_SMALL 2
85#define GMACD_PARAM 3
87#define GMACD_NOT_INITIALIZED 4
92/* Should be a power of 2.
93 - Buffer Length to store the timestamps of 1588 event messages
94*/
95#define EFRS_BUFFER_LEN (1u)
96
97/*---------------------------------------------------------------------------
98* Types
99*---------------------------------------------------------------------------*/
103typedef enum ptpMsgType_t {
104 SYNC_MSG_TYPE = 0,
105 DELAY_REQ_MSG_TYPE = 1,
106 PDELAY_REQ_TYPE = 2,
107 PDELAY_RESP_TYPE = 3,
108 FOLLOW_UP_MSG_TYPE = 8,
109 DELAY_RESP_MSG_TYPE = 9
110} ptpMsgType;
111
112
113
115typedef void (*fGmacdTransferCallback)(uint32_t status);
117typedef void (*fGmacdWakeupCallback)(void);
119typedef void (*fGmacdTxPtpEvtCallBack) (ptpMsgType msg, uint32_t sec, \
120 uint32_t nanosec, uint16_t seqId);
121
125typedef struct _GmacSG {
126 uint32_t size;
127 void *pBuffer;
129
133typedef struct _GmacSGList {
134 uint32_t len;
135 sGmacSG *sg;
137
141typedef struct _GmacQueueDriver {
142 uint8_t *pTxBuffer;
144 uint8_t *pRxBuffer;
145
150
157
160
162 uint16_t wRxListSize;
164 uint16_t wRxI;
165
167 uint16_t wTxListSize;
169 uint16_t wTxHead;
171 uint16_t wTxTail;
172
175
178 uint16_t wRxBufferSize;
179
181
185typedef struct _GmacDriver {
186
190 uint8_t bId;
192 sGmacQd queueList[NUM_GMAC_QUEUES];
194
198typedef struct _GmacInit {
199 uint32_t bIsGem: 1;
200 uint32_t reserved: 31;
201
202 uint8_t bDmaBurstLength;
203
205 uint8_t *pRxBuffer;
211 uint16_t wRxBufferSize;
212 uint16_t wRxSize;
217 uint8_t *pTxBuffer;
224 uint16_t wTxSize;
225
233/*---------------------------------------------------------------------------
234 * GMAC Exported functions
235 *---------------------------------------------------------------------------*/
236
237extern void GMACD_Handler(sGmacd *pGmacd , gmacQueList_t queIdx);
238
239extern void GMACD_Init(sGmacd *pGmacd,
240 Gmac *pHw,
241 uint8_t bID,
242 uint8_t enableCAF,
243 uint8_t enableNBC);
244
245extern uint8_t GMACD_InitTransfer(sGmacd *pGmacd,
246 const sGmacInit *pInit, gmacQueList_t queIdx);
247
248extern void GMACD_Reset(sGmacd *pGmacd);
249
250extern uint8_t GMACD_SendSG(sGmacd *pGmacd,
251 const sGmacSGList *sgl,
253 gmacQueList_t queIdx);
254
255extern uint8_t GMACD_Send(sGmacd *pGmacd,
256 void *pBuffer,
257 uint32_t size,
259 gmacQueList_t queIdx);
260
261extern uint32_t GMACD_TxLoad(sGmacd *pGmacd, gmacQueList_t queIdx);
262
263extern uint8_t GMACD_Poll(sGmacd *pGmacd,
264 uint8_t *pFrame,
265 uint32_t frameSize,
266 uint32_t *pRcvSize,
267 gmacQueList_t queIdx);
268
270 fRxCb, gmacQueList_t queIdx);
271
272extern uint8_t GMACD_SetTxWakeupCallback(sGmacd *pGmacd,
273 fGmacdWakeupCallback fWakeup,
274 uint8_t bThreshold,
275 gmacQueList_t queIdx);
276
277extern void GMACD_TxPtpEvtMsgCBRegister (sGmacd *pGmacd,
278 fGmacdTxPtpEvtCallBack pTxPtpEvtCb,
279 gmacQueList_t queIdx);
280
283#endif // #ifndef _GMACD_H_
uint8_t GMACD_SetTxWakeupCallback(sGmacd *pGmacd, fGmacdWakeupCallback fWakeup, uint8_t bThreshold, gmacQueList_t queIdx)
Definition: gmacd.c:1038
uint32_t GMACD_TxLoad(sGmacd *pGmacd, gmacQueList_t queIdx)
Definition: gmacd.c:868
uint8_t GMACD_Send(sGmacd *pGmacd, void *pBuffer, uint32_t size, fGmacdTransferCallback fTxCb, gmacQueList_t queIdx)
Send a packet with GMAC. If the packet size is larger than transfer buffer size error returned....
Definition: gmacd.c:815
void GMACD_SetRxCallback(sGmacd *pGmacd, fGmacdTransferCallback fRxCb, gmacQueList_t queIdx)
Registers pRxCb callback. Callback will be invoked after the next received frame. When GMAC_Poll() re...
Definition: gmacd.c:1006
uint8_t GMACD_InitTransfer(sGmacd *pGmacd, const sGmacInit *pInit, gmacQueList_t queIdx)
Definition: gmacd.c:551
uint8_t GMACD_SendSG(sGmacd *pGmacd, const sGmacSGList *sgl, fGmacdTransferCallback fTxCb, gmacQueList_t queIdx)
Send a frame split into buffers. If the frame size is larger than transfer buffer size error returned...
Definition: gmacd.c:705
void GMACD_Handler(sGmacd *pGmacd, gmacQueList_t queIdx)
GMAC Interrupt handler.
Definition: gmacd.c:336
void GMACD_Init(sGmacd *pGmacd, Gmac *pHw, uint8_t bID, uint8_t enableCAF, uint8_t enableNBC)
Initialize the GMAC with the Gmac controller address.
Definition: gmacd.c:486
uint8_t GMACD_Poll(sGmacd *pGmacd, uint8_t *pFrame, uint32_t frameSize, uint32_t *pRcvSize, gmacQueList_t queIdx)
Receive a packet with GMAC. If not enough buffer for the packet, the remaining data is lost but right...
Definition: gmacd.c:885
void GMACD_Reset(sGmacd *pGmacd)
Definition: gmacd.c:679
void(* fGmacdWakeupCallback)(void)
Definition: gmacd.h:117
struct _GmacSGList sGmacSGList
struct _GmacDriver sGmacd
void(* fGmacdTransferCallback)(uint32_t status)
Definition: gmacd.h:115
struct _GmacSG sGmacSG
struct _GmacQueueDriver sGmacQd
void(* fGmacdTxPtpEvtCallBack)(ptpMsgType msg, uint32_t sec, uint32_t nanosec, uint16_t seqId)
Definition: gmacd.h:119
struct _GmacInit sGmacInit
Definition: component_gmac.h:55
Definition: gmacd.h:185
sGmacQd queueList[NUM_GMAC_QUEUES]
Definition: gmacd.h:192
uint8_t bId
Definition: gmacd.h:190
Gmac * pHw
Definition: gmacd.h:188
Definition: gmacd.h:198
uint16_t wTxBufferSize
Definition: gmacd.h:222
sGmacRxDescriptor * pRxD
Definition: gmacd.h:208
uint16_t wRxBufferSize
Definition: gmacd.h:211
uint16_t wTxSize
Definition: gmacd.h:224
sGmacTxDescriptor * pTxD
Definition: gmacd.h:220
uint8_t * pRxBuffer
Definition: gmacd.h:205
uint16_t wRxSize
Definition: gmacd.h:212
uint8_t * pTxBuffer
Definition: gmacd.h:217
Definition: gmacd.h:141
sGmacTxDescriptor * pTxD
Definition: gmacd.h:149
fGmacdTransferCallback fRxCb
Definition: gmacd.h:152
uint16_t wTxTail
Definition: gmacd.h:171
fGmacdTxPtpEvtCallBack fTxPtpEvtCb
Definition: gmacd.h:159
uint8_t * pRxBuffer
Definition: gmacd.h:144
uint16_t wTxListSize
Definition: gmacd.h:167
uint16_t wTxBufferSize
Definition: gmacd.h:177
uint16_t wRxI
Definition: gmacd.h:164
sGmacRxDescriptor * pRxD
Definition: gmacd.h:147
fGmacdTransferCallback * fTxCbList
Definition: gmacd.h:156
uint16_t wRxListSize
Definition: gmacd.h:162
uint16_t wTxHead
Definition: gmacd.h:169
fGmacdWakeupCallback fWakupCb
Definition: gmacd.h:154
uint8_t bWakeupThreshold
Definition: gmacd.h:174
Definition: gmac.h:172
Definition: gmacd.h:133
Definition: gmacd.h:125
Definition: gmac.h:210
Definition: b1553brm.c:94
unsigned size
Definition: tte.h:1