X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=include%2Fnet.h;h=ee11f82ccc87acf426b95f78337bb2de52d77abd;hb=e7075bb7536e91acd5da7940d811aab00185df14;hp=d5d37b6506b05989f37d31cb08676edbab47fda1;hpb=e2a53458a7ab375233048e922c4adf494866a78f;p=u-boot diff --git a/include/net.h b/include/net.h index d5d37b6506..ee11f82ccc 100644 --- a/include/net.h +++ b/include/net.h @@ -16,6 +16,7 @@ #include #endif /* CONFIG_8xx */ +#include #include /* for nton* / ntoh* stuff */ @@ -31,9 +32,10 @@ # define PKTBUFSRX 4 #endif -#define PKTALIGN 32 +#define PKTALIGN ARCH_DMA_MINALIGN -typedef ulong IPaddr_t; +/* IPv4 addresses are always 32 bits in size */ +typedef u32 IPaddr_t; /** @@ -48,13 +50,24 @@ typedef void rxhand_f(uchar *pkt, unsigned dport, IPaddr_t sip, unsigned sport, unsigned len); +/** + * An incoming ICMP packet handler. + * @param type ICMP type + * @param code ICMP code + * @param dport destination UDP port + * @param sip source IP address + * @param sport source UDP port + * @param pkt pointer to the ICMP packet data + * @param len packet length + */ +typedef void rxhand_icmp_f(unsigned type, unsigned code, unsigned dport, + IPaddr_t sip, unsigned sport, uchar *pkt, unsigned len); + /* * A timeout handler. Called after time interval has expired. */ typedef void thand_f(void); -#define NAMESIZE 16 - enum eth_state_t { ETH_STATE_INIT, ETH_STATE_PASSIVE, @@ -62,7 +75,7 @@ enum eth_state_t { }; struct eth_device { - char name[NAMESIZE]; + char name[16]; unsigned char enetaddr[6]; int iobase; int state; @@ -76,11 +89,13 @@ struct eth_device { #endif int (*write_hwaddr) (struct eth_device*); struct eth_device *next; + int index; void *priv; }; extern int eth_initialize(bd_t *bis); /* Initialize network subsystem */ extern int eth_register(struct eth_device* dev);/* Register network device */ +extern int eth_unregister(struct eth_device *dev);/* Remove network device */ extern void eth_try_another(int first_restart); /* Change the device */ extern void eth_set_current(void); /* set nterface to ethcur var */ extern struct eth_device *eth_get_dev(void); /* get the current device MAC */ @@ -244,6 +259,7 @@ typedef struct * ICMP stuff (just enough to handle (host) redirect messages) */ #define ICMP_ECHO_REPLY 0 /* Echo reply */ +#define ICMP_NOT_REACH 3 /* Detination unreachable */ #define ICMP_REDIRECT 5 /* Redirect (change route) */ #define ICMP_ECHO_REQUEST 8 /* Echo request */ @@ -251,6 +267,9 @@ typedef struct #define ICMP_REDIR_NET 0 /* Redirect Net */ #define ICMP_REDIR_HOST 1 /* Redirect Host */ +/* Codes for NOT_REACH */ +#define ICMP_NOT_REACH_PORT 3 /* Port unreachable */ + typedef struct icmphdr { uchar type; uchar code; @@ -265,6 +284,7 @@ typedef struct icmphdr { ushort __unused; ushort mtu; } frag; + uchar data[0]; } un; } ICMP_t; @@ -347,8 +367,10 @@ extern int NetState; /* Network loop state */ extern int NetRestartWrap; /* Tried all network devices */ -typedef enum { BOOTP, RARP, ARP, TFTP, DHCP, PING, DNS, NFS, CDP, NETCONS, SNTP, - TFTPSRV } proto_t; +enum proto_t { + BOOTP, RARP, ARP, TFTPGET, DHCP, PING, DNS, NFS, CDP, NETCONS, SNTP, + TFTPSRV, TFTPPUT +}; /* from net/net.c */ extern char BootFile[128]; /* Boot File name */ @@ -374,7 +396,7 @@ extern int NetTimeOffset; /* offset time from UTC */ #endif /* Initialize the network adapter */ -extern int NetLoop(proto_t); +extern int NetLoop(enum proto_t); /* Shutdown adapters and cleanup */ extern void NetStop(void); @@ -397,6 +419,7 @@ extern uint NetCksum(uchar *, int); /* Calculate the checksum */ /* Set callbacks */ extern void NetSetHandler(rxhand_f *); /* Set RX packet handler */ +extern void net_set_icmp_handler(rxhand_icmp_f *f); /* Set ICMP RX handler */ extern void NetSetTimeout(ulong, thand_f *);/* Set timeout handler */ /* Transmit "NetTxPacket" */ @@ -408,6 +431,12 @@ extern int NetSendUDPPacket(uchar *ether, IPaddr_t dest, int dport, int sport, i /* Processes a received packet */ extern void NetReceive(volatile uchar *, int); +/* + * Check if autoload is enabled. If so, use either NFS or TFTP to download + * the boot file. + */ +void net_auto_load(void); + /* * The following functions are a bit ugly, but necessary to deal with * alignment restrictions on ARM.