]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/gmacd.h
b43d6636c0034da9add37ef0b9e1b4609d164aab
[freertos] / FreeRTOS / Demo / CORTEX_A5_SAMA5D4x_EK_IAR / AtmelFiles / libboard_sama5d4x-ek / 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 <board.h>\r
68 \r
69 \r
70 /*---------------------------------------------------------------------------\r
71  *         Definitions\r
72  *---------------------------------------------------------------------------*/\r
73 /** \addtogroup gmacd_defines\r
74     @{*/\r
75 \r
76 /** \addtogroup gmacd_buf_size GMACD Default Buffer Size\r
77         @{*/\r
78 #define GMAC_RX_UNITSIZE            128     /**< Fixed size for RX buffer  */\r
79 #define GMAC_TX_UNITSIZE            1518    /**< Size for ETH frame length */\r
80 /**     @}*/\r
81 \r
82 /** \addtogroup gmacd_rc GMACD Return Codes\r
83         @{*/\r
84 #define GMACD_OK                0   /**< Operation OK */\r
85 #define GMACD_TX_BUSY           1   /**< TX in progress */\r
86 #define GMACD_RX_NULL           1   /**< No data received */\r
87 /** Buffer size not enough */\r
88 #define GMACD_SIZE_TOO_SMALL    2\r
89 /** Parameter error, TX packet invalid or RX size too small */\r
90 #define GMACD_PARAM             3\r
91 /** Transter is not initialized */\r
92 #define GMACD_NOT_INITIALIZED   4\r
93 /**     @}*/\r
94 \r
95 /** @}*/\r
96 \r
97 /*---------------------------------------------------------------------------\r
98  *         Types\r
99  *---------------------------------------------------------------------------*/\r
100 /** \addtogroup gmacd_types\r
101     @{*/\r
102 \r
103 /** RX callback */\r
104 typedef void (*fGmacdTransferCallback)(uint32_t status);\r
105 /** Wakeup callback */\r
106 typedef void (*fGmacdWakeupCallback)(void);\r
107 \r
108 /**\r
109  * GMAC driver struct.\r
110  */\r
111 typedef struct _GmacDriver {\r
112 \r
113     /** Pointer to HW register base */\r
114     Gmac *pHw;\r
115 \r
116     uint8_t *pTxBuffer;\r
117     /** Pointer to allocated RX buffer */\r
118     uint8_t *pRxBuffer;\r
119 \r
120     /** Pointer to Rx TDs (must be 8-byte aligned) */\r
121     sGmacRxDescriptor *pRxD;\r
122     /** Pointer to Tx TDs (must be 8-byte aligned) */\r
123     sGmacTxDescriptor *pTxD;\r
124 \r
125     /** Optional callback to be invoked once a frame has been received */\r
126     fGmacdTransferCallback fRxCb;\r
127     /** Optional callback to be invoked once several TD have been released */\r
128     fGmacdWakeupCallback fWakupCb;\r
129     /** Optional callback list to be invoked once TD has been processed */\r
130     fGmacdTransferCallback *fTxCbList;\r
131 \r
132       /** RX TD list size */\r
133     uint16_t wRxListSize;\r
134     /** RX index for current processing TD */\r
135     uint16_t wRxI;\r
136 \r
137     /** TX TD list size */\r
138     uint16_t wTxListSize;\r
139     /** Circular buffer head pointer by upper layer (buffer to be sent) */\r
140     uint16_t wTxHead;\r
141     /** Circular buffer tail pointer incremented by handlers (buffer sent) */\r
142     uint16_t wTxTail;\r
143 \r
144     /** Number of free TD before wakeup callback is invoked */\r
145     uint8_t  bWakeupThreshold;\r
146     /** HW ID */\r
147     uint8_t bId;\r
148 } sGmacd;\r
149 \r
150 /** @}*/\r
151 \r
152 /** \addtogroup gmacd_functions\r
153     @{*/\r
154 \r
155 /*---------------------------------------------------------------------------\r
156  *         GMAC Exported functions\r
157  *---------------------------------------------------------------------------*/\r
158 \r
159 extern void GMACD_Handler(sGmacd *pGmacd );\r
160 \r
161 extern void GMACD_Init(sGmacd *pGmacd,\r
162                        Gmac *pHw,\r
163                        uint8_t bID, \r
164                        uint8_t enableCAF, \r
165                        uint8_t enableNBC );\r
166 \r
167 extern uint8_t GMACD_InitTransfer( sGmacd *pGmacd,\r
168                                    uint8_t *pRxBuffer, \r
169                                    sGmacRxDescriptor *pRxD,\r
170                                    uint16_t wRxSize,\r
171                                    uint8_t *pTxBuffer, \r
172                                    sGmacTxDescriptor *pTxD, \r
173                                    fGmacdTransferCallback *pTxCb,\r
174                                    uint16_t wTxSize);\r
175 \r
176 extern void GMACD_Reset(sGmacd *pGmacd);\r
177 \r
178 extern uint8_t GMACD_Send(sGmacd *pGmacd,\r
179                          void *pBuffer,\r
180                          uint32_t size,\r
181                          fGmacdTransferCallback fTxCb );\r
182 \r
183 extern  uint32_t GMACD_TxLoad(sGmacd *pGmacd);\r
184 \r
185 extern  uint8_t GMACD_Poll(sGmacd * pGmacd, \r
186                           uint8_t *pFrame, \r
187                           uint32_t frameSize, \r
188                           uint32_t *pRcvSize);\r
189 \r
190 extern void GMACD_SetRxCallback(sGmacd * pGmacd, fGmacdTransferCallback fRxCb);\r
191 \r
192 extern uint8_t GMACD_SetTxWakeupCallback(sGmacd * pGmacd,\r
193                                          fGmacdWakeupCallback fWakeup,\r
194                                          uint8_t bThreshold);\r
195 \r
196 /** @}*/\r
197 \r
198 #endif // #ifndef _GMACD_H_\r