
From: Rob Herring rob.herring@calxeda.com
Convert scsiboot to use common device and partition parsing function.
Signed-off-by: Rob Herring rob.herring@calxeda.com --- common/cmd_scsi.c | 58 ++++++++++------------------------------------------ 1 files changed, 11 insertions(+), 47 deletions(-)
diff --git a/common/cmd_scsi.c b/common/cmd_scsi.c index fa10751..dcf8b84 100644 --- a/common/cmd_scsi.c +++ b/common/cmd_scsi.c @@ -206,64 +206,28 @@ block_dev_desc_t * scsi_get_dev(int dev) */ int do_scsiboot (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { - char *boot_device = NULL; - char *ep; - int dev, part = 0; - ulong addr, cnt; + int dev, part; + ulong addr = CONFIG_SYS_LOAD_ADDR; + ulong cnt; + block_dev_desc_t *dev_desc; disk_partition_t info; image_header_t *hdr; #if defined(CONFIG_FIT) const void *fit_hdr = NULL; #endif
- switch (argc) { - case 1: - addr = CONFIG_SYS_LOAD_ADDR; - boot_device = getenv ("bootdevice"); - break; - case 2: - addr = simple_strtoul(argv[1], NULL, 16); - boot_device = getenv ("bootdevice"); - break; - case 3: - addr = simple_strtoul(argv[1], NULL, 16); - boot_device = argv[2]; - break; - default: + if (argc > 3) return cmd_usage(cmdtp); - }
- if (!boot_device) { - puts ("\n** No boot device **\n"); - return 1; - } - - dev = simple_strtoul(boot_device, &ep, 16); - printf("booting from dev %d\n",dev); - if (scsi_dev_desc[dev].type == DEV_TYPE_UNKNOWN) { - printf ("\n** Device %d not available\n", dev); - return 1; - } + if (argc > 1) + addr = simple_strtoul(argv[1], NULL, 16);
- if (*ep) { - if (*ep != ':') { - puts ("\n** Invalid boot device, use `dev[:part]' **\n"); - return 1; - } - part = simple_strtoul(++ep, NULL, 16); - } - if (get_partition_info (&scsi_dev_desc[dev], part, &info)) { - printf("error reading partinfo\n"); + part = get_device_and_partition("scsi", (argc == 3) ? argv[2] : NULL, + &dev_desc, &info); + if (part < 0) return 1; - } - if ((strncmp((char *)(info.type), BOOT_PART_TYPE, sizeof(info.type)) != 0) && - (strncmp((char *)(info.type), BOOT_PART_COMP, sizeof(info.type)) != 0)) { - printf ("\n** Invalid partition type "%.32s"" - " (expect "" BOOT_PART_TYPE "")\n", - info.type); - return 1; - }
+ dev = dev_desc->dev; printf ("\nLoading from SCSI device %d, partition %d: " "Name: %.32s Type: %.32s\n", dev, part, info.name, info.type);