======================================================================
Changes for U-Boot 1.1.1:
======================================================================
+
+* Patch by Rune Torgersen, 16 Apr 2004:
+ LBA48 fixes
* Patches by Pantelis Antoniou, 16 Apr 2004:
- add support for a new version of an Intracom board and fix
2. A new exit command was added which terminates the current
executing script.
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:
add support for Intel Assabet board
selected via environment 'videomode'. Two diferent ways
are possible:
- "videomode=num" 'num' is a standard LiLo mode numbers.
- Following standard modes are supported (* is default):
+ Following standard modes are supported (* is default):
Colors 640x480 800x600 1024x768 1152x864 1280x1024
-------------+---------------------------------------------
the DHCP server.
- CDP Options:
- CONFIG_CDP_DEVICE_ID
+ CONFIG_CDP_DEVICE_ID
The device id used in CDP trigger frames.
- CONFIG_FEC[12]_PHY
Define to the hardcoded PHY address which corresponds
- to the given FEC.
-
- i.e.
- #define CONFIG_FEC1_PHY 4
+ to the given FEC; i. e.
+ #define CONFIG_FEC1_PHY 4
means that the PHY with address 4 is connected to FEC1
When set to -1, means to probe for first available.
netretry - When set to "no" each network operation will
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
themselves.
#ifdef CONFIG_LBA48
if (iop->command_set_2 & 0x0400) { /* LBA 48 support */
- dev_desc->lba48support = 1;
- dev_desc->lba48 = (unsigned long long)iop->lba48_capacity[0] |
+ dev_desc->lba48 = 1;
+ dev_desc->lba = (unsigned long long)iop->lba48_capacity[0] |
((unsigned long long)iop->lba48_capacity[1] << 16) |
((unsigned long long)iop->lba48_capacity[2] << 32) |
((unsigned long long)iop->lba48_capacity[3] << 48);
} else {
- dev_desc->lba48support = 0;
dev_desc->lba48 = 0;
}
#endif /* CONFIG_LBA48 */
ulong addr, length;
ulong crc;
ulong *ptr;
- ulong vcrc;
+ ulong vcrc;
int verify;
int ac;
char **av;
);
#endif /* CFG_CMD_NFS */
-static void netboot_update_env(void)
+static void netboot_update_env (void)
{
- char tmp[22] ;
+ char tmp[22];
- if (NetOurGatewayIP) {
- ip_to_string (NetOurGatewayIP, tmp);
- setenv("gatewayip", tmp);
- }
-
- if (NetOurSubnetMask) {
- ip_to_string (NetOurSubnetMask, tmp);
- setenv("netmask", tmp);
- }
+ if (NetOurGatewayIP) {
+ ip_to_string (NetOurGatewayIP, tmp);
+ setenv ("gatewayip", tmp);
+ }
- if (NetOurHostName[0])
- setenv("hostname", NetOurHostName);
+ if (NetOurSubnetMask) {
+ ip_to_string (NetOurSubnetMask, tmp);
+ setenv ("netmask", tmp);
+ }
- if (NetOurRootPath[0])
- setenv("rootpath", NetOurRootPath);
+ if (NetOurHostName[0])
+ setenv ("hostname", NetOurHostName);
- if (NetOurIP) {
- ip_to_string (NetOurIP, tmp);
- setenv("ipaddr", tmp);
- }
+ if (NetOurRootPath[0])
+ setenv ("rootpath", NetOurRootPath);
- if (NetServerIP) {
- ip_to_string (NetServerIP, tmp);
- setenv("serverip", tmp);
- }
+ if (NetOurIP) {
+ ip_to_string (NetOurIP, tmp);
+ setenv ("ipaddr", tmp);
+ }
- if (NetOurDNSIP) {
- ip_to_string (NetOurDNSIP, tmp);
- setenv("dnsip", tmp);
- }
+ if (NetServerIP) {
+ ip_to_string (NetServerIP, tmp);
+ setenv ("serverip", tmp);
+ }
+ if (NetOurDNSIP) {
+ ip_to_string (NetOurDNSIP, tmp);
+ setenv ("dnsip", tmp);
+ }
#if (CONFIG_BOOTP_MASK & CONFIG_BOOTP_DNS2)
- if (NetOurDNS2IP) {
- ip_to_string (NetOurDNS2IP, tmp);
- setenv("dnsip2", tmp);
- }
+ if (NetOurDNS2IP) {
+ ip_to_string (NetOurDNS2IP, tmp);
+ setenv ("dnsip2", tmp);
+ }
#endif
-
- if (NetOurNISDomain[0])
- 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);
- }
-
+ if (NetOurNISDomain[0])
+ setenv ("domain", NetOurNISDomain);
}
+
static int
netboot_common (int proto, cmd_tbl_t *cmdtp, int argc, char *argv[])
{
/*
- * (C) Copyright 2000-2002
+ * (C) Copyright 2000-2004
* Wolfgang Denk, DENX Software Engineering, wd@denx.de.
*
* See file CREDITS for list of people who contributed to this
#if (! defined(CONFIG_I82365)) && (! defined(CONFIG_PXA_PCMCIA))
static u_int m8xx_get_graycode(u_int size);
-#endif /* CONFIG_I82365 */
+#endif /* !CONFIG_I82365, !CONFIG_PXA_PCMCIA */
#if 0
static u_int m8xx_get_speed(u_int ns, u_int is_io);
#endif
&((immap_t *)CFG_IMMR)->im_pcmcia.pcmc_pgcra,
&((immap_t *)CFG_IMMR)->im_pcmcia.pcmc_pgcrb,
};
-
#define PCMCIA_PGCRX(slot) (*pcmcia_pgcrx[slot])
+#endif /* CONFIG_PXA_PCMCIA */
+
#endif /* CONFIG_I82365 */
#if defined(CONFIG_IDE_8xx_PCCARD) || defined(CONFIG_PXA_PCMCIA)
static void print_fixed (volatile uchar *p);
static int identify (volatile uchar *p);
static int check_ide_device (int slot);
-#endif /* CONFIG_IDE_8xx_PCCARD */
-
-#endif
+#endif /* CONFIG_IDE_8xx_PCCARD, CONFIG_PXA_PCMCIA */
const char *indent = "\t ";
#if 0
{
printf("test:");
- left = 1;
+ left = 1;
while (argv[left])
printf(" %s", argv[left++]);
}
#endif
-
+
last_expr = 0;
left = argc - 1; ap = argv + 1;
if (left > 0 && strcmp(ap[0], "!") == 0) {
DECLARE_GLOBAL_DATA_PTR;
char *stdinname, *stdoutname, *stderrname;
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 */
gd->jt[XF_getc] = serial_getc;
for (i = 0; i < 3; i++) {
setenv (stdio_names[i], stdio_devices[i]->name);
}
-#endif /* CFG_CONSOLE_ENV_OVERWRITE */
+#endif /* CFG_CONSOLE_ENV_OVERWRITE */
#if 0
/* If nothing usable installed, use only the initial console */
#if defined(CONFIG_MII) && defined(CONFIG_RMII)
/* the MII interface is connected to FEC1
- so for the miiphy_xxx function to work we must
- call mii_init since fec_halt messes the thing up */
-
+ * so for the miiphy_xxx function to work we must
+ * call mii_init since fec_halt messes the thing up
+ */
if (efis->ether_index != 0)
mii_init();
if ((dev_desc->lba * dev_desc->blksz)>0L) {
ulong mb, mb_quot, mb_rem, gb, gb_quot, gb_rem;
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));
mb = (10 * lba512) / 2048; /* 2048 = (1024 * 1024) / 512 MB */
gb_quot = gb / 10;
gb_rem = gb - (10 * gb_quot);
#ifdef CONFIG_LBA48
- if (dev_desc->lba48support)
+ if (dev_desc->lba48)
printf (" Supports 48-bit addressing\n");
#endif
#if defined(CFG_64BIT_LBA) && defined(CFG_64BIT_VSPRINTF)
+------+----------------+------------------------------------------------------------
| # | Name | Comment
+------+----------------+------------------------------------------------------------
- | 0 | BKBR1 | (V1) Keyboard input scan
- | 1 | BKBR3 | (V1) Keyboard input scan
- | 2 | BKBR4 | (V1) Keyboard input scan
- | 3 | BKBR2 | (V1) Keyboard input scan
- | 4 | HOOK | (V1) Hook switch
+ | 0 | BKBR1 | (V1) Keyboard input scan
+ | 1 | BKBR3 | (V1) Keyboard input scan
+ | 2 | BKBR4 | (V1) Keyboard input scan
+ | 3 | BKBR2 | (V1) Keyboard input scan
+ | 4 | HOOK | (V1) Hook switch
| 5 | BT_LINK | (V1) Bluetooth link status
| 6 | HOST_WAKE | (V1) Bluetooth host wake up
| 7 | OK_ETH | (V1) Cisco inline power OK status
+------+----------------+------------------------------------------------------------
| # | Name | Comment
+------+----------------+------------------------------------------------------------
- | 0 | KEY1 | Keyboard output scan
- | 1 | KEY2 | Keyboard output scan
- | 2 | KEY3 | Keyboard output scan
- | 3 | KEY4 | Keyboard output scan
- | 4 | KEY5 | Keyboard output scan
- | 5 | KEY6 | Keyboard output scan
- | 6 | KEY7 | Keyboard output scan
+ | 0 | KEY1 | Keyboard output scan
+ | 1 | KEY2 | Keyboard output scan
+ | 2 | KEY3 | Keyboard output scan
+ | 3 | KEY4 | Keyboard output scan
+ | 4 | KEY5 | Keyboard output scan
+ | 5 | KEY6 | Keyboard output scan
+ | 6 | KEY7 | Keyboard output scan
| 7 | BT_WAKE | Bluetooth wake up
+------+----------------+------------------------------------------------------------
*/
#ifndef _PART_H
#define _PART_H
-
+#include <ide.h>
typedef struct block_dev_desc {
int if_type; /* type of the interface */
#ifdef CONFIG_LBA48
unsigned char lba48; /* device can use 48bit addr (ATA/ATAPI v7) */
#endif
- unsigned long lba; /* number of blocks */
+ lbaint_t lba; /* number of blocks */
unsigned long blksz; /* block size */
unsigned char vendor [40+1]; /* IDE model, SCSI Vendor */
unsigned char product[20+1]; /* IDE Serial no, SCSI product */
unsigned char revision[8+1]; /* firmware revision */
unsigned long (*block_read)(int dev,
unsigned long start,
- unsigned long blkcnt,
+ lbaint_t blkcnt,
unsigned long *buffer);
}block_dev_desc_t;
uchar NetEtherNullAddr[6] =
{ 0, 0, 0, 0, 0, 0 };
#if (CONFIG_COMMANDS & CFG_CMD_CDP)
-uchar NetCDPAddr[6] = /* Ethernet bcast address */
+uchar NetCDPAddr[6] = /* Ethernet bcast address */
{ 0x01, 0x00, 0x0c, 0xcc, 0xcc, 0xcc };
#endif
int NetState; /* Network loop state */
static int NetDevExists = 0; /* At least one device configured */
#endif
-ushort NetOurVLAN = ntohs(-1); /* default is without VLAN */
-ushort NetOurNativeVLAN = htons(-1); /* dido */
+/* XXX in both little & big endian machines 0xFFFF == ntohs(-1) */
+ushort NetOurVLAN = 0xFFFF; /* default is without VLAN */
+ushort NetOurNativeVLAN = 0xFFFF; /* ditto */
char BootFile[128]; /* Boot File name */
ulong NetArpWaitTimerStart;
int NetArpWaitTry;
-void ArpRequest(void)
+void ArpRequest (void)
{
int i;
volatile uchar *pkt;
- ARP_t * arp;
+ ARP_t *arp;
#ifdef ET_DEBUG
- printf("ARP broadcast %d\n", NetArpWaitTry);
+ printf ("ARP broadcast %d\n", NetArpWaitTry);
#endif
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_pro = htons(PROT_IP);
+ arp->ar_hrd = htons (ARP_ETHER);
+ arp->ar_pro = htons (PROT_IP);
arp->ar_hln = 6;
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 */
- NetWriteIP((uchar*)&arp->ar_data[6], NetOurIP); /* source IP addr */
- for (i=10; i<16; ++i) {
- arp->ar_data[i] = 0; /* dest ET addr = 0 */
+ memcpy (&arp->ar_data[0], NetOurEther, 6); /* source ET addr */
+ NetWriteIP ((uchar *) & arp->ar_data[6], NetOurIP); /* source IP addr */
+ for (i = 10; i < 16; ++i) {
+ arp->ar_data[i] = 0; /* dest ET addr = 0 */
}
- if((NetArpWaitPacketIP & NetOurSubnetMask) != (NetOurIP & NetOurSubnetMask)) {
- if (NetOurGatewayIP == 0) {
- puts ("## Warning: gatewayip needed but not set\n");
- }
- NetArpWaitReplyIP = NetOurGatewayIP;
- } else
- NetArpWaitReplyIP = NetArpWaitPacketIP;
+ if ((NetArpWaitPacketIP & NetOurSubnetMask) !=
+ (NetOurIP & NetOurSubnetMask)) {
+ if (NetOurGatewayIP == 0) {
+ puts ("## Warning: gatewayip needed but not set\n");
+ }
+ NetArpWaitReplyIP = NetOurGatewayIP;
+ } else {
+ NetArpWaitReplyIP = NetArpWaitPacketIP;
+ }
- NetWriteIP((uchar*)&arp->ar_data[16], NetArpWaitReplyIP);
- (void) eth_send(NetTxPacket, (pkt - NetTxPacket) + ARP_HDR_SIZE);
+ NetWriteIP ((uchar *) & arp->ar_data[16], NetArpWaitReplyIP);
+ (void) eth_send (NetTxPacket, (pkt - NetTxPacket) + ARP_HDR_SIZE);
}
void ArpTimeoutCheck(void)
if (!NetTxPacket) {
int i;
-
/*
* Setup packet buffers, aligned correctly.
*/
for (i = 0; i < PKTBUFSRX; i++) {
NetRxPackets[i] = NetTxPacket + (i+1)*PKTSIZE_ALIGN;
}
-
}
if (!NetArpWaitTxPacket) {
}
eth_halt();
+#ifdef CONFIG_NET_MULTI
eth_set_current();
- if(eth_init(bd) < 0)
- return(-1);
+#endif
+ if (eth_init(bd) < 0)
+ return(-1);
restart:
#ifdef CONFIG_NET_MULTI
/* Totally ignore the packet */
}
-void
-NetStartAgain(void)
+void NetStartAgain (void)
{
+#ifdef CONFIG_NET_MULTI
DECLARE_GLOBAL_DATA_PTR;
- char *s;
+#endif
+ char *nretry;
+ int noretry = 0, once = 0;
- if ((s = getenv("netretry")) != NULL && *s == 'n') {
- eth_halt();
+ if ((nretry = getenv ("netretry")) != NULL) {
+ noretry = (strcmp (nretry, "no") == 0);
+ once = (strcmp (nretry, "once") == 0);
+ }
+ if (noretry) {
+ eth_halt ();
NetState = NETLOOP_FAIL;
return;
}
-
#ifndef CONFIG_NET_MULTI
- NetSetTimeout(10 * CFG_HZ, startAgainTimeout);
- NetSetHandler(startAgainHandler);
-#else
- eth_halt();
- eth_try_another(!NetRestarted);
- eth_init(gd->bd);
- if (NetRestartWrap)
- {
+ NetSetTimeout (10 * CFG_HZ, startAgainTimeout);
+ NetSetHandler (startAgainHandler);
+#else /* !CONFIG_NET_MULTI*/
+ eth_halt ();
+ eth_try_another (!NetRestarted);
+ eth_init (gd->bd);
+ if (NetRestartWrap) {
NetRestartWrap = 0;
- if (NetDevExists)
- {
- NetSetTimeout(10 * CFG_HZ, startAgainTimeout);
- NetSetHandler(startAgainHandler);
- }
- else
- {
+ if (NetDevExists && !once) {
+ NetSetTimeout (10 * CFG_HZ, startAgainTimeout);
+ NetSetHandler (startAgainHandler);
+ } else {
NetState = NETLOOP_FAIL;
}
- }
- else
- {
+ } else {
NetState = NETLOOP_RESTART;
}
-#endif
+#endif /* CONFIG_NET_MULTI */
}
/**********************************************************************/
#ifdef ET_DEBUG
printf("sending UDP to %08lx/%02x:%02x:%02x:%02x:%02x:%02x\n",
- dest, ether[0], ether[1], ether[2], ether[3], ether[4], ether[5]);
+ dest, ether[0], ether[1], ether[2], ether[3], ether[4], ether[5]);
#endif
pkt = (uchar *)NetTxPacket;
NetSetIP (pkt, dest, dport, sport, len);
(void) eth_send(NetTxPacket, (pkt - NetTxPacket) + IP_HDR_SIZE + len);
- return 0; /* transmited */
+ return 0; /* transmitted */
}
#if (CONFIG_COMMANDS & CFG_CMD_PING)
{
#if defined(CONFIG_NET_MULTI)
printf ("Using %s device\n", eth_get_name());
-#endif
+#endif /* CONFIG_NET_MULTI */
NetSetTimeout (10 * CFG_HZ, PingTimeout);
NetSetHandler (PingHandler);
PingSend();
}
-
-#endif
+#endif /* CFG_CMD_PING */
#if (CONFIG_COMMANDS & CFG_CMD_CDP)
volatile ushort *s;
volatile ushort *cp;
Ethernet_t *et;
- char buf[32];
int len;
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;
et = (Ethernet_t *)pkt;
CDPSendTrigger();
}
-
-#endif
+#endif /* CFG_CMD_CDP */
void
ntohs(ip->udp_dst),
ntohs(ip->udp_src),
ntohs(ip->udp_len) - 8);
-
break;
}
}
static int net_check_prereq (proto_t protocol)
{
switch (protocol) {
- /* Fall through */
+ /* Fall through */
#if (CONFIG_COMMANDS & CFG_CMD_PING)
case PING:
- if (NetPingIP == 0) {
- puts ("*** ERROR: ping address not given\n");
- return (1);
- }
- goto common;
+ if (NetPingIP == 0) {
+ puts ("*** ERROR: ping address not given\n");
+ return (1);
+ }
+ goto common;
#endif
#if (CONFIG_COMMANDS & CFG_CMD_NFS)
case NFS:
#endif
case TFTP:
- if (NetServerIP == 0) {
- puts ("*** ERROR: `serverip' not set\n");
- return (1);
- }
-
+ if (NetServerIP == 0) {
+ puts ("*** ERROR: `serverip' not set\n");
+ return (1);
+ }
#if (CONFIG_COMMANDS & CFG_CMD_PING)
- common:
+ common:
#endif
- if (NetOurIP == 0) {
- puts ("*** ERROR: `ipaddr' not set\n");
- return (1);
- }
- /* Fall through */
+ if (NetOurIP == 0) {
+ puts ("*** ERROR: `ipaddr' not set\n");
+ return (1);
+ }
+ /* Fall through */
case DHCP:
case RARP:
case BOOTP:
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
- extern int eth_get_dev_index (void);
- int num = eth_get_dev_index();
+ extern int eth_get_dev_index (void);
+ int num = eth_get_dev_index ();
- switch (num) {
- case -1:
+ switch (num) {
+ case -1:
puts ("*** ERROR: No ethernet found.\n");
return (1);
- case 0:
+ case 0:
puts ("*** ERROR: `ethaddr' not set\n");
break;
- default:
+ default:
printf ("*** ERROR: `eth%daddr' not set\n",
num);
break;
- }
+ }
- NetStartAgain ();
- return (2);
+ NetStartAgain ();
+ return (2);
#else
- puts ("*** ERROR: `ethaddr' not set\n");
- return (1);
+ puts ("*** ERROR: `ethaddr' not set\n");
+ return (1);
#endif
- }
- /* Fall through */
- default:
- return(0);
+ }
+ /* Fall through */
+ default:
+ return (0);
}
- return (0); /* OK */
+ return (0); /* OK */
}
/**********************************************************************/
/*
* 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_tos = 0;
(int) ((x >> 24) & 0xff),
(int) ((x >> 16) & 0xff),
(int) ((x >> 8) & 0xff), (int) ((x >> 0) & 0xff)
- );
+ );
}
IPaddr_t string_to_ip(char *s)