]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_AT91SAM3U256_IAR/AT91Lib/peripherals/emac/emac.h
Add FreeRTOS-Plus directory.
[freertos] / FreeRTOS / Demo / CORTEX_AT91SAM3U256_IAR / AT91Lib / peripherals / emac / emac.h
1 /* ----------------------------------------------------------------------------\r
2  *         ATMEL Microcontroller Software Support \r
3  * ----------------------------------------------------------------------------\r
4  * Copyright (c) 2008, 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 // peripherals/emac/emac.h\r
31 \r
32 #ifndef EMAC_H\r
33 #define EMAC_H\r
34 \r
35 //-----------------------------------------------------------------------------\r
36 /// \dir\r
37 /// !Purpose\r
38 ///\r
39 ///     Definition of methods and structures for using EMAC\r
40 ///     \r
41 /// !Usage\r
42 ///\r
43 /// -# Initialize EMAC with EMAC_Init with MAC address.\r
44 /// -# Then the caller application need to initialize the PHY driver before further calling EMAC\r
45 ///      driver.\r
46 /// -# Get a packet from network\r
47 ///      -# Interrupt mode: EMAC_Set_RxCb to register a function to process the frame packet\r
48 ///      -# Polling mode: EMAC_Poll for a data packet from network \r
49 /// -# Send a packet to network with EMAC_Send.\r
50 ///\r
51 /// Please refer to the list of functions in the #Overview# tab of this unit\r
52 /// for more detailed information.\r
53 //-----------------------------------------------------------------------------\r
54 \r
55 \r
56 //-----------------------------------------------------------------------------\r
57 //         Headers\r
58 //-----------------------------------------------------------------------------\r
59 \r
60 //-----------------------------------------------------------------------------\r
61 //         Definitions\r
62 //-----------------------------------------------------------------------------\r
63 /// Number of buffer for RX, be carreful: MUST be 2^n\r
64 #define RX_BUFFERS  16\r
65 /// Number of buffer for TX, be carreful: MUST be 2^n\r
66 #define TX_BUFFERS   8\r
67 \r
68 /// Buffer Size\r
69 #define EMAC_RX_UNITSIZE            128     /// Fixed size for RX buffer\r
70 #define EMAC_TX_UNITSIZE            1518    /// Size for ETH frame length\r
71 \r
72 // The MAC can support frame lengths up to 1536 bytes.\r
73 #define EMAC_FRAME_LENTGH_MAX       1536\r
74 \r
75 \r
76 //-----------------------------------------------------------------------------\r
77 //         Types\r
78 //-----------------------------------------------------------------------------\r
79 \r
80 //-----------------------------------------------------------------------------\r
81 /// Describes the statistics of the EMAC.\r
82 //-----------------------------------------------------------------------------\r
83 typedef struct _EmacStats {\r
84 \r
85     // TX errors\r
86     unsigned int tx_packets;    /// Total Number of packets sent\r
87     unsigned int tx_comp;       /// Packet complete\r
88     unsigned int tx_errors;     /// TX errors ( Retry Limit Exceed )\r
89     unsigned int collisions;    /// Collision\r
90     unsigned int tx_exausts;    /// Buffer exhausted\r
91     unsigned int tx_underruns;  /// Under Run, not able to read from memory\r
92     // RX errors\r
93     unsigned int rx_packets;    /// Total Number of packets RX\r
94     unsigned int rx_eof;        /// No EOF error\r
95     unsigned int rx_ovrs;       /// Over Run, not able to store to memory\r
96     unsigned int rx_bnas;       /// Buffer is not available\r
97 \r
98 } EmacStats, *PEmacStats;\r
99 \r
100 //-----------------------------------------------------------------------------\r
101 //         PHY Exported functions\r
102 //-----------------------------------------------------------------------------\r
103 extern unsigned char EMAC_SetMdcClock( unsigned int mck );\r
104 \r
105 extern void EMAC_EnableMdio( void );\r
106 \r
107 extern void EMAC_DisableMdio( void );\r
108 \r
109 extern void EMAC_EnableMII( void );\r
110 \r
111 extern void EMAC_EnableRMII( void );\r
112 \r
113 extern unsigned char EMAC_ReadPhy(unsigned char PhyAddress,\r
114                                   unsigned char Address,\r
115                                   unsigned int *pValue,\r
116                                   unsigned int retry);\r
117 \r
118 extern unsigned char EMAC_WritePhy(unsigned char PhyAddress,\r
119                                    unsigned char Address,\r
120                                    unsigned int Value,\r
121                                    unsigned int retry);\r
122 \r
123 extern void EMAC_SetLinkSpeed(unsigned char speed,\r
124                               unsigned char fullduplex);\r
125 \r
126 //-----------------------------------------------------------------------------\r
127 //         EMAC Exported functions\r
128 //-----------------------------------------------------------------------------\r
129 /// Callback used by send function\r
130 typedef void (*EMAC_TxCallback)(unsigned int status);\r
131 typedef void (*EMAC_RxCallback)(unsigned int status);\r
132 typedef void (*EMAC_WakeupCallback)(void);\r
133 \r
134 extern void EMAC_Init( unsigned char id, const unsigned char *pMacAddress,\r
135                 unsigned char enableCAF, unsigned char enableNBC );\r
136 #define EMAC_CAF_DISABLE  0\r
137 #define EMAC_CAF_ENABLE   1\r
138 #define EMAC_NBC_DISABLE  0\r
139 #define EMAC_NBC_ENABLE   1\r
140 \r
141 extern void EMAC_Handler(void);\r
142 \r
143 extern unsigned char EMAC_Send(void *pBuffer, \r
144                                unsigned int size, \r
145                                EMAC_TxCallback fEMAC_TxCallback);\r
146 /// Return for EMAC_Send function\r
147 #define EMAC_TX_OK                     0\r
148 #define EMAC_TX_BUFFER_BUSY            1\r
149 #define EMAC_TX_INVALID_PACKET         2\r
150 \r
151 \r
152 extern unsigned char EMAC_Poll(unsigned char *pFrame,\r
153                                unsigned int frameSize,\r
154                                unsigned int *pRcvSize);\r
155 /// Return for EMAC_Poll function\r
156 #define EMAC_RX_OK                   0\r
157 #define EMAC_RX_NO_DATA              1\r
158 #define EMAC_RX_FRAME_SIZE_TOO_SMALL 2\r
159 \r
160 extern void EMAC_GetStatistics(EmacStats *pStats, unsigned char reset);\r
161 \r
162 #endif // #ifndef EMAC_H\r
163 \r