]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M7_SAMV71_Xplained/libchip_samv7/include/gmacd.h
Update version number ready for V8.2.1 release.
[freertos] / FreeRTOS / Demo / CORTEX_M7_SAMV71_Xplained / libchip_samv7 / include / gmacd.h
1 /* ----------------------------------------------------------------------------\r
2  *         SAM Software Package License \r
3  * ----------------------------------------------------------------------------\r
4  * Copyright (c) 2012, Atmel Corporation\r
5  *\r
6  * All rights reserved.\r
7  *\r
8  * Redistribution and use in source and binary forms, with or without\r
9  * modification, are permitted provided that the following conditions are met:\r
10  *\r
11  * - Redistributions of source code must retain the above copyright notice,\r
12  * this list of conditions and the disclaimer below.\r
13  *\r
14  * Atmel's name may not be used to endorse or promote products derived from\r
15  * this software without specific prior written permission.\r
16  *\r
17  * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
18  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
19  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
20  * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
21  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
22  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
23  * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
24  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
25  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
26  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
27  * ----------------------------------------------------------------------------\r
28  */\r
29 \r
30 /** \file */\r
31 \r
32 /** \addtogroup gmacd_module\r
33  * @{\r
34  * Implement GMAC data transfer and PHY management functions.\r
35  *\r
36  * \section Usage\r
37  * -# Implement GMAC interrupt handler, which must invoke GMACD_Handler()\r
38  *    to handle GMAC interrupt events.\r
39  * -# Implement sGmacd instance in application.\r
40  * -# Initialize the instance with GMACD_Init() and GMACD_InitTransfer(),\r
41  *    so that GMAC data can be transmitted/received.\r
42  * -# Some management callbacks can be set by GMACD_SetRxCallback()\r
43  *    and GMACD_SetTxWakeupCallback().\r
44  * -# Send ethernet packets using GMACD_Send(), GMACD_TxLoad() is used\r
45  *    to check the free space in TX queue.\r
46  * -# Check and obtain received ethernet packets via GMACD_Poll().\r
47  *\r
48  * \sa \ref gmacb_module, \ref gmac_module\r
49  *\r
50  * Related files:\n\r
51  * \ref gmacd.c\n\r
52  * \ref gmacd.h.\n\r
53  *\r
54  *  \defgroup gmacd_defines GMAC Driver Defines\r
55  *  \defgroup gmacd_types GMAC Driver Types\r
56  *  \defgroup gmacd_functions GMAC Driver Functions\r
57  */\r
58 /**@}*/\r
59 \r
60 #ifndef _GMACD_H_\r
61 #define _GMACD_H_\r
62 \r
63 /*---------------------------------------------------------------------------\r
64  *         Headers\r
65  *---------------------------------------------------------------------------*/\r
66 \r
67 #include "chip.h"\r
68 \r
69 \r
70 /*---------------------------------------------------------------------------\r
71  *         Definitions\r
72  *---------------------------------------------------------------------------*/\r
73 /** \addtogroup gmacd_defines\r
74     @{*/\r
75 \r
76 \r
77 /** \addtogroup gmacd_rc GMACD Return Codes\r
78         @{*/\r
79 #define GMACD_OK                0   /**< Operation OK */\r
80 #define GMACD_TX_BUSY           1   /**< TX in progress */\r
81 #define GMACD_RX_NULL           1   /**< No data received */\r
82 /** Buffer size not enough */\r
83 #define GMACD_SIZE_TOO_SMALL    2\r
84 /** Parameter error, TX packet invalid or RX size too small */\r
85 #define GMACD_PARAM             3\r
86 /** Transter is not initialized */\r
87 #define GMACD_NOT_INITIALIZED   4\r
88 /**     @}*/\r
89 \r
90 /** @}*/\r
91 \r
92 /*---------------------------------------------------------------------------\r
93  *         Types\r
94  *---------------------------------------------------------------------------*/\r
95 /** \addtogroup gmacd_types\r
96     @{*/\r
97 \r
98 /** RX callback */\r
99 typedef void (*fGmacdTransferCallback)(uint32_t status);\r
100 /** Wakeup callback */\r
101 typedef void (*fGmacdWakeupCallback)(void);\r
102 \r
103 /**\r
104  * GMAC scatter-gather entry.\r
105  */\r
106 typedef struct _GmacSG {\r
107     uint32_t size;\r
108     void *pBuffer;\r
109 } sGmacSG;\r
110 \r
111 /**\r
112  * GMAC scatter-gather list.\r
113  */\r
114 typedef struct _GmacSGList {\r
115     uint32_t len;\r
116     sGmacSG  *sg;\r
117 } sGmacSGList;\r
118 \r
119 /**\r
120  * GMAC Queue driver.\r
121  */\r
122 typedef struct _GmacQueueDriver {\r
123     uint8_t *pTxBuffer;\r
124     /** Pointer to allocated RX buffer */\r
125     uint8_t *pRxBuffer;\r
126 \r
127     /** Pointer to Rx TDs (must be 8-byte aligned) */\r
128     sGmacRxDescriptor *pRxD;\r
129     /** Pointer to Tx TDs (must be 8-byte aligned) */\r
130     sGmacTxDescriptor *pTxD;\r
131 \r
132     /** Optional callback to be invoked once a frame has been received */\r
133     fGmacdTransferCallback fRxCb;\r
134     /** Optional callback to be invoked once several TD have been released */\r
135     fGmacdWakeupCallback fWakupCb;\r
136     /** Optional callback list to be invoked once TD has been processed */\r
137     fGmacdTransferCallback *fTxCbList;\r
138 \r
139       /** RX TD list size */\r
140     uint16_t wRxListSize;\r
141     /** RX index for current processing TD */\r
142     uint16_t wRxI;\r
143 \r
144     /** TX TD list size */\r
145     uint16_t wTxListSize;\r
146     /** Circular buffer head pointer by upper layer (buffer to be sent) */\r
147     uint16_t wTxHead;\r
148     /** Circular buffer tail pointer incremented by handlers (buffer sent) */\r
149     uint16_t wTxTail;\r
150 \r
151     /** Number of free TD before wakeup callback is invoked */\r
152     uint8_t  bWakeupThreshold;\r
153     \r
154 } sGmacQd;\r
155 \r
156 /**\r
157  * GMAC driver struct.\r
158  */\r
159 typedef struct _GmacDriver {\r
160 \r
161     /** Pointer to HW register base */\r
162     Gmac        *pHw;\r
163     /** HW ID */\r
164     uint8_t bId;\r
165     /** Base Queue list params **/\r
166     sGmacQd     queueList[NUM_GMAC_QUEUES];    \r
167 } sGmacd;\r
168 \r
169 /** @}*/\r
170 \r
171 /** \addtogroup gmacd_functions\r
172     @{*/\r
173 \r
174 /*---------------------------------------------------------------------------\r
175  *         GMAC Exported functions\r
176  *---------------------------------------------------------------------------*/\r
177 \r
178 extern void GMACD_Handler(sGmacd *pGmacd , gmacQueList_t queIdx);\r
179 \r
180 extern void GMACD_Init(sGmacd *pGmacd,\r
181                        Gmac *pHw,\r
182                        uint8_t bID, \r
183                        uint8_t enableCAF, \r
184                        uint8_t enableNBC );\r
185 \r
186 extern uint8_t GMACD_InitTransfer( sGmacd *pGmacd,\r
187                                    uint8_t *pRxBuffer, \r
188                                    sGmacRxDescriptor *pRxD,\r
189                                    uint16_t wRxSize,\r
190                                    uint8_t *pTxBuffer, \r
191                                    sGmacTxDescriptor *pTxD, \r
192                                    fGmacdTransferCallback *pTxCb,\r
193                                    uint16_t wTxSize,\r
194                                    gmacQueList_t queIdx);\r
195 \r
196 extern void GMACD_Reset(sGmacd *pGmacd);\r
197 \r
198 extern uint8_t GMACD_SendSG(sGmacd *pGmacd,\r
199                             const sGmacSGList *sgl,\r
200                             fGmacdTransferCallback fTxCb, \r
201                             gmacQueList_t queIdx);\r
202 \r
203 extern uint8_t GMACD_Send(sGmacd *pGmacd,\r
204                          void *pBuffer,\r
205                          uint32_t size,\r
206                          fGmacdTransferCallback fTxCb, \r
207                          gmacQueList_t queIdx );\r
208 \r
209 extern  uint32_t GMACD_TxLoad(sGmacd *pGmacd, gmacQueList_t queIdx);\r
210 \r
211 extern  uint8_t GMACD_Poll(sGmacd * pGmacd, \r
212                           uint8_t *pFrame, \r
213                           uint32_t frameSize, \r
214                           uint32_t *pRcvSize, \r
215                           gmacQueList_t queIdx);\r
216 \r
217 extern void GMACD_SetRxCallback(sGmacd * pGmacd, fGmacdTransferCallback fRxCb, gmacQueList_t queIdx);\r
218 \r
219 extern uint8_t GMACD_SetTxWakeupCallback(sGmacd * pGmacd,\r
220                                          fGmacdWakeupCallback fWakeup,\r
221                                          uint8_t bThreshold, \r
222                                          gmacQueList_t queIdx);\r
223 \r
224 /** @}*/\r
225 \r
226 #endif // #ifndef _GMACD_H_\r