1 /* ----------------------------------------------------------------------------
\r
2 * ATMEL Microcontroller Software Support
\r
3 * ----------------------------------------------------------------------------
\r
4 * Copyright (c) 2008, Atmel Corporation
\r
6 * All rights reserved.
\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
11 * - Redistributions of source code must retain the above copyright notice,
\r
12 * this list of conditions and the disclaimer below.
\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
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
30 // peripherals/emac/emac.h
\r
35 //-----------------------------------------------------------------------------
\r
39 /// Definition of methods and structures for using EMAC
\r
43 /// -# Initialize EMAC with EMAC_Init.
\r
44 /// -# Setup EMAC with EMAC_SetupTx, EMAC_SetupRx, EMAC_SetupMacAddress
\r
45 /// and EMAC_SetupStack.
\r
46 /// -# Drive the EMAC status machine by EMAC_Task.
\r
47 /// -# EMAC_GetStatus give EMAC status machine current status
\r
48 /// -# Send a packet to network with EMAC_SendPacket.
\r
49 /// -# Get a packet from network with EMAC_GetPacket.
\r
51 //-----------------------------------------------------------------------------
\r
54 //-----------------------------------------------------------------------------
\r
56 //-----------------------------------------------------------------------------
\r
58 //-----------------------------------------------------------------------------
\r
60 //-----------------------------------------------------------------------------
\r
61 /// Number of buffer for RX, be carreful: MUST be 2^n
\r
62 #define RX_BUFFERS 16
\r
63 /// Number of buffer for TX, be carreful: MUST be 2^n
\r
64 #define TX_BUFFERS 8
\r
67 #define EMAC_RX_UNITSIZE 128 /// Fixed size for RX buffer
\r
68 #define EMAC_TX_UNITSIZE 1518 /// Size for ETH frame length
\r
70 // The MAC can support frame lengths up to 1536 bytes.
\r
71 #define EMAC_FRAME_LENTGH_MAX 1536
\r
74 //-----------------------------------------------------------------------------
\r
76 //-----------------------------------------------------------------------------
\r
78 //-----------------------------------------------------------------------------
\r
79 /// Describes the statistics of the EMAC.
\r
80 //-----------------------------------------------------------------------------
\r
81 typedef struct _EmacStats {
\r
84 unsigned int tx_packets; /// Total Number of packets sent
\r
85 unsigned int tx_comp; /// Packet complete
\r
86 unsigned int tx_errors; /// TX errors ( Retry Limit Exceed )
\r
87 unsigned int collisions; /// Collision
\r
88 unsigned int tx_exausts; /// Buffer exhausted
\r
89 unsigned int tx_underruns; /// Under Run, not able to read from memory
\r
91 unsigned int rx_packets; /// Total Number of packets RX
\r
92 unsigned int rx_eof; /// No EOF error
\r
93 unsigned int rx_ovrs; /// Over Run, not able to store to memory
\r
94 unsigned int rx_bnas; /// Buffer is not available
\r
96 } EmacStats, *PEmacStats;
\r
98 //-----------------------------------------------------------------------------
\r
99 // PHY Exported functions
\r
100 //-----------------------------------------------------------------------------
\r
101 extern unsigned char EMAC_SetMdcClock( unsigned int mck );
\r
103 extern void EMAC_EnableMdio( void );
\r
105 extern void EMAC_DisableMdio( void );
\r
107 extern void EMAC_EnableMII( void );
\r
109 extern void EMAC_EnableRMII( void );
\r
111 extern unsigned char EMAC_ReadPhy(unsigned char PhyAddress,
\r
112 unsigned char Address,
\r
113 unsigned int *pValue,
\r
114 unsigned int retry);
\r
116 extern unsigned char EMAC_WritePhy(unsigned char PhyAddress,
\r
117 unsigned char Address,
\r
118 unsigned int Value,
\r
119 unsigned int retry);
\r
121 extern void EMAC_SetLinkSpeed(unsigned char speed,
\r
122 unsigned char fullduplex);
\r
124 //-----------------------------------------------------------------------------
\r
125 // EMAC Exported functions
\r
126 //-----------------------------------------------------------------------------
\r
127 /// Callback used by send function
\r
128 typedef void (*EMAC_TxCallback)(unsigned int status);
\r
129 typedef void (*EMAC_RxCallback)(unsigned int status);
\r
130 typedef void (*EMAC_WakeupCallback)(void);
\r
132 extern void EMAC_Init( unsigned char id, const unsigned char *pMacAddress,
\r
133 unsigned char enableCAF, unsigned char enableNBC );
\r
134 #define EMAC_CAF_DISABLE 0
\r
135 #define EMAC_CAF_ENABLE 1
\r
136 #define EMAC_NBC_DISABLE 0
\r
137 #define EMAC_NBC_ENABLE 1
\r
139 extern void EMAC_Handler(void);
\r
141 extern unsigned char EMAC_Send(void *pBuffer,
\r
142 unsigned int size,
\r
143 EMAC_TxCallback fEMAC_TxCallback);
\r
144 /// Return for EMAC_Send function
\r
145 #define EMAC_TX_OK 0
\r
146 #define EMAC_TX_BUFFER_BUSY 1
\r
147 #define EMAC_TX_INVALID_PACKET 2
\r
150 extern unsigned char EMAC_Poll(unsigned char *pFrame,
\r
151 unsigned int frameSize,
\r
152 unsigned int *pRcvSize);
\r
153 /// Return for EMAC_Poll function
\r
154 #define EMAC_RX_OK 0
\r
155 #define EMAC_RX_NO_DATA 1
\r
156 #define EMAC_RX_FRAME_SIZE_TOO_SMALL 2
\r
158 extern void EMAC_GetStatistics(EmacStats *pStats, unsigned char reset);
\r
160 #endif // #ifndef EMAC_H
\r