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 with MAC address.
\r
44 /// -# Then the caller application need to initialize the PHY driver before further calling EMAC
\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
51 /// Please refer to the list of functions in the #Overview# tab of this unit
\r
52 /// for more detailed information.
\r
53 //-----------------------------------------------------------------------------
\r
56 //-----------------------------------------------------------------------------
\r
58 //-----------------------------------------------------------------------------
\r
60 //-----------------------------------------------------------------------------
\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
69 #define EMAC_RX_UNITSIZE 128 /// Fixed size for RX buffer
\r
70 #define EMAC_TX_UNITSIZE 1518 /// Size for ETH frame length
\r
72 // The MAC can support frame lengths up to 1536 bytes.
\r
73 #define EMAC_FRAME_LENTGH_MAX 1536
\r
76 //-----------------------------------------------------------------------------
\r
78 //-----------------------------------------------------------------------------
\r
80 //-----------------------------------------------------------------------------
\r
81 /// Describes the statistics of the EMAC.
\r
82 //-----------------------------------------------------------------------------
\r
83 typedef struct _EmacStats {
\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
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
98 } EmacStats, *PEmacStats;
\r
100 //-----------------------------------------------------------------------------
\r
101 // PHY Exported functions
\r
102 //-----------------------------------------------------------------------------
\r
103 extern unsigned char EMAC_SetMdcClock( unsigned int mck );
\r
105 extern void EMAC_EnableMdio( void );
\r
107 extern void EMAC_DisableMdio( void );
\r
109 extern void EMAC_EnableMII( void );
\r
111 extern void EMAC_EnableRMII( void );
\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
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
123 extern void EMAC_SetLinkSpeed(unsigned char speed,
\r
124 unsigned char fullduplex);
\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
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
141 extern void EMAC_Handler(void);
\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
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
160 extern void EMAC_GetStatistics(EmacStats *pStats, unsigned char reset);
\r
162 #endif // #ifndef EMAC_H
\r