Merge branch 'master' of git://git.denx.de/u-boot-net
This commit is contained in:
commit
c645b181a9
6 changed files with 30 additions and 13 deletions
|
@ -154,8 +154,10 @@ static int
|
||||||
netboot_common (proto_t proto, cmd_tbl_t *cmdtp, int argc, char *argv[])
|
netboot_common (proto_t proto, cmd_tbl_t *cmdtp, int argc, char *argv[])
|
||||||
{
|
{
|
||||||
char *s;
|
char *s;
|
||||||
|
char *end;
|
||||||
int rcode = 0;
|
int rcode = 0;
|
||||||
int size;
|
int size;
|
||||||
|
ulong addr;
|
||||||
|
|
||||||
/* pre-set load_addr */
|
/* pre-set load_addr */
|
||||||
if ((s = getenv("loadaddr")) != NULL) {
|
if ((s = getenv("loadaddr")) != NULL) {
|
||||||
|
@ -166,15 +168,17 @@ netboot_common (proto_t proto, cmd_tbl_t *cmdtp, int argc, char *argv[])
|
||||||
case 1:
|
case 1:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2: /* only one arg - accept two forms:
|
case 2: /*
|
||||||
* just load address, or just boot file name.
|
* Only one arg - accept two forms:
|
||||||
* The latter form must be written "filename" here.
|
* Just load address, or just boot file name. The latter
|
||||||
|
* form must be written in a format which can not be
|
||||||
|
* mis-interpreted as a valid number.
|
||||||
*/
|
*/
|
||||||
if (argv[1][0] == '"') { /* just boot filename */
|
addr = simple_strtoul(argv[1], &end, 16);
|
||||||
copy_filename (BootFile, argv[1], sizeof(BootFile));
|
if (end == (argv[1] + strlen(argv[1])))
|
||||||
} else { /* load address */
|
load_addr = addr;
|
||||||
load_addr = simple_strtoul(argv[1], NULL, 16);
|
else
|
||||||
}
|
copy_filename(BootFile, argv[1], sizeof(BootFile));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3: load_addr = simple_strtoul(argv[1], NULL, 16);
|
case 3: load_addr = simple_strtoul(argv[1], NULL, 16);
|
||||||
|
|
|
@ -1196,6 +1196,9 @@ struct phy_info phy_info_M88E1121R = {
|
||||||
{MIIM_88E1121_PHY_LED_CTRL, miim_read,
|
{MIIM_88E1121_PHY_LED_CTRL, miim_read,
|
||||||
&mii_88E1121_set_led},
|
&mii_88E1121_set_led},
|
||||||
{MIIM_CONTROL, MIIM_CONTROL_INIT, &mii_cr_init},
|
{MIIM_CONTROL, MIIM_CONTROL_INIT, &mii_cr_init},
|
||||||
|
/* Disable IRQs and de-assert interrupt */
|
||||||
|
{MIIM_88E1121_PHY_IRQ_EN, 0, NULL},
|
||||||
|
{MIIM_88E1121_PHY_IRQ_STATUS, miim_read, NULL},
|
||||||
{miim_end,}
|
{miim_end,}
|
||||||
},
|
},
|
||||||
(struct phy_cmd[]){ /* startup */
|
(struct phy_cmd[]){ /* startup */
|
||||||
|
|
|
@ -200,6 +200,12 @@ typedef struct {
|
||||||
ushort udp_xsum; /* Checksum */
|
ushort udp_xsum; /* Checksum */
|
||||||
} IP_t;
|
} IP_t;
|
||||||
|
|
||||||
|
#define IP_OFFS 0x1fff /* ip offset *= 8 */
|
||||||
|
#define IP_FLAGS 0xe000 /* first 3 bits */
|
||||||
|
#define IP_FLAGS_RES 0x8000 /* reserved */
|
||||||
|
#define IP_FLAGS_DFRAG 0x4000 /* don't fragments */
|
||||||
|
#define IP_FLAGS_MFRAG 0x2000 /* more fragments */
|
||||||
|
|
||||||
#define IP_HDR_SIZE_NO_UDP (sizeof (IP_t) - 8)
|
#define IP_HDR_SIZE_NO_UDP (sizeof (IP_t) - 8)
|
||||||
#define IP_HDR_SIZE (sizeof (IP_t))
|
#define IP_HDR_SIZE (sizeof (IP_t))
|
||||||
|
|
||||||
|
|
|
@ -226,6 +226,10 @@
|
||||||
#define MIIM_88E1121_PHY_LED_PAGE 3
|
#define MIIM_88E1121_PHY_LED_PAGE 3
|
||||||
#define MIIM_88E1121_PHY_LED_DEF 0x0030
|
#define MIIM_88E1121_PHY_LED_DEF 0x0030
|
||||||
|
|
||||||
|
/* 88E1121 PHY IRQ Enable/Status Register */
|
||||||
|
#define MIIM_88E1121_PHY_IRQ_EN 18
|
||||||
|
#define MIIM_88E1121_PHY_IRQ_STATUS 19
|
||||||
|
|
||||||
#define MIIM_88E1121_PHY_PAGE 22
|
#define MIIM_88E1121_PHY_PAGE 22
|
||||||
|
|
||||||
/* 88E1145 Extended PHY Specific Control Register */
|
/* 88E1145 Extended PHY Specific Control Register */
|
||||||
|
|
|
@ -738,7 +738,7 @@ int PingSend(void)
|
||||||
ip->ip_tos = 0;
|
ip->ip_tos = 0;
|
||||||
ip->ip_len = htons(IP_HDR_SIZE_NO_UDP + 8);
|
ip->ip_len = htons(IP_HDR_SIZE_NO_UDP + 8);
|
||||||
ip->ip_id = htons(NetIPID++);
|
ip->ip_id = htons(NetIPID++);
|
||||||
ip->ip_off = htons(0x4000); /* No fragmentation */
|
ip->ip_off = htons(IP_FLAGS_DFRAG); /* Don't fragment */
|
||||||
ip->ip_ttl = 255;
|
ip->ip_ttl = 255;
|
||||||
ip->ip_p = 0x01; /* ICMP */
|
ip->ip_p = 0x01; /* ICMP */
|
||||||
ip->ip_sum = 0;
|
ip->ip_sum = 0;
|
||||||
|
@ -1402,7 +1402,8 @@ NetReceive(volatile uchar * inpkt, int len)
|
||||||
if ((ip->ip_hl_v & 0xf0) != 0x40) {
|
if ((ip->ip_hl_v & 0xf0) != 0x40) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (ip->ip_off & htons(0x1fff)) { /* Can't deal w/ fragments */
|
/* Can't deal with fragments */
|
||||||
|
if (ip->ip_off & htons(IP_OFFS | IP_FLAGS_MFRAG)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
/* can't deal with headers > 20 bytes */
|
/* can't deal with headers > 20 bytes */
|
||||||
|
@ -1701,7 +1702,7 @@ NetSetIP(volatile uchar * xip, IPaddr_t dest, int dport, int sport, int len)
|
||||||
ip->ip_tos = 0;
|
ip->ip_tos = 0;
|
||||||
ip->ip_len = htons(IP_HDR_SIZE + len);
|
ip->ip_len = htons(IP_HDR_SIZE + len);
|
||||||
ip->ip_id = htons(NetIPID++);
|
ip->ip_id = htons(NetIPID++);
|
||||||
ip->ip_off = htons(0x4000); /* No fragmentation */
|
ip->ip_off = htons(IP_FLAGS_DFRAG); /* Don't fragment */
|
||||||
ip->ip_ttl = 255;
|
ip->ip_ttl = 255;
|
||||||
ip->ip_p = 17; /* UDP */
|
ip->ip_p = 17; /* UDP */
|
||||||
ip->ip_sum = 0;
|
ip->ip_sum = 0;
|
||||||
|
|
|
@ -499,9 +499,8 @@ TftpStart (void)
|
||||||
strncpy(tftp_filename, BootFile, MAX_LEN);
|
strncpy(tftp_filename, BootFile, MAX_LEN);
|
||||||
tftp_filename[MAX_LEN-1] = 0;
|
tftp_filename[MAX_LEN-1] = 0;
|
||||||
} else {
|
} else {
|
||||||
*p++ = '\0';
|
|
||||||
TftpServerIP = string_to_ip (BootFile);
|
TftpServerIP = string_to_ip (BootFile);
|
||||||
strncpy(tftp_filename, p, MAX_LEN);
|
strncpy(tftp_filename, p + 1, MAX_LEN);
|
||||||
tftp_filename[MAX_LEN-1] = 0;
|
tftp_filename[MAX_LEN-1] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue