* Cleanup, minor fixes

* Patch by Rune Torgersen, 16 Apr 2004:
  LBA48 fixes

* Patches by Pantelis Antoniou, 16 Apr 2004:
  - Fix some compile problems;
    add "once" functionality for the netretry variable
This commit is contained in:
wdenk 2004-04-18 17:39:38 +00:00
parent c26e454dfc
commit 6e5923851e
13 changed files with 181 additions and 189 deletions

View File

@ -2,6 +2,9 @@
Changes for U-Boot 1.1.1: Changes for U-Boot 1.1.1:
====================================================================== ======================================================================
* Patch by Rune Torgersen, 16 Apr 2004:
LBA48 fixes
* Patches by Pantelis Antoniou, 16 Apr 2004: * Patches by Pantelis Antoniou, 16 Apr 2004:
- add support for a new version of an Intracom board and fix - add support for a new version of an Intracom board and fix
various other things on others. various other things on others.
@ -17,6 +20,8 @@ Changes for U-Boot 1.1.1:
2. A new exit command was added which terminates the current 2. A new exit command was added which terminates the current
executing script. executing script.
3. Fixed handing of $? (exit code of last executed command) 3. Fixed handing of $? (exit code of last executed command)
- Fix some compile problems;
add "once" functionality for the netretry variable
* Patch by George G. Davis, 02 Apr 2004: * Patch by George G. Davis, 02 Apr 2004:
add support for Intel Assabet board add support for Intel Assabet board

7
README
View File

@ -1948,9 +1948,7 @@ Low Level (hardware related) configuration options:
- CONFIG_FEC[12]_PHY - CONFIG_FEC[12]_PHY
Define to the hardcoded PHY address which corresponds Define to the hardcoded PHY address which corresponds
to the given FEC. to the given FEC; i. e.
i.e.
#define CONFIG_FEC1_PHY 4 #define CONFIG_FEC1_PHY 4
means that the PHY with address 4 is connected to FEC1 means that the PHY with address 4 is connected to FEC1
@ -2266,6 +2264,9 @@ configurations; the following names are supported:
netretry - When set to "no" each network operation will netretry - When set to "no" each network operation will
either succeed or fail without retrying. either succeed or fail without retrying.
When set to "once" the network operation will
fail when all the available network interfaces
are tried once without success.
Useful on scripts which control the retry operation Useful on scripts which control the retry operation
themselves. themselves.

View File

@ -1186,13 +1186,12 @@ static void ide_ident (block_dev_desc_t *dev_desc)
#ifdef CONFIG_LBA48 #ifdef CONFIG_LBA48
if (iop->command_set_2 & 0x0400) { /* LBA 48 support */ if (iop->command_set_2 & 0x0400) { /* LBA 48 support */
dev_desc->lba48support = 1; dev_desc->lba48 = 1;
dev_desc->lba48 = (unsigned long long)iop->lba48_capacity[0] | dev_desc->lba = (unsigned long long)iop->lba48_capacity[0] |
((unsigned long long)iop->lba48_capacity[1] << 16) | ((unsigned long long)iop->lba48_capacity[1] << 16) |
((unsigned long long)iop->lba48_capacity[2] << 32) | ((unsigned long long)iop->lba48_capacity[2] << 32) |
((unsigned long long)iop->lba48_capacity[3] << 48); ((unsigned long long)iop->lba48_capacity[3] << 48);
} else { } else {
dev_desc->lba48support = 0;
dev_desc->lba48 = 0; dev_desc->lba48 = 0;
} }
#endif /* CONFIG_LBA48 */ #endif /* CONFIG_LBA48 */

View File

@ -94,62 +94,50 @@ U_BOOT_CMD(
); );
#endif /* CFG_CMD_NFS */ #endif /* CFG_CMD_NFS */
static void netboot_update_env(void) static void netboot_update_env (void)
{ {
char tmp[22] ; char tmp[22];
if (NetOurGatewayIP) { if (NetOurGatewayIP) {
ip_to_string (NetOurGatewayIP, tmp); ip_to_string (NetOurGatewayIP, tmp);
setenv("gatewayip", tmp); setenv ("gatewayip", tmp);
} }
if (NetOurSubnetMask) { if (NetOurSubnetMask) {
ip_to_string (NetOurSubnetMask, tmp); ip_to_string (NetOurSubnetMask, tmp);
setenv("netmask", tmp); setenv ("netmask", tmp);
} }
if (NetOurHostName[0]) if (NetOurHostName[0])
setenv("hostname", NetOurHostName); setenv ("hostname", NetOurHostName);
if (NetOurRootPath[0]) if (NetOurRootPath[0])
setenv("rootpath", NetOurRootPath); setenv ("rootpath", NetOurRootPath);
if (NetOurIP) { if (NetOurIP) {
ip_to_string (NetOurIP, tmp); ip_to_string (NetOurIP, tmp);
setenv("ipaddr", tmp); setenv ("ipaddr", tmp);
} }
if (NetServerIP) { if (NetServerIP) {
ip_to_string (NetServerIP, tmp); ip_to_string (NetServerIP, tmp);
setenv("serverip", tmp); setenv ("serverip", tmp);
} }
if (NetOurDNSIP) { if (NetOurDNSIP) {
ip_to_string (NetOurDNSIP, tmp); ip_to_string (NetOurDNSIP, tmp);
setenv("dnsip", tmp); setenv ("dnsip", tmp);
} }
#if (CONFIG_BOOTP_MASK & CONFIG_BOOTP_DNS2) #if (CONFIG_BOOTP_MASK & CONFIG_BOOTP_DNS2)
if (NetOurDNS2IP) { if (NetOurDNS2IP) {
ip_to_string (NetOurDNS2IP, tmp); ip_to_string (NetOurDNS2IP, tmp);
setenv("dnsip2", tmp); setenv ("dnsip2", tmp);
} }
#endif #endif
if (NetOurNISDomain[0]) if (NetOurNISDomain[0])
setenv("domain", NetOurNISDomain); setenv ("domain", NetOurNISDomain);
if (ntohs(NetOurVLAN) != (ushort)-1) {
VLAN_to_string(NetOurVLAN, tmp);
setenv("vlan", tmp);
}
if (ntohs(NetOurNativeVLAN) != (ushort)-1) {
VLAN_to_string(NetOurNativeVLAN, tmp);
setenv("vlan", tmp);
}
} }
static int static int
netboot_common (int proto, cmd_tbl_t *cmdtp, int argc, char *argv[]) netboot_common (int proto, cmd_tbl_t *cmdtp, int argc, char *argv[])
{ {

View File

@ -1,5 +1,5 @@
/* /*
* (C) Copyright 2000-2002 * (C) Copyright 2000-2004
* Wolfgang Denk, DENX Software Engineering, wd@denx.de. * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
* *
* See file CREDITS for list of people who contributed to this * See file CREDITS for list of people who contributed to this
@ -91,7 +91,7 @@ static int voltage_set(int slot, int vcc, int vpp);
#if (! defined(CONFIG_I82365)) && (! defined(CONFIG_PXA_PCMCIA)) #if (! defined(CONFIG_I82365)) && (! defined(CONFIG_PXA_PCMCIA))
static u_int m8xx_get_graycode(u_int size); static u_int m8xx_get_graycode(u_int size);
#endif /* CONFIG_I82365 */ #endif /* !CONFIG_I82365, !CONFIG_PXA_PCMCIA */
#if 0 #if 0
static u_int m8xx_get_speed(u_int ns, u_int is_io); static u_int m8xx_get_speed(u_int ns, u_int is_io);
#endif #endif
@ -106,9 +106,10 @@ static u_int *pcmcia_pgcrx[2] = {
&((immap_t *)CFG_IMMR)->im_pcmcia.pcmc_pgcra, &((immap_t *)CFG_IMMR)->im_pcmcia.pcmc_pgcra,
&((immap_t *)CFG_IMMR)->im_pcmcia.pcmc_pgcrb, &((immap_t *)CFG_IMMR)->im_pcmcia.pcmc_pgcrb,
}; };
#define PCMCIA_PGCRX(slot) (*pcmcia_pgcrx[slot]) #define PCMCIA_PGCRX(slot) (*pcmcia_pgcrx[slot])
#endif /* CONFIG_PXA_PCMCIA */
#endif /* CONFIG_I82365 */ #endif /* CONFIG_I82365 */
#if defined(CONFIG_IDE_8xx_PCCARD) || defined(CONFIG_PXA_PCMCIA) #if defined(CONFIG_IDE_8xx_PCCARD) || defined(CONFIG_PXA_PCMCIA)
@ -116,9 +117,7 @@ static void print_funcid (int func);
static void print_fixed (volatile uchar *p); static void print_fixed (volatile uchar *p);
static int identify (volatile uchar *p); static int identify (volatile uchar *p);
static int check_ide_device (int slot); static int check_ide_device (int slot);
#endif /* CONFIG_IDE_8xx_PCCARD */ #endif /* CONFIG_IDE_8xx_PCCARD, CONFIG_PXA_PCMCIA */
#endif
const char *indent = "\t "; const char *indent = "\t ";

View File

@ -412,6 +412,9 @@ int console_init_r (void)
DECLARE_GLOBAL_DATA_PTR; DECLARE_GLOBAL_DATA_PTR;
char *stdinname, *stdoutname, *stderrname; char *stdinname, *stdoutname, *stderrname;
device_t *inputdev = NULL, *outputdev = NULL, *errdev = NULL; device_t *inputdev = NULL, *outputdev = NULL, *errdev = NULL;
#ifdef CFG_CONSOLE_ENV_OVERWRITE
int i;
#endif /* CFG_CONSOLE_ENV_OVERWRITE */
/* set default handlers at first */ /* set default handlers at first */
gd->jt[XF_getc] = serial_getc; gd->jt[XF_getc] = serial_getc;

View File

@ -702,9 +702,9 @@ static int fec_init (struct eth_device *dev, bd_t * bd)
#if defined(CONFIG_MII) && defined(CONFIG_RMII) #if defined(CONFIG_MII) && defined(CONFIG_RMII)
/* the MII interface is connected to FEC1 /* the MII interface is connected to FEC1
so for the miiphy_xxx function to work we must * so for the miiphy_xxx function to work we must
call mii_init since fec_halt messes the thing up */ * call mii_init since fec_halt messes the thing up
*/
if (efis->ether_index != 0) if (efis->ether_index != 0)
mii_init(); mii_init();

View File

@ -87,11 +87,7 @@ void dev_print (block_dev_desc_t *dev_desc)
if ((dev_desc->lba * dev_desc->blksz)>0L) { if ((dev_desc->lba * dev_desc->blksz)>0L) {
ulong mb, mb_quot, mb_rem, gb, gb_quot, gb_rem; ulong mb, mb_quot, mb_rem, gb, gb_quot, gb_rem;
lbaint_t lba; lbaint_t lba;
#ifdef CONFIG_LBA48
if (dev_desc->lba48support)
lba = dev_desc->lba48;
else
#endif
lba = dev_desc->lba; lba = dev_desc->lba;
lba512 = (lba * (dev_desc->blksz/512)); lba512 = (lba * (dev_desc->blksz/512));
@ -104,7 +100,7 @@ void dev_print (block_dev_desc_t *dev_desc)
gb_quot = gb / 10; gb_quot = gb / 10;
gb_rem = gb - (10 * gb_quot); gb_rem = gb - (10 * gb_quot);
#ifdef CONFIG_LBA48 #ifdef CONFIG_LBA48
if (dev_desc->lba48support) if (dev_desc->lba48)
printf (" Supports 48-bit addressing\n"); printf (" Supports 48-bit addressing\n");
#endif #endif
#if defined(CFG_64BIT_LBA) && defined(CFG_64BIT_VSPRINTF) #if defined(CFG_64BIT_LBA) && defined(CFG_64BIT_VSPRINTF)

View File

@ -22,7 +22,7 @@
*/ */
#ifndef _PART_H #ifndef _PART_H
#define _PART_H #define _PART_H
#include <ide.h>
typedef struct block_dev_desc { typedef struct block_dev_desc {
int if_type; /* type of the interface */ int if_type; /* type of the interface */
@ -35,14 +35,14 @@ typedef struct block_dev_desc {
#ifdef CONFIG_LBA48 #ifdef CONFIG_LBA48
unsigned char lba48; /* device can use 48bit addr (ATA/ATAPI v7) */ unsigned char lba48; /* device can use 48bit addr (ATA/ATAPI v7) */
#endif #endif
unsigned long lba; /* number of blocks */ lbaint_t lba; /* number of blocks */
unsigned long blksz; /* block size */ unsigned long blksz; /* block size */
unsigned char vendor [40+1]; /* IDE model, SCSI Vendor */ unsigned char vendor [40+1]; /* IDE model, SCSI Vendor */
unsigned char product[20+1]; /* IDE Serial no, SCSI product */ unsigned char product[20+1]; /* IDE Serial no, SCSI product */
unsigned char revision[8+1]; /* firmware revision */ unsigned char revision[8+1]; /* firmware revision */
unsigned long (*block_read)(int dev, unsigned long (*block_read)(int dev,
unsigned long start, unsigned long start,
unsigned long blkcnt, lbaint_t blkcnt,
unsigned long *buffer); unsigned long *buffer);
}block_dev_desc_t; }block_dev_desc_t;

115
net/net.c
View File

@ -132,8 +132,9 @@ static int NetRestarted = 0; /* Network loop restarted */
static int NetDevExists = 0; /* At least one device configured */ static int NetDevExists = 0; /* At least one device configured */
#endif #endif
ushort NetOurVLAN = ntohs(-1); /* default is without VLAN */ /* XXX in both little & big endian machines 0xFFFF == ntohs(-1) */
ushort NetOurNativeVLAN = htons(-1); /* dido */ ushort NetOurVLAN = 0xFFFF; /* default is without VLAN */
ushort NetOurNativeVLAN = 0xFFFF; /* ditto */
char BootFile[128]; /* Boot File name */ char BootFile[128]; /* Boot File name */
@ -170,43 +171,45 @@ uchar NetArpWaitPacketBuf[PKTSIZE_ALIGN + PKTALIGN];
ulong NetArpWaitTimerStart; ulong NetArpWaitTimerStart;
int NetArpWaitTry; int NetArpWaitTry;
void ArpRequest(void) void ArpRequest (void)
{ {
int i; int i;
volatile uchar *pkt; volatile uchar *pkt;
ARP_t * arp; ARP_t *arp;
#ifdef ET_DEBUG #ifdef ET_DEBUG
printf("ARP broadcast %d\n", NetArpWaitTry); printf ("ARP broadcast %d\n", NetArpWaitTry);
#endif #endif
pkt = NetTxPacket; pkt = NetTxPacket;
pkt += NetSetEther(pkt, NetBcastAddr, PROT_ARP); pkt += NetSetEther (pkt, NetBcastAddr, PROT_ARP);
arp = (ARP_t *)pkt; arp = (ARP_t *) pkt;
arp->ar_hrd = htons(ARP_ETHER); arp->ar_hrd = htons (ARP_ETHER);
arp->ar_pro = htons(PROT_IP); arp->ar_pro = htons (PROT_IP);
arp->ar_hln = 6; arp->ar_hln = 6;
arp->ar_pln = 4; arp->ar_pln = 4;
arp->ar_op = htons(ARPOP_REQUEST); arp->ar_op = htons (ARPOP_REQUEST);
memcpy (&arp->ar_data[0], NetOurEther, 6); /* source ET addr */ memcpy (&arp->ar_data[0], NetOurEther, 6); /* source ET addr */
NetWriteIP((uchar*)&arp->ar_data[6], NetOurIP); /* source IP addr */ NetWriteIP ((uchar *) & arp->ar_data[6], NetOurIP); /* source IP addr */
for (i=10; i<16; ++i) { for (i = 10; i < 16; ++i) {
arp->ar_data[i] = 0; /* dest ET addr = 0 */ arp->ar_data[i] = 0; /* dest ET addr = 0 */
} }
if((NetArpWaitPacketIP & NetOurSubnetMask) != (NetOurIP & NetOurSubnetMask)) { if ((NetArpWaitPacketIP & NetOurSubnetMask) !=
(NetOurIP & NetOurSubnetMask)) {
if (NetOurGatewayIP == 0) { if (NetOurGatewayIP == 0) {
puts ("## Warning: gatewayip needed but not set\n"); puts ("## Warning: gatewayip needed but not set\n");
} }
NetArpWaitReplyIP = NetOurGatewayIP; NetArpWaitReplyIP = NetOurGatewayIP;
} else } else {
NetArpWaitReplyIP = NetArpWaitPacketIP; NetArpWaitReplyIP = NetArpWaitPacketIP;
}
NetWriteIP((uchar*)&arp->ar_data[16], NetArpWaitReplyIP); NetWriteIP ((uchar *) & arp->ar_data[16], NetArpWaitReplyIP);
(void) eth_send(NetTxPacket, (pkt - NetTxPacket) + ARP_HDR_SIZE); (void) eth_send (NetTxPacket, (pkt - NetTxPacket) + ARP_HDR_SIZE);
} }
void ArpTimeoutCheck(void) void ArpTimeoutCheck(void)
@ -260,7 +263,6 @@ NetLoop(proto_t protocol)
if (!NetTxPacket) { if (!NetTxPacket) {
int i; int i;
/* /*
* Setup packet buffers, aligned correctly. * Setup packet buffers, aligned correctly.
*/ */
@ -269,7 +271,6 @@ NetLoop(proto_t protocol)
for (i = 0; i < PKTBUFSRX; i++) { for (i = 0; i < PKTBUFSRX; i++) {
NetRxPackets[i] = NetTxPacket + (i+1)*PKTSIZE_ALIGN; NetRxPackets[i] = NetTxPacket + (i+1)*PKTSIZE_ALIGN;
} }
} }
if (!NetArpWaitTxPacket) { if (!NetArpWaitTxPacket) {
@ -279,8 +280,10 @@ NetLoop(proto_t protocol)
} }
eth_halt(); eth_halt();
#ifdef CONFIG_NET_MULTI
eth_set_current(); eth_set_current();
if(eth_init(bd) < 0) #endif
if (eth_init(bd) < 0)
return(-1); return(-1);
restart: restart:
@ -519,43 +522,42 @@ startAgainHandler(uchar * pkt, unsigned dest, unsigned src, unsigned len)
/* Totally ignore the packet */ /* Totally ignore the packet */
} }
void void NetStartAgain (void)
NetStartAgain(void)
{ {
#ifdef CONFIG_NET_MULTI
DECLARE_GLOBAL_DATA_PTR; DECLARE_GLOBAL_DATA_PTR;
char *s; #endif
char *nretry;
int noretry = 0, once = 0;
if ((s = getenv("netretry")) != NULL && *s == 'n') { if ((nretry = getenv ("netretry")) != NULL) {
eth_halt(); noretry = (strcmp (nretry, "no") == 0);
once = (strcmp (nretry, "once") == 0);
}
if (noretry) {
eth_halt ();
NetState = NETLOOP_FAIL; NetState = NETLOOP_FAIL;
return; return;
} }
#ifndef CONFIG_NET_MULTI #ifndef CONFIG_NET_MULTI
NetSetTimeout(10 * CFG_HZ, startAgainTimeout); NetSetTimeout (10 * CFG_HZ, startAgainTimeout);
NetSetHandler(startAgainHandler); NetSetHandler (startAgainHandler);
#else #else /* !CONFIG_NET_MULTI*/
eth_halt(); eth_halt ();
eth_try_another(!NetRestarted); eth_try_another (!NetRestarted);
eth_init(gd->bd); eth_init (gd->bd);
if (NetRestartWrap) if (NetRestartWrap) {
{
NetRestartWrap = 0; NetRestartWrap = 0;
if (NetDevExists) if (NetDevExists && !once) {
{ NetSetTimeout (10 * CFG_HZ, startAgainTimeout);
NetSetTimeout(10 * CFG_HZ, startAgainTimeout); NetSetHandler (startAgainHandler);
NetSetHandler(startAgainHandler); } else {
}
else
{
NetState = NETLOOP_FAIL; NetState = NETLOOP_FAIL;
} }
} } else {
else
{
NetState = NETLOOP_RESTART; NetState = NETLOOP_RESTART;
} }
#endif #endif /* CONFIG_NET_MULTI */
} }
/**********************************************************************/ /**********************************************************************/
@ -637,7 +639,7 @@ NetSendUDPPacket(uchar *ether, IPaddr_t dest, int dport, int sport, int len)
NetSetIP (pkt, dest, dport, sport, len); NetSetIP (pkt, dest, dport, sport, len);
(void) eth_send(NetTxPacket, (pkt - NetTxPacket) + IP_HDR_SIZE + len); (void) eth_send(NetTxPacket, (pkt - NetTxPacket) + IP_HDR_SIZE + len);
return 0; /* transmited */ return 0; /* transmitted */
} }
#if (CONFIG_COMMANDS & CFG_CMD_PING) #if (CONFIG_COMMANDS & CFG_CMD_PING)
@ -722,14 +724,13 @@ static void PingStart(void)
{ {
#if defined(CONFIG_NET_MULTI) #if defined(CONFIG_NET_MULTI)
printf ("Using %s device\n", eth_get_name()); printf ("Using %s device\n", eth_get_name());
#endif #endif /* CONFIG_NET_MULTI */
NetSetTimeout (10 * CFG_HZ, PingTimeout); NetSetTimeout (10 * CFG_HZ, PingTimeout);
NetSetHandler (PingHandler); NetSetHandler (PingHandler);
PingSend(); PingSend();
} }
#endif /* CFG_CMD_PING */
#endif
#if (CONFIG_COMMANDS & CFG_CMD_CDP) #if (CONFIG_COMMANDS & CFG_CMD_CDP)
@ -812,9 +813,12 @@ int CDPSendTrigger(void)
volatile ushort *s; volatile ushort *s;
volatile ushort *cp; volatile ushort *cp;
Ethernet_t *et; Ethernet_t *et;
char buf[32];
int len; int len;
ushort chksum; ushort chksum;
#if defined(CONFIG_CDP_DEVICE_ID) || defined(CONFIG_CDP_PORT_ID) || \
defined(CONFIG_CDP_VERSION) || defined(CONFIG_CDP_PLATFORM)
char buf[32];
#endif
pkt = NetTxPacket; pkt = NetTxPacket;
et = (Ethernet_t *)pkt; et = (Ethernet_t *)pkt;
@ -1073,8 +1077,7 @@ static void CDPStart(void)
CDPSendTrigger(); CDPSendTrigger();
} }
#endif /* CFG_CMD_CDP */
#endif
void void
@ -1381,7 +1384,6 @@ NetReceive(volatile uchar * inpkt, int len)
ntohs(ip->udp_dst), ntohs(ip->udp_dst),
ntohs(ip->udp_src), ntohs(ip->udp_src),
ntohs(ip->udp_len) - 8); ntohs(ip->udp_len) - 8);
break; break;
} }
} }
@ -1409,7 +1411,6 @@ static int net_check_prereq (proto_t protocol)
puts ("*** ERROR: `serverip' not set\n"); puts ("*** ERROR: `serverip' not set\n");
return (1); return (1);
} }
#if (CONFIG_COMMANDS & CFG_CMD_PING) #if (CONFIG_COMMANDS & CFG_CMD_PING)
common: common:
#endif #endif
@ -1424,10 +1425,10 @@ static int net_check_prereq (proto_t protocol)
case RARP: case RARP:
case BOOTP: case BOOTP:
case CDP: case CDP:
if (memcmp(NetOurEther, "\0\0\0\0\0\0", 6) == 0) { if (memcmp (NetOurEther, "\0\0\0\0\0\0", 6) == 0) {
#ifdef CONFIG_NET_MULTI #ifdef CONFIG_NET_MULTI
extern int eth_get_dev_index (void); extern int eth_get_dev_index (void);
int num = eth_get_dev_index(); int num = eth_get_dev_index ();
switch (num) { switch (num) {
case -1: case -1:
@ -1451,7 +1452,7 @@ static int net_check_prereq (proto_t protocol)
} }
/* Fall through */ /* Fall through */
default: default:
return(0); return (0);
} }
return (0); /* OK */ return (0); /* OK */
} }
@ -1529,7 +1530,7 @@ NetSetIP(volatile uchar * xip, IPaddr_t dest, int dport, int sport, int len)
/* /*
* Construct an IP and UDP header. * Construct an IP and UDP header.
(need to set no fragment bit - XXX) * (need to set no fragment bit - XXX)
*/ */
ip->ip_hl_v = 0x45; /* IP_HDR_SIZE / 4 (not including UDP) */ ip->ip_hl_v = 0x45; /* IP_HDR_SIZE / 4 (not including UDP) */
ip->ip_tos = 0; ip->ip_tos = 0;