]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/ARM7_AT91SAM7X256_Eclipse/RTOSDemo/webserver/emac_atmel.h
7551a36485e5c443aef29fd5ac7d2a1f5ab0c267
[freertos] / FreeRTOS / Demo / ARM7_AT91SAM7X256_Eclipse / RTOSDemo / webserver / emac_atmel.h
1 //*----------------------------------------------------------------------------\r
2 //*         ATMEL Microcontroller Software Support  -  ROUSSET  -\r
3 //*----------------------------------------------------------------------------\r
4 //* The software is delivered "AS IS" without warranty or condition of any\r
5 //* kind, either express, implied or statutory. This includes without\r
6 //* limitation any warranty or condition with respect to merchantability or\r
7 //* fitness for any particular purpose, or against the infringements of\r
8 //* intellectual property rights of others.\r
9 //*----------------------------------------------------------------------------\r
10 //* File Name           : Emac.h\r
11 //* Object              : Emac header file\r
12 //* Creation            : Hi   11/18/2002\r
13 //*\r
14 //*----------------------------------------------------------------------------\r
15 #ifndef AT91C_EMAC_H\r
16 #define AT91C_EMAC_H\r
17 \r
18 \r
19 //* Allows to display all IP header in the main.c\r
20 //* If not defined, only ICMP packets are displayed\r
21 #define AT91C_DISPLAY_ALL_IPHEADER              0\r
22 \r
23 #define NB_RX_BUFFERS                   25                      //* Number of receive buffers\r
24 #define ETH_RX_BUFFER_SIZE              128         //*\r
25 \r
26 #define NB_TX_BUFFERS                   2               //* Number of Transmit buffers\r
27 #define ETH_TX_BUFFER_SIZE              UIP_BUFSIZE       //*\r
28 \r
29 #define AT91C_NO_IPPACKET               0\r
30 #define AT91C_IPPACKET          1\r
31 \r
32 #define ARP_REQUEST                             0x0001\r
33 #define ARP_REPLY                               0x0002\r
34 #define PROT_ARP                                0x0806\r
35 #define PROT_IP                                 0x0800\r
36 #define PROT_ICMP                               0x01\r
37 #define ICMP_ECHO_REQUEST               0x08\r
38 #define ICMP_ECHO_REPLY                 0x00\r
39 \r
40 #define AT91C_EMAC_CLKEN 0x2\r
41 #define SWAP16(x)       (((x & 0xff) << 8) | (x >> 8))\r
42 \r
43 #if 0\r
44 //* Transfer descriptor structure\r
45 typedef struct _AT91S_TdDescriptor {\r
46         unsigned int addr;\r
47         unsigned int status;\r
48 }AT91S_TdDescriptor, *AT91PS_TdDescriptor;\r
49 #endif\r
50 \r
51 //* Receive Transfer descriptor structure\r
52 typedef struct  _AT91S_RxTdDescriptor {\r
53         unsigned int addr;\r
54         union\r
55         {\r
56                 unsigned int status;\r
57                 struct {\r
58                         unsigned int Length:11;\r
59                         unsigned int Res0:1;\r
60                         unsigned int Rxbuf_off:2;\r
61                         unsigned int StartOfFrame:1;\r
62                         unsigned int EndOfFrame:1;\r
63                         unsigned int Cfi:1;\r
64                         unsigned int VlanPriority:3;\r
65                         unsigned int PriorityTag:1;\r
66                         unsigned int VlanTag:1;\r
67                         unsigned int TypeID:1;\r
68                         unsigned int Sa4Match:1;\r
69                         unsigned int Sa3Match:1;\r
70                         unsigned int Sa2Match:1;\r
71                         unsigned int Sa1Match:1;\r
72                         unsigned int Res1:1;\r
73                         unsigned int ExternalAdd:1;\r
74                         unsigned int UniCast:1;\r
75                         unsigned int MultiCast:1;\r
76                         unsigned int BroadCast:1;\r
77                 }S_Status;              \r
78         }U_Status;\r
79 }AT91S_RxTdDescriptor, *AT91PS_RxTdDescriptor;\r
80 \r
81 \r
82 //* Transmit Transfer descriptor structure\r
83 typedef struct _AT91S_TxTdDescriptor {\r
84         unsigned int addr;\r
85         union\r
86         {\r
87                 unsigned int status;\r
88                 struct {\r
89                         unsigned int Length:11;\r
90                         unsigned int Res0:4;\r
91                         unsigned int LastBuff:1;\r
92                         unsigned int NoCrc:1;\r
93                         unsigned int Res1:10;\r
94                         unsigned int BufExhausted:1;\r
95                         unsigned int TransmitUnderrun:1;\r
96                         unsigned int TransmitError:1;\r
97                         unsigned int Wrap:1;\r
98                         unsigned int BuffUsed:1;\r
99                 }S_Status;              \r
100         }U_Status;\r
101 }AT91S_TxTdDescriptor, *AT91PS_TxTdDescriptor;\r
102 \r
103 #define AT91C_OWNERSHIP_BIT             0x00000001\r
104 \r
105 /* Receive status defintion */\r
106 #define AT91C_BROADCAST_ADDR    ((unsigned int) (1 << 31))      //* Broadcat address detected\r
107 #define AT91C_MULTICAST_HASH    ((unsigned int) (1 << 30))      //* MultiCast hash match\r
108 #define AT91C_UNICAST_HASH          ((unsigned int) (1 << 29))  //* UniCast hash match\r
109 #define AT91C_EXTERNAL_ADDR         ((unsigned int) (1 << 28))  //* External Address match\r
110 #define AT91C_SA1_ADDR          ((unsigned int) (1 << 26))      //* Specific address 1 match\r
111 #define AT91C_SA2_ADDR          ((unsigned int) (1 << 25))      //* Specific address 2 match\r
112 #define AT91C_SA3_ADDR          ((unsigned int) (1 << 24))      //* Specific address 3 match\r
113 #define AT91C_SA4_ADDR          ((unsigned int) (1 << 23))      //* Specific address 4 match\r
114 #define AT91C_TYPE_ID           ((unsigned int) (1 << 22))      //* Type ID match\r
115 #define AT91C_VLAN_TAG          ((unsigned int) (1 << 21))      //* VLAN tag detected\r
116 #define AT91C_PRIORITY_TAG      ((unsigned int) (1 << 20))      //* PRIORITY tag detected\r
117 #define AT91C_VLAN_PRIORITY     ((unsigned int) (7 << 17))  //* PRIORITY Mask\r
118 #define AT91C_CFI_IND           ((unsigned int) (1 << 16))  //* CFI indicator\r
119 #define AT91C_EOF               ((unsigned int) (1 << 15))  //* EOF\r
120 #define AT91C_SOF               ((unsigned int) (1 << 14))  //* SOF\r
121 #define AT91C_RBF_OFFSET        ((unsigned int) (3 << 12))  //* Receive Buffer Offset Mask\r
122 #define AT91C_LENGTH_FRAME      ((unsigned int) 0x07FF)     //* Length of frame\r
123 \r
124 /* Transmit Status definition */\r
125 #define AT91C_TRANSMIT_OK               ((unsigned int) (1 << 31))      //*\r
126 #define AT91C_TRANSMIT_WRAP             ((unsigned int) (1 << 30))      //* Wrap bit: mark the last descriptor\r
127 #define AT91C_TRANSMIT_ERR              ((unsigned int) (1 << 29))      //* RLE:transmit error\r
128 #define AT91C_TRANSMIT_UND              ((unsigned int) (1 << 28))      //* Transmit Underrun\r
129 #define AT91C_BUF_EX                    ((unsigned int) (1 << 27))      //* Buffers exhausted in mid frame\r
130 #define AT91C_TRANSMIT_NO_CRC   ((unsigned int) (1 << 16))      //* No CRC will be appended to the current frame\r
131 #define AT91C_LAST_BUFFER       ((unsigned int) (1 << 15))      //*\r
132 \r
133 #define ARP_ETHER                       1               /* Ethernet  hardware address   */\r
134 #define ARPOP_REQUEST           1               /* Request  to resolve  address */\r
135 #define ARPOP_REPLY             2               /* Response to previous request */\r
136 #define RARPOP_REQUEST          3               /* Request  to resolve  address */\r
137 #define RARPOP_REPLY        4           /* Response to previous request */\r
138 \r
139 \r
140 typedef struct _AT91S_EthHdr\r
141 {\r
142         unsigned char           et_dest[6];     /* Destination node             */\r
143         unsigned char           et_src[6];      /* Source node                  */\r
144         unsigned short          et_protlen;     /* Protocol or length           */\r
145 } AT91S_EthHdr, *AT91PS_EthHdr;\r
146 \r
147 typedef struct _AT91S_ArpHdr\r
148 {\r
149         unsigned short          ar_hrd;         /* Format of hardware address   */\r
150         unsigned short          ar_pro;         /* Format of protocol address   */\r
151         unsigned char           ar_hln;         /* Length of hardware address   */\r
152         unsigned char           ar_pln;         /* Length of protocol address   */\r
153         unsigned short          ar_op;          /* Operation                    */\r
154         unsigned char           ar_sha[6];      /* Sender hardware address      */\r
155         unsigned char           ar_spa[4];      /* Sender protocol address      */\r
156         unsigned char           ar_tha[6];      /* Target hardware address      */\r
157         unsigned char           ar_tpa[4];      /* Target protocol address      */\r
158 } AT91S_ArpHdr, *AT91PS_ArpHdr;\r
159 \r
160 //* IP Header structure\r
161 typedef struct _AT91S_IPheader {\r
162         unsigned char   ip_hl_v;        /* header length and version    */\r
163         unsigned char   ip_tos;         /* type of service              */\r
164         unsigned short  ip_len;         /* total length                 */\r
165         unsigned short  ip_id;          /* identification               */\r
166         unsigned short  ip_off;         /* fragment offset field        */\r
167         unsigned char   ip_ttl;         /* time to live                 */\r
168         unsigned char   ip_p;           /* protocol                     */\r
169         unsigned short  ip_sum;         /* checksum                     */\r
170         unsigned char   ip_src[4];      /* Source IP address            */\r
171         unsigned char   ip_dst[4];      /* Destination IP address       */\r
172         unsigned short  udp_src;        /* UDP source port              */\r
173         unsigned short  udp_dst;        /* UDP destination port         */\r
174         unsigned short  udp_len;        /* Length of UDP packet         */\r
175         unsigned short  udp_xsum;       /* Checksum                     */\r
176 } AT91S_IPheader, *AT91PS_IPheader;\r
177 \r
178 //* ICMP echo header structure\r
179 typedef struct _AT91S_IcmpEchoHdr {\r
180     unsigned char   type;       /* type of message */\r
181     unsigned char   code;       /* type subcode */\r
182     unsigned short  cksum;      /* ones complement cksum of struct */\r
183     unsigned short  id;         /* identifier */\r
184     unsigned short  seq;        /* sequence number */\r
185 }AT91S_IcmpEchoHdr, *AT91PS_IcmpEchoHdr;\r
186 \r
187 \r
188 typedef struct _AT91S_EthPack\r
189 {\r
190         AT91S_EthHdr    EthHdr;\r
191         AT91S_ArpHdr    ArpHdr;\r
192 } AT91S_EthPack, *AT91PS_EthPack;\r
193 \r
194 \r
195 #endif //* AT91C_EMAC_H\r