]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/lwIP_AVR32_UC3/NETWORK/ethernet.c
Start to remove unnecessary 'signed char *' casts from strings that are now just...
[freertos] / FreeRTOS / Demo / lwIP_AVR32_UC3 / NETWORK / ethernet.c
1 /*This file has been prepared for Doxygen automatic documentation generation.*/\r
2 /*! \file *********************************************************************\r
3  *\r
4  * \brief ethernet management for AVR32 UC3.\r
5  *\r
6  * - Compiler:           IAR EWAVR32 and GNU GCC for AVR32\r
7  * - Supported devices:  All AVR32 devices can be used.\r
8  * - AppNote:\r
9  *\r
10  * \author               Atmel Corporation: http://www.atmel.com \n\r
11  *                       Support and FAQ: http://support.atmel.no/\r
12  *\r
13  *****************************************************************************/\r
14 \r
15 /* Copyright (c) 2007, Atmel Corporation All rights reserved.\r
16  *\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
19  *\r
20  * 1. Redistributions of source code must retain the above copyright notice,\r
21  * this list of conditions and the following disclaimer.\r
22  *\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
26  *\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
29  *\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
40  */\r
41 \r
42 \r
43 \r
44 #include <string.h>\r
45 \r
46 #include "conf_eth.h"\r
47 \r
48 /* Scheduler include files. */\r
49 #include "FreeRTOS.h"\r
50 #include "task.h"\r
51 \r
52 /* Demo program include files. */\r
53 #include "partest.h"\r
54 #include "serial.h"\r
55 \r
56 \r
57 /* ethernet includes */\r
58 #include "ethernet.h"\r
59 #include "conf_eth.h"\r
60 #include "macb.h"\r
61 #include "gpio.h"\r
62 \r
63 #if (HTTP_USED == 1)\r
64   #include "BasicWEB.h"\r
65 #endif\r
66 \r
67 #if (TFTP_USED == 1)\r
68   #include "BasicTFTP.h"\r
69 #endif\r
70 \r
71 #if (SMTP_USED == 1)\r
72   #include "BasicSMTP.h"\r
73 #endif\r
74 \r
75 /* lwIP includes */\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
82 \r
83 \r
84 //_____ M A C R O S ________________________________________________________\r
85 \r
86 \r
87 //_____ D E F I N I T I O N S ______________________________________________\r
88 \r
89 /* global variable containing MAC Config (hw addr, IP, GW, ...) */\r
90 struct netif MACB_if;\r
91 \r
92 //_____ D E C L A R A T I O N S ____________________________________________\r
93 \r
94 /* Initialisation required by lwIP. */\r
95 static void prvlwIPInit( void );\r
96 \r
97 /* Initialisation of ethernet interfaces by reading config file */\r
98 static void prvEthernetConfigureInterface(void * param);\r
99 \r
100 \r
101 /*! \brief create ethernet task, for ethernet management.\r
102  *\r
103  *  \param uxPriority   Input. priority for the task, it should be low\r
104  *\r
105  */\r
106 void vStartEthernetTask( unsigned portBASE_TYPE uxPriority )\r
107 {\r
108 static const gpio_map_t MACB_GPIO_MAP =\r
109 {\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
120 };\r
121 \r
122   // Assign GPIO to MACB\r
123   gpio_enable_module(MACB_GPIO_MAP, sizeof(MACB_GPIO_MAP) / sizeof(MACB_GPIO_MAP[0]));\r
124 \r
125   /* Setup lwIP. */\r
126   prvlwIPInit();\r
127 \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
131 #endif\r
132 \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
136 #endif\r
137 \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
141 #endif\r
142 \r
143 }\r
144 \r
145 \r
146 /*!\r
147  *  \brief start lwIP layer.\r
148  */\r
149 static void prvlwIPInit( void )\r
150 {\r
151         /* Initialize lwIP and its interface layer. */\r
152         #if LWIP_STATS\r
153                 stats_init();\r
154         #endif\r
155 \r
156         sys_init();\r
157         mem_init();\r
158         memp_init();\r
159         pbuf_init();\r
160         netif_init();\r
161         \r
162         /* once TCP stack has been initalized, set hw and IP parameters, initialize MACB too */\r
163         tcpip_init( prvEthernetConfigureInterface, NULL );\r
164 }\r
165 \r
166 /*!\r
167  *  \brief set ethernet config \r
168  */\r
169 static void prvEthernetConfigureInterface(void * param)\r
170 {\r
171 struct ip_addr xIpAddr, xNetMask, xGateway;\r
172 extern err_t ethernetif_init( struct netif *netif );\r
173 portCHAR MacAddress[6];\r
174 \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
182    \r
183    /* pass the MAC address to MACB module */\r
184    vMACBSetMACAddress( MacAddress );\r
185    \r
186    /* set MAC hardware address length to be used by lwIP */\r
187    MACB_if.hwaddr_len = 6;\r
188    \r
189    /* set MAC hardware address to be used by lwIP */\r
190    memcpy( MACB_if.hwaddr, MacAddress, MACB_if.hwaddr_len );\r
191    \r
192    /* Default ip addr. */\r
193    IP4_ADDR( &xIpAddr,ETHERNET_CONF_IPADDR0,ETHERNET_CONF_IPADDR1,ETHERNET_CONF_IPADDR2,ETHERNET_CONF_IPADDR3 );\r
194    \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
197    \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
200    \r
201    /* add data to netif */\r
202    netif_add( &MACB_if, &xIpAddr, &xNetMask, &xGateway, NULL, ethernetif_init, tcpip_input );\r
203    \r
204    /* make it the default interface */\r
205    netif_set_default( &MACB_if );\r
206    \r
207    /* bring it up */\r
208    netif_set_up( &MACB_if );\r
209 }\r
210 \r
211 \r
212 \r