]> git.sur5r.net Git - freertos/blob - Demo/lwIP_AVR32_UC3/NETWORK/ethernet.c
Add AVR32 port and demo files.
[freertos] / Demo / lwIP_AVR32_UC3 / NETWORK / ethernet.c
1 /* This source file is part of the ATMEL FREERTOS-0.9.0 Release */\r
2 \r
3 /*This file has been prepared for Doxygen automatic documentation generation.*/\r
4 /*! \file *********************************************************************\r
5  *\r
6  * \brief ethernet management for AVR32 UC3.\r
7  *\r
8  * - Compiler:           IAR EWAVR32 and GNU GCC for AVR32\r
9  * - Supported devices:  All AVR32 devices can be used.\r
10  * - AppNote:\r
11  *\r
12  * \author               Atmel Corporation: http://www.atmel.com \n\r
13  *                       Support email: avr32@atmel.com\r
14  *\r
15  *****************************************************************************/\r
16 \r
17 /* Copyright (c) 2007, Atmel Corporation All rights reserved.\r
18  *\r
19  * Redistribution and use in source and binary forms, with or without\r
20  * modification, are permitted provided that the following conditions are met:\r
21  *\r
22  * 1. Redistributions of source code must retain the above copyright notice,\r
23  * this list of conditions and the following disclaimer.\r
24  *\r
25  * 2. Redistributions in binary form must reproduce the above copyright notice,\r
26  * this list of conditions and the following disclaimer in the documentation\r
27  * and/or other materials provided with the distribution.\r
28  *\r
29  * 3. The name of ATMEL may not be used to endorse or promote products derived\r
30  * from this software without specific prior written permission.\r
31  *\r
32  * THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR IMPLIED\r
33  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
34  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND\r
35  * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,\r
36  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r
37  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r
38  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\r
39  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
40  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\r
41  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
42  */\r
43 \r
44 \r
45 \r
46 #include <string.h>\r
47 \r
48 #include "conf_eth.h"\r
49 \r
50 /* Scheduler include files. */\r
51 #include "FreeRTOS.h"\r
52 #include "task.h"\r
53 \r
54 /* Demo program include files. */\r
55 #include "partest.h"\r
56 #include "serial.h"\r
57 \r
58 \r
59 /* ethernet includes */\r
60 #include "ethernet.h"\r
61 #include "AVR32_EMAC.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 EMAC_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   /* Setup lwIP. */\r
109   prvlwIPInit();\r
110 \r
111 #if (HTTP_USED == 1)\r
112   /* Create the WEB server task.  This uses the lwIP RTOS abstraction layer.*/\r
113   sys_thread_new( vBasicWEBServer, ( void * ) NULL, ethWEBSERVER_PRIORITY );\r
114 #endif\r
115 \r
116 #if (TFTP_USED == 1)\r
117   /* Create the TFTP server task.  This uses the lwIP RTOS abstraction layer.*/\r
118   sys_thread_new( vBasicTFTPServer, ( void * ) NULL, ethTFTPSERVER_PRIORITY );\r
119 #endif\r
120 \r
121 #if (SMTP_USED == 1)\r
122   /* Create the SMTP Host task.  This uses the lwIP RTOS abstraction layer.*/\r
123   sys_thread_new( vBasicSMTPHost, ( void * ) NULL, ethSMTPHOST_PRIORITY );\r
124 #endif\r
125 \r
126 }\r
127 \r
128 \r
129 /*!\r
130  *  \brief start lwIP layer.\r
131  */\r
132 static void prvlwIPInit( void )\r
133 {\r
134         /* Initialize lwIP and its interface layer. */\r
135         #if LWIP_STATS\r
136                 stats_init();\r
137         #endif\r
138 \r
139         sys_init();\r
140         mem_init();\r
141         memp_init();\r
142         pbuf_init();\r
143         netif_init();\r
144         \r
145         /* once TCP stack has been initalized, set hw and IP parameters, initialize MACB too */\r
146         tcpip_init( prvEthernetConfigureInterface, NULL );\r
147 }\r
148 \r
149 /*!\r
150  *  \brief set ethernet config \r
151  */\r
152 static void prvEthernetConfigureInterface(void * param)\r
153 {\r
154 struct ip_addr xIpAddr, xNetMask, xGateway;\r
155 extern err_t ethernetif_init( struct netif *netif );\r
156 portCHAR MacAddress[6];\r
157 \r
158    /* Default MAC addr. */\r
159    MacAddress[0] = emacETHADDR0;\r
160    MacAddress[1] = emacETHADDR1;\r
161    MacAddress[2] = emacETHADDR2;\r
162    MacAddress[3] = emacETHADDR3;\r
163    MacAddress[4] = emacETHADDR4;\r
164    MacAddress[5] = emacETHADDR5;\r
165    \r
166    /* pass the EMAC address to AVR32_EMAC module */\r
167    vEMACSetMACAddress( MacAddress );\r
168    \r
169    /* set MAC hardware address length to be used by lwIP */\r
170    EMAC_if.hwaddr_len = 6;\r
171    \r
172    /* set MAC hardware address to be used by lwIP */\r
173    memcpy( EMAC_if.hwaddr, MacAddress, EMAC_if.hwaddr_len );\r
174    \r
175    /* Default ip addr. */\r
176    IP4_ADDR( &xIpAddr,emacIPADDR0,emacIPADDR1,emacIPADDR2,emacIPADDR3 );\r
177    \r
178    /* Default Subnet mask. */\r
179    IP4_ADDR( &xNetMask,emacNET_MASK0,emacNET_MASK1,emacNET_MASK2,emacNET_MASK3 );\r
180    \r
181    /* Default Gw addr. */\r
182    IP4_ADDR( &xGateway,emacGATEWAY_ADDR0,emacGATEWAY_ADDR1,emacGATEWAY_ADDR2,emacGATEWAY_ADDR3 );\r
183    \r
184    /* add data to netif */\r
185    netif_add( &EMAC_if, &xIpAddr, &xNetMask, &xGateway, NULL, ethernetif_init, tcpip_input );\r
186    \r
187    /* make it the default interface */\r
188    netif_set_default( &EMAC_if );\r
189    \r
190    /* bring it up */\r
191    netif_set_up( &EMAC_if );\r
192 }\r
193 \r
194 \r
195 \r