| /****************************************************************************** |
| * |
| * Filename: emac.h |
| * |
| * Definition of routine to set the MAC address. |
| * |
| * Revision information: |
| * |
| * 28AUG2004 kb_admin initial creation |
| * |
| * BEGIN_KBDD_BLOCK |
| * No warranty, expressed or implied, is included with this software. It is |
| * provided "AS IS" and no warranty of any kind including statutory or aspects |
| * relating to merchantability or fitness for any purpose is provided. All |
| * intellectual property rights of others is maintained with the respective |
| * owners. This software is not copyrighted and is intended for reference |
| * only. |
| * END_BLOCK |
| * |
| * $FreeBSD$ |
| *****************************************************************************/ |
| |
| |
| #ifndef _EMAC_H_ |
| #define _EMAC_H_ |
| |
| extern void EMAC_SetMACAddress(unsigned char addr[6]); |
| extern void SetServerIPAddress(unsigned address); |
| extern void SetLocalIPAddress(unsigned address); |
| extern void EMAC_Init(void); |
| extern void TFTP_Download(unsigned address, char *filename); |
| |
| #define MAX_RX_PACKETS 8 |
| #define RX_PACKET_SIZE 1536 |
| #define RX_BUFFER_START 0x21000000 |
| #define RX_DATA_START (RX_BUFFER_START + (8 * MAX_RX_PACKETS)) |
| |
| #define ARP_REQUEST 0x0001 |
| #define ARP_REPLY 0x0002 |
| #define PROTOCOL_ARP 0x0806 |
| #define PROTOCOL_IP 0x0800 |
| #define PROTOCOL_UDP 0x11 |
| |
| #define SWAP16(x) ((((x) & 0xff) << 8) | ((x) >> 8)) |
| |
| typedef struct { |
| unsigned address; |
| unsigned size; |
| } receive_descriptor_t; |
| |
| typedef struct { |
| |
| unsigned char dest_mac[6]; |
| |
| unsigned char src_mac[6]; |
| |
| unsigned short frame_type; |
| unsigned short hard_type; |
| unsigned short prot_type; |
| unsigned char hard_size; |
| unsigned char prot_size; |
| |
| unsigned short operation; |
| |
| unsigned char sender_mac[6]; |
| unsigned char sender_ip[4]; |
| |
| unsigned char target_mac[6]; |
| unsigned char target_ip[4]; |
| |
| } __attribute__((__packed__)) arp_header_t; |
| |
| typedef struct { |
| unsigned char ip_v_hl; |
| unsigned char ip_tos; |
| unsigned short ip_len; |
| unsigned short ip_id; |
| unsigned short ip_off; |
| unsigned char ip_ttl; |
| unsigned char ip_p; |
| unsigned short ip_sum; |
| unsigned char ip_src[4]; |
| unsigned char ip_dst[4]; |
| } __attribute__((__packed__)) ip_header_t; |
| |
| typedef struct { |
| unsigned char dest_mac[6]; |
| unsigned char src_mac[6]; |
| unsigned short proto_mac; |
| unsigned short packet_length; |
| ip_header_t iphdr; |
| } __attribute__((__packed__)) transmit_header_t; |
| |
| typedef struct { |
| unsigned short src_port; |
| unsigned short dst_port; |
| unsigned short udp_len; |
| unsigned short udp_cksum; |
| } __attribute__((__packed__)) udp_header_t; |
| |
| typedef struct { |
| unsigned short opcode; |
| unsigned short block_num; |
| unsigned char data[512]; |
| } __attribute__((__packed__)) tftp_header_t; |
| |
| // Preswap bytes |
| #define TFTP_RRQ_OPCODE 0x0100 |
| #define TFTP_WRQ_OPCODE 0x0200 |
| #define TFTP_DATA_OPCODE 0x0300 |
| #define TFTP_ACK_OPCODE 0x0400 |
| #define TFTP_ERROR_OPCODE 0x0500 |
| |
| /* MII registers definition */ |
| #define MII_STS_REG 0x01 |
| #define MII_STS_LINK_STAT 0x04 |
| #if defined(BOOT_KB920X) || defined(BOOT_CENTIPAD) |
| #define MII_STS2_REG 0x11 |
| #define MII_STS2_LINK 0x400 |
| #define MII_STS2_100TX 0x4000 |
| #define MII_STS2_FDX 0x200 |
| #else |
| #define MII_SPEC_STS_REG 0x11 |
| #define MII_SSTS_100FDX 0x8000 |
| #define MII_SSTS_100HDX 0x4000 |
| #define MII_SSTS_10FDX 0x2000 |
| #define MII_SSTS_10HDX 0x1000 |
| #endif |
| |
| extern unsigned char localMACAddr[6]; |
| extern unsigned localMAClow, localMAChigh; |
| extern unsigned localMACSet; |
| #define EMAC_Init() |
| |
| #endif /* _EMAC_H_ */ |