sandbox: Implement host dev [device]

A common pattern to check if a certain device exists (e.g. in
config_distro_bootcmd) is to use: <interface> dev [device]

Implement host dev [device] so this pattern can be used for sandbox host
devices.

Signed-off-by: Sjoerd Simons <sjoerd.simons@collabora.co.uk>
Acked-by: Simon Glass <sjg@chromium.org>
master
Sjoerd Simons 9 years ago committed by Simon Glass
parent bacfb1df95
commit 9b97b6ba24
  1. 44
      common/cmd_host.c

@ -10,6 +10,8 @@
#include <sandboxblockdev.h> #include <sandboxblockdev.h>
#include <asm/errno.h> #include <asm/errno.h>
static int host_curr_device = -1;
static int do_host_load(cmd_tbl_t *cmdtp, int flag, int argc, static int do_host_load(cmd_tbl_t *cmdtp, int flag, int argc,
char * const argv[]) char * const argv[])
{ {
@ -85,12 +87,53 @@ static int do_host_info(cmd_tbl_t *cmdtp, int flag, int argc,
return 0; return 0;
} }
static int do_host_dev(cmd_tbl_t *cmdtp, int flag, int argc,
char * const argv[])
{
int dev;
char *ep;
block_dev_desc_t *blk_dev;
int ret;
if (argc < 1 || argc > 3)
return CMD_RET_USAGE;
if (argc == 1) {
if (host_curr_device < 0) {
printf("No current host device\n");
return 1;
}
printf("Current host device %d\n", host_curr_device);
return 0;
}
dev = simple_strtoul(argv[1], &ep, 16);
if (*ep) {
printf("** Bad device specification %s **\n", argv[2]);
return CMD_RET_USAGE;
}
ret = host_get_dev_err(dev, &blk_dev);
if (ret) {
if (ret == -ENOENT)
puts("Not bound to a backing file\n");
else if (ret == -ENODEV)
puts("Invalid host device number\n");
return 1;
}
host_curr_device = dev;
return 0;
}
static cmd_tbl_t cmd_host_sub[] = { static cmd_tbl_t cmd_host_sub[] = {
U_BOOT_CMD_MKENT(load, 7, 0, do_host_load, "", ""), U_BOOT_CMD_MKENT(load, 7, 0, do_host_load, "", ""),
U_BOOT_CMD_MKENT(ls, 3, 0, do_host_ls, "", ""), U_BOOT_CMD_MKENT(ls, 3, 0, do_host_ls, "", ""),
U_BOOT_CMD_MKENT(save, 6, 0, do_host_save, "", ""), U_BOOT_CMD_MKENT(save, 6, 0, do_host_save, "", ""),
U_BOOT_CMD_MKENT(bind, 3, 0, do_host_bind, "", ""), U_BOOT_CMD_MKENT(bind, 3, 0, do_host_bind, "", ""),
U_BOOT_CMD_MKENT(info, 3, 0, do_host_info, "", ""), U_BOOT_CMD_MKENT(info, 3, 0, do_host_info, "", ""),
U_BOOT_CMD_MKENT(dev, 0, 1, do_host_dev, "", ""),
}; };
static int do_host(cmd_tbl_t *cmdtp, int flag, int argc, static int do_host(cmd_tbl_t *cmdtp, int flag, int argc,
@ -126,6 +169,7 @@ U_BOOT_CMD(
"save a file to host\n" "save a file to host\n"
"host bind <dev> [<filename>] - bind \"host\" device to file\n" "host bind <dev> [<filename>] - bind \"host\" device to file\n"
"host info [<dev>] - show device binding & info\n" "host info [<dev>] - show device binding & info\n"
"host dev [<dev>] - Set or retrieve the current host device\n"
"host commands use the \"hostfs\" device. The \"host\" device is used\n" "host commands use the \"hostfs\" device. The \"host\" device is used\n"
"with standard IO commands such as fatls or ext2load" "with standard IO commands such as fatls or ext2load"
); );

Loading…
Cancel
Save