|
|
|
@ -304,76 +304,73 @@ int do_bootvx(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) |
|
|
|
|
tmp = env_get("bootaddr"); |
|
|
|
|
if (!tmp) { |
|
|
|
|
printf("## VxWorks bootline address not specified\n"); |
|
|
|
|
} else { |
|
|
|
|
bootaddr = simple_strtoul(tmp, NULL, 16); |
|
|
|
|
return 1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bootaddr = simple_strtoul(tmp, NULL, 16); |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Check to see if the bootline is defined in the 'bootargs' parameter. |
|
|
|
|
* If it is not defined, we may be able to construct the info. |
|
|
|
|
*/ |
|
|
|
|
bootline = env_get("bootargs"); |
|
|
|
|
if (!bootline) { |
|
|
|
|
tmp = env_get("bootdev"); |
|
|
|
|
if (tmp) { |
|
|
|
|
strcpy(build_buf, tmp); |
|
|
|
|
ptr = strlen(tmp); |
|
|
|
|
} else { |
|
|
|
|
printf("## VxWorks boot device not specified\n"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
tmp = env_get("bootfile"); |
|
|
|
|
if (tmp) |
|
|
|
|
ptr += sprintf(build_buf + ptr, "host:%s ", tmp); |
|
|
|
|
else |
|
|
|
|
ptr += sprintf(build_buf + ptr, "host:vxWorks "); |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Check to see if the bootline is defined in the 'bootargs' |
|
|
|
|
* parameter. If it is not defined, we may be able to |
|
|
|
|
* construct the info. |
|
|
|
|
* The following parameters are only needed if 'bootdev' |
|
|
|
|
* is an ethernet device, otherwise they are optional. |
|
|
|
|
*/ |
|
|
|
|
bootline = env_get("bootargs"); |
|
|
|
|
if (!bootline) { |
|
|
|
|
tmp = env_get("bootdev"); |
|
|
|
|
tmp = env_get("ipaddr"); |
|
|
|
|
if (tmp) { |
|
|
|
|
ptr += sprintf(build_buf + ptr, "e=%s", tmp); |
|
|
|
|
tmp = env_get("netmask"); |
|
|
|
|
if (tmp) { |
|
|
|
|
strcpy(build_buf, tmp); |
|
|
|
|
ptr = strlen(tmp); |
|
|
|
|
} else |
|
|
|
|
printf("## VxWorks boot device not specified\n"); |
|
|
|
|
|
|
|
|
|
tmp = env_get("bootfile"); |
|
|
|
|
if (tmp) |
|
|
|
|
ptr += sprintf(build_buf + ptr, |
|
|
|
|
"host:%s ", tmp); |
|
|
|
|
else |
|
|
|
|
u32 mask = env_get_ip("netmask").s_addr; |
|
|
|
|
ptr += sprintf(build_buf + ptr, |
|
|
|
|
"host:vxWorks "); |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* The following parameters are only needed if 'bootdev' |
|
|
|
|
* is an ethernet device, otherwise they are optional. |
|
|
|
|
*/ |
|
|
|
|
tmp = env_get("ipaddr"); |
|
|
|
|
if (tmp) { |
|
|
|
|
ptr += sprintf(build_buf + ptr, "e=%s", tmp); |
|
|
|
|
tmp = env_get("netmask"); |
|
|
|
|
if (tmp) { |
|
|
|
|
u32 mask = env_get_ip("netmask").s_addr; |
|
|
|
|
ptr += sprintf(build_buf + ptr, |
|
|
|
|
":%08x ", ntohl(mask)); |
|
|
|
|
} else { |
|
|
|
|
ptr += sprintf(build_buf + ptr, " "); |
|
|
|
|
} |
|
|
|
|
":%08x ", ntohl(mask)); |
|
|
|
|
} else { |
|
|
|
|
ptr += sprintf(build_buf + ptr, " "); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
tmp = env_get("serverip"); |
|
|
|
|
if (tmp) |
|
|
|
|
ptr += sprintf(build_buf + ptr, "h=%s ", tmp); |
|
|
|
|
|
|
|
|
|
tmp = env_get("gatewayip"); |
|
|
|
|
if (tmp) |
|
|
|
|
ptr += sprintf(build_buf + ptr, "g=%s ", tmp); |
|
|
|
|
tmp = env_get("serverip"); |
|
|
|
|
if (tmp) |
|
|
|
|
ptr += sprintf(build_buf + ptr, "h=%s ", tmp); |
|
|
|
|
|
|
|
|
|
tmp = env_get("hostname"); |
|
|
|
|
if (tmp) |
|
|
|
|
ptr += sprintf(build_buf + ptr, "tn=%s ", tmp); |
|
|
|
|
tmp = env_get("gatewayip"); |
|
|
|
|
if (tmp) |
|
|
|
|
ptr += sprintf(build_buf + ptr, "g=%s ", tmp); |
|
|
|
|
|
|
|
|
|
tmp = env_get("othbootargs"); |
|
|
|
|
if (tmp) { |
|
|
|
|
strcpy(build_buf + ptr, tmp); |
|
|
|
|
ptr += strlen(tmp); |
|
|
|
|
} |
|
|
|
|
tmp = env_get("hostname"); |
|
|
|
|
if (tmp) |
|
|
|
|
ptr += sprintf(build_buf + ptr, "tn=%s ", tmp); |
|
|
|
|
|
|
|
|
|
bootline = build_buf; |
|
|
|
|
tmp = env_get("othbootargs"); |
|
|
|
|
if (tmp) { |
|
|
|
|
strcpy(build_buf + ptr, tmp); |
|
|
|
|
ptr += strlen(tmp); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
memcpy((void *)bootaddr, bootline, |
|
|
|
|
max(strlen(bootline), (size_t)255)); |
|
|
|
|
flush_cache(bootaddr, max(strlen(bootline), (size_t)255)); |
|
|
|
|
printf("## Using bootline (@ 0x%lx): %s\n", bootaddr, |
|
|
|
|
(char *)bootaddr); |
|
|
|
|
bootline = build_buf; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
memcpy((void *)bootaddr, bootline, max(strlen(bootline), (size_t)255)); |
|
|
|
|
flush_cache(bootaddr, max(strlen(bootline), (size_t)255)); |
|
|
|
|
printf("## Using bootline (@ 0x%lx): %s\n", bootaddr, (char *)bootaddr); |
|
|
|
|
|
|
|
|
|
#ifdef CONFIG_X86 |
|
|
|
|
/*
|
|
|
|
|
* Get VxWorks's physical memory base address from environment, |
|
|
|
|