emac.h revision 161370
1230557Sjimharris/******************************************************************************
2230557Sjimharris *
3230557Sjimharris * Filename: emac.h
4230557Sjimharris *
5230557Sjimharris * Definition of routine to set the MAC address.
6230557Sjimharris *
7230557Sjimharris * Revision information:
8230557Sjimharris *
9230557Sjimharris * 28AUG2004	kb_admin	initial creation
10230557Sjimharris *
11230557Sjimharris * BEGIN_KBDD_BLOCK
12230557Sjimharris * No warranty, expressed or implied, is included with this software.  It is
13230557Sjimharris * provided "AS IS" and no warranty of any kind including statutory or aspects
14230557Sjimharris * relating to merchantability or fitness for any purpose is provided.  All
15230557Sjimharris * intellectual property rights of others is maintained with the respective
16230557Sjimharris * owners.  This software is not copyrighted and is intended for reference
17230557Sjimharris * only.
18230557Sjimharris * END_BLOCK
19230557Sjimharris *
20230557Sjimharris * $FreeBSD: head/sys/boot/arm/at91/libat91/emac.h 161370 2006-08-16 23:39:58Z imp $
21230557Sjimharris *****************************************************************************/
22230557Sjimharris
23230557Sjimharris
24230557Sjimharris#ifndef _EMAC_H_
25230557Sjimharris#define _EMAC_H_
26230557Sjimharris
27230557Sjimharrisextern void EMAC_SetMACAddress(unsigned char addr[6]);
28230557Sjimharrisextern void SetServerIPAddress(unsigned address);
29230557Sjimharrisextern void SetLocalIPAddress(unsigned address);
30230557Sjimharrisextern void EMAC_Init(void);
31230557Sjimharrisextern void TFTP_Download(unsigned address, char *filename);
32230557Sjimharris
33230557Sjimharris#define MAX_RX_PACKETS		8
34230557Sjimharris#define RX_PACKET_SIZE		1536
35230557Sjimharris#define	RX_BUFFER_START		0x21000000
36230557Sjimharris#define	RX_DATA_START		(RX_BUFFER_START + (8 * MAX_RX_PACKETS))
37230557Sjimharris
38230557Sjimharris#define ARP_REQUEST		0x0001
39230557Sjimharris#define ARP_REPLY		0x0002
40230557Sjimharris#define PROTOCOL_ARP		0x0806
41230557Sjimharris#define PROTOCOL_IP		0x0800
42230557Sjimharris#define PROTOCOL_UDP		0x11
43230557Sjimharris
44230557Sjimharris#define SWAP16(x)	((((x) & 0xff) << 8) | ((x) >> 8))
45230557Sjimharris
46230557Sjimharristypedef struct {
47230557Sjimharris	unsigned	address;
48230557Sjimharris	unsigned	size;
49230557Sjimharris} receive_descriptor_t;
50230557Sjimharris
51230557Sjimharristypedef struct {
52230557Sjimharris
53230557Sjimharris	unsigned char	dest_mac[6];
54230557Sjimharris
55230557Sjimharris	unsigned char	src_mac[6];
56230557Sjimharris
57230557Sjimharris	unsigned short	frame_type;
58230557Sjimharris	unsigned short	hard_type;
59230557Sjimharris	unsigned short	prot_type;
60230557Sjimharris	unsigned char	hard_size;
61230557Sjimharris	unsigned char	prot_size;
62230557Sjimharris
63230557Sjimharris	unsigned short	operation;
64230557Sjimharris
65230557Sjimharris	unsigned char	sender_mac[6];
66230557Sjimharris	unsigned char	sender_ip[4];
67230557Sjimharris
68230557Sjimharris	unsigned char	target_mac[6];
69230557Sjimharris	unsigned char	target_ip[4];
70230557Sjimharris
71230557Sjimharris} __attribute__((__packed__)) arp_header_t;
72230557Sjimharris
73230557Sjimharristypedef struct {
74230557Sjimharris	unsigned char	ip_v_hl;
75230557Sjimharris	unsigned char	ip_tos;
76230557Sjimharris	unsigned short	ip_len;
77230557Sjimharris	unsigned short	ip_id;
78230557Sjimharris	unsigned short	ip_off;
79230557Sjimharris	unsigned char	ip_ttl;
80230557Sjimharris	unsigned char	ip_p;
81230557Sjimharris	unsigned short	ip_sum;
82230557Sjimharris	unsigned char	ip_src[4];
83230557Sjimharris	unsigned char	ip_dst[4];
84230557Sjimharris} __attribute__((__packed__)) ip_header_t;
85230557Sjimharris
86230557Sjimharristypedef struct {
87230557Sjimharris	unsigned char	dest_mac[6];
88230557Sjimharris	unsigned char	src_mac[6];
89230557Sjimharris	unsigned short	proto_mac;
90230557Sjimharris	unsigned short	packet_length;
91230557Sjimharris	ip_header_t	iphdr;
92230557Sjimharris} __attribute__((__packed__)) transmit_header_t;
93230557Sjimharris
94230557Sjimharristypedef struct {
95230557Sjimharris	unsigned short	src_port;
96230557Sjimharris	unsigned short	dst_port;
97230557Sjimharris	unsigned short	udp_len;
98230557Sjimharris	unsigned short	udp_cksum;
99230557Sjimharris} __attribute__((__packed__)) udp_header_t;
100230557Sjimharris
101230557Sjimharristypedef struct {
102230557Sjimharris	unsigned short	opcode;
103230557Sjimharris	unsigned short	block_num;
104230557Sjimharris	unsigned char	data[512];
105230557Sjimharris} __attribute__((__packed__)) tftp_header_t;
106230557Sjimharris
107230557Sjimharris// Preswap bytes
108230557Sjimharris#define	TFTP_RRQ_OPCODE		0x0100
109230557Sjimharris#define TFTP_WRQ_OPCODE		0x0200
110230557Sjimharris#define TFTP_DATA_OPCODE	0x0300
111230557Sjimharris#define TFTP_ACK_OPCODE		0x0400
112230557Sjimharris#define TFTP_ERROR_OPCODE	0x0500
113230557Sjimharris
114230557Sjimharris/* MII registers definition */
115230557Sjimharris#define MII_STS_REG	0x01
116230557Sjimharris#define MII_STS_LINK_STAT	0x04
117230557Sjimharris#ifdef BOOT_KB9202
118230557Sjimharris#define MII_STS2_REG	0x11
119230557Sjimharris#define MII_STS2_LINK	0x400
120230557Sjimharris#define MII_STS2_100TX	0x4000
121230557Sjimharris#define MII_STS2_FDX	0x200
122230557Sjimharris#else
123230557Sjimharris#define MII_SPEC_STS_REG 0x11
124230557Sjimharris#define MII_SSTS_100FDX	0x8000
125230557Sjimharris#define MII_SSTS_100HDX	0x4000
126230557Sjimharris#define MII_SSTS_10FDX	0x2000
127230557Sjimharris#define MII_SSTS_10HDX	0x1000
128230557Sjimharris#endif
129230557Sjimharris
130230557Sjimharrisextern unsigned char localMACAddr[6];
131230557Sjimharrisextern unsigned localMAClow, localMAChigh;
132230557Sjimharrisextern unsigned localMACSet, serverMACSet;
133230557Sjimharrisextern receive_descriptor_t *p_rxBD;
134230557Sjimharrisextern unsigned	lastSize;
135230557Sjimharrisextern unsigned localIPSet, serverIPSet;
136230557Sjimharrisextern unsigned short	serverPort, localPort;
137230557Sjimharris
138230557Sjimharris#endif /* _EMAC_H_ */
139230557Sjimharris