1 /*This file has been prepared for Doxygen automatic documentation generation.*/
\r
2 /*! \file *********************************************************************
\r
4 * \brief ethernet management for AVR32 UC3.
\r
6 * - Compiler: IAR EWAVR32 and GNU GCC for AVR32
\r
7 * - Supported devices: All AVR32 devices can be used.
\r
10 * \author Atmel Corporation: http://www.atmel.com \n
\r
11 * Support and FAQ: http://support.atmel.no/
\r
13 *****************************************************************************/
\r
15 /* Copyright (c) 2007, Atmel Corporation All rights reserved.
\r
17 * Redistribution and use in source and binary forms, with or without
\r
18 * modification, are permitted provided that the following conditions are met:
\r
20 * 1. Redistributions of source code must retain the above copyright notice,
\r
21 * this list of conditions and the following disclaimer.
\r
23 * 2. Redistributions in binary form must reproduce the above copyright notice,
\r
24 * this list of conditions and the following disclaimer in the documentation
\r
25 * and/or other materials provided with the distribution.
\r
27 * 3. The name of ATMEL may not be used to endorse or promote products derived
\r
28 * from this software without specific prior written permission.
\r
30 * THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR IMPLIED
\r
31 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
\r
32 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND
\r
33 * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,
\r
34 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
\r
35 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
\r
36 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
\r
37 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
\r
38 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
\r
39 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\r
46 #include "conf_eth.h"
\r
48 /* Scheduler include files. */
\r
49 #include "FreeRTOS.h"
\r
52 /* Demo program include files. */
\r
53 #include "partest.h"
\r
57 /* ethernet includes */
\r
58 #include "ethernet.h"
\r
59 #include "conf_eth.h"
\r
63 #if (HTTP_USED == 1)
\r
64 #include "BasicWEB.h"
\r
67 #if (TFTP_USED == 1)
\r
68 #include "BasicTFTP.h"
\r
71 #if (SMTP_USED == 1)
\r
72 #include "BasicSMTP.h"
\r
76 #include "lwip/sys.h"
\r
77 #include "lwip/api.h"
\r
78 #include "lwip/tcpip.h"
\r
79 #include "lwip/memp.h"
\r
80 #include "lwip/stats.h"
\r
81 #include "netif/loopif.h"
\r
84 //_____ M A C R O S ________________________________________________________
\r
87 //_____ D E F I N I T I O N S ______________________________________________
\r
89 /* global variable containing MAC Config (hw addr, IP, GW, ...) */
\r
90 struct netif MACB_if;
\r
92 //_____ D E C L A R A T I O N S ____________________________________________
\r
94 /* Initialisation required by lwIP. */
\r
95 static void prvlwIPInit( void );
\r
97 /* Initialisation of ethernet interfaces by reading config file */
\r
98 static void prvEthernetConfigureInterface(void * param);
\r
101 /*! \brief create ethernet task, for ethernet management.
\r
103 * \param uxPriority Input. priority for the task, it should be low
\r
106 void vStartEthernetTask( unsigned portBASE_TYPE uxPriority )
\r
108 static const gpio_map_t MACB_GPIO_MAP =
\r
110 {AVR32_MACB_MDC_0_PIN, AVR32_MACB_MDC_0_FUNCTION },
\r
111 {AVR32_MACB_MDIO_0_PIN, AVR32_MACB_MDIO_0_FUNCTION },
\r
112 {AVR32_MACB_RXD_0_PIN, AVR32_MACB_RXD_0_FUNCTION },
\r
113 {AVR32_MACB_TXD_0_PIN, AVR32_MACB_TXD_0_FUNCTION },
\r
114 {AVR32_MACB_RXD_1_PIN, AVR32_MACB_RXD_1_FUNCTION },
\r
115 {AVR32_MACB_TXD_1_PIN, AVR32_MACB_TXD_1_FUNCTION },
\r
116 {AVR32_MACB_TX_EN_0_PIN, AVR32_MACB_TX_EN_0_FUNCTION },
\r
117 {AVR32_MACB_RX_ER_0_PIN, AVR32_MACB_RX_ER_0_FUNCTION },
\r
118 {AVR32_MACB_RX_DV_0_PIN, AVR32_MACB_RX_DV_0_FUNCTION },
\r
119 {AVR32_MACB_TX_CLK_0_PIN, AVR32_MACB_TX_CLK_0_FUNCTION}
\r
122 // Assign GPIO to MACB
\r
123 gpio_enable_module(MACB_GPIO_MAP, sizeof(MACB_GPIO_MAP) / sizeof(MACB_GPIO_MAP[0]));
\r
128 #if (HTTP_USED == 1)
\r
129 /* Create the WEB server task. This uses the lwIP RTOS abstraction layer.*/
\r
130 sys_thread_new( vBasicWEBServer, ( void * ) NULL, ethWEBSERVER_PRIORITY );
\r
133 #if (TFTP_USED == 1)
\r
134 /* Create the TFTP server task. This uses the lwIP RTOS abstraction layer.*/
\r
135 sys_thread_new( vBasicTFTPServer, ( void * ) NULL, ethTFTPSERVER_PRIORITY );
\r
138 #if (SMTP_USED == 1)
\r
139 /* Create the SMTP Client task. This uses the lwIP RTOS abstraction layer.*/
\r
140 sys_thread_new( vBasicSMTPClient, ( void * ) NULL, ethSMTPCLIENT_PRIORITY );
\r
147 * \brief start lwIP layer.
\r
149 static void prvlwIPInit( void )
\r
151 /* Initialize lwIP and its interface layer. */
\r
162 /* once TCP stack has been initalized, set hw and IP parameters, initialize MACB too */
\r
163 tcpip_init( prvEthernetConfigureInterface, NULL );
\r
167 * \brief set ethernet config
\r
169 static void prvEthernetConfigureInterface(void * param)
\r
171 struct ip_addr xIpAddr, xNetMask, xGateway;
\r
172 extern err_t ethernetif_init( struct netif *netif );
\r
173 portCHAR MacAddress[6];
\r
175 /* Default MAC addr. */
\r
176 MacAddress[0] = ETHERNET_CONF_ETHADDR0;
\r
177 MacAddress[1] = ETHERNET_CONF_ETHADDR1;
\r
178 MacAddress[2] = ETHERNET_CONF_ETHADDR2;
\r
179 MacAddress[3] = ETHERNET_CONF_ETHADDR3;
\r
180 MacAddress[4] = ETHERNET_CONF_ETHADDR4;
\r
181 MacAddress[5] = ETHERNET_CONF_ETHADDR5;
\r
183 /* pass the MAC address to MACB module */
\r
184 vMACBSetMACAddress( MacAddress );
\r
186 /* set MAC hardware address length to be used by lwIP */
\r
187 MACB_if.hwaddr_len = 6;
\r
189 /* set MAC hardware address to be used by lwIP */
\r
190 memcpy( MACB_if.hwaddr, MacAddress, MACB_if.hwaddr_len );
\r
192 /* Default ip addr. */
\r
193 IP4_ADDR( &xIpAddr,ETHERNET_CONF_IPADDR0,ETHERNET_CONF_IPADDR1,ETHERNET_CONF_IPADDR2,ETHERNET_CONF_IPADDR3 );
\r
195 /* Default Subnet mask. */
\r
196 IP4_ADDR( &xNetMask,ETHERNET_CONF_NET_MASK0,ETHERNET_CONF_NET_MASK1,ETHERNET_CONF_NET_MASK2,ETHERNET_CONF_NET_MASK3 );
\r
198 /* Default Gw addr. */
\r
199 IP4_ADDR( &xGateway,ETHERNET_CONF_GATEWAY_ADDR0,ETHERNET_CONF_GATEWAY_ADDR1,ETHERNET_CONF_GATEWAY_ADDR2,ETHERNET_CONF_GATEWAY_ADDR3 );
\r
201 /* add data to netif */
\r
202 netif_add( &MACB_if, &xIpAddr, &xNetMask, &xGateway, NULL, ethernetif_init, tcpip_input );
\r
204 /* make it the default interface */
\r
205 netif_set_default( &MACB_if );
\r
208 netif_set_up( &MACB_if );
\r