
We have a pretty nice and generic interface to ask for a specific block device. However, that one is still based around the magic notion that we know the driver name.
In order to be able to write fully generic disk access code, expose a list of all available block drivers.
Signed-off-by: Alexander Graf agraf@suse.de --- disk/part.c | 25 +++++++++++++++++++++++++ include/part.h | 2 ++ 2 files changed, 27 insertions(+)
diff --git a/disk/part.c b/disk/part.c index 909712e..5bc64c7 100644 --- a/disk/part.c +++ b/disk/part.c @@ -26,6 +26,31 @@ struct block_drvr { int (*select_hwpart)(int dev_num, int hwpart); };
+const char *available_block_drvrs[] = { +#if defined(CONFIG_CMD_IDE) + "ide", +#endif +#if defined(CONFIG_CMD_SATA) + "sata", +#endif +#if defined(CONFIG_CMD_SCSI) + "scsi", +#endif +#if defined(CONFIG_CMD_USB) && defined(CONFIG_USB_STORAGE) + "usb", +#endif +#if defined(CONFIG_MMC) + "mmc", +#endif +#if defined(CONFIG_SYSTEMACE) + "ace", +#endif +#if defined(CONFIG_SANDBOX) + "host", +#endif + NULL, +}; + static const struct block_drvr block_drvr[] = { #if defined(CONFIG_CMD_IDE) { .name = "ide", .get_dev = ide_get_dev, }, diff --git a/include/part.h b/include/part.h index 720a867..dc2a78b 100644 --- a/include/part.h +++ b/include/part.h @@ -122,6 +122,8 @@ int get_device(const char *ifname, const char *dev_str, int get_device_and_partition(const char *ifname, const char *dev_part_str, block_dev_desc_t **dev_desc, disk_partition_t *info, int allow_whole_dev); + +extern const char *available_block_drvrs[]; #else static inline block_dev_desc_t *get_dev(const char *ifname, int dev) { return NULL; }