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