Skip to content

Commit

Permalink
dm: part: Drop the block_drvr table
Browse files Browse the repository at this point in the history
This is not needed since we can use the functions provided by the legacy
block device support.

Signed-off-by: Simon Glass <[email protected]>
  • Loading branch information
sjg20 committed May 17, 2016
1 parent 1fde473 commit 6dd9faf
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 64 deletions.
67 changes: 14 additions & 53 deletions disk/part.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,34 +21,6 @@
#define PRINTF(fmt,args...)
#endif

const struct block_drvr block_drvr[] = {
#if defined(CONFIG_CMD_IDE)
{ .name = "ide", },
#endif
#if defined(CONFIG_CMD_SATA)
{.name = "sata", },
#endif
#if defined(CONFIG_SCSI)
{ .name = "scsi", },
#endif
#if defined(CONFIG_CMD_USB) && defined(CONFIG_USB_STORAGE)
{ .name = "usb", },
#endif
#if defined(CONFIG_MMC)
{
.name = "mmc",
.select_hwpart = mmc_select_hwpart,
},
#endif
#if defined(CONFIG_SYSTEMACE)
{ .name = "ace", },
#endif
#if defined(CONFIG_SANDBOX)
{ .name = "host", },
#endif
{ },
};

DECLARE_GLOBAL_DATA_PTR;

#ifdef HAVE_BLOCK_DEVICE
Expand All @@ -70,34 +42,23 @@ static struct part_driver *part_driver_lookup_type(int part_type)

static struct blk_desc *get_dev_hwpart(const char *ifname, int dev, int hwpart)
{
const struct block_drvr *drvr = block_drvr;
char *name;
struct blk_desc *dev_desc;
int ret;

if (!ifname)
dev_desc = blk_get_devnum_by_typename(ifname, dev);
if (!dev_desc) {
debug("%s: No device for iface '%s', dev %d\n", __func__,
ifname, dev);
return NULL;

name = drvr->name;
#ifdef CONFIG_NEEDS_MANUAL_RELOC
name += gd->reloc_off;
#endif
while (drvr->name) {
name = drvr->name;
#ifdef CONFIG_NEEDS_MANUAL_RELOC
name += gd->reloc_off;
#endif
if (strncmp(ifname, name, strlen(name)) == 0) {
struct blk_desc *dev_desc;

dev_desc = blk_get_devnum_by_typename(name, dev);
if (!dev_desc)
return NULL;
if (blk_dselect_hwpart(dev_desc, hwpart))
return NULL;
return dev_desc;
}
drvr++;
}
return NULL;
ret = blk_dselect_hwpart(dev_desc, hwpart);
if (ret) {
debug("%s: Failed to select h/w partition: err-%d\n", __func__,
ret);
return NULL;
}

return dev_desc;
}

struct blk_desc *blk_get_dev(const char *ifname, int dev)
Expand Down
27 changes: 16 additions & 11 deletions lib/efi_loader/efi_disk.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
*/

#include <common.h>
#include <blk.h>
#include <efi_loader.h>
#include <inttypes.h>
#include <part.h>
Expand Down Expand Up @@ -142,7 +143,7 @@ static const struct efi_block_io block_io_disk_template = {
};

static void efi_disk_add_dev(char *name,
const struct block_drvr *cur_drvr,
const struct blk_driver *cur_drvr,
const struct blk_desc *desc,
int dev_index,
lbaint_t offset)
Expand All @@ -160,7 +161,7 @@ static void efi_disk_add_dev(char *name,
diskobj->parent.protocols[1].open = efi_disk_open_dp;
diskobj->parent.handle = diskobj;
diskobj->ops = block_io_disk_template;
diskobj->ifname = cur_drvr->name;
diskobj->ifname = cur_drvr->if_typename;
diskobj->dev_index = dev_index;
diskobj->offset = offset;

Expand Down Expand Up @@ -189,7 +190,7 @@ static void efi_disk_add_dev(char *name,
}

static int efi_disk_create_eltorito(struct blk_desc *desc,
const struct block_drvr *cur_drvr,
const struct blk_driver *cur_drvr,
int diskid)
{
int disks = 0;
Expand All @@ -202,8 +203,8 @@ static int efi_disk_create_eltorito(struct blk_desc *desc,
return 0;

while (!part_get_info(desc, part, &info)) {
snprintf(devname, sizeof(devname), "%s%d:%d", cur_drvr->name,
diskid, part);
snprintf(devname, sizeof(devname), "%s%d:%d",
cur_drvr->if_typename, diskid, part);
efi_disk_add_dev(devname, cur_drvr, desc, diskid, info.start);
part++;
disks++;
Expand All @@ -222,25 +223,29 @@ static int efi_disk_create_eltorito(struct blk_desc *desc,
*/
int efi_disk_register(void)
{
const struct block_drvr *cur_drvr;
int i;
const struct blk_driver *cur_drvr;
int i, if_type;
int disks = 0;

/* Search for all available disk devices */
for (cur_drvr = block_drvr; cur_drvr->name; cur_drvr++) {
printf("Scanning disks on %s...\n", cur_drvr->name);
for (if_type = 0; if_type < IF_TYPE_COUNT; if_type++) {
cur_drvr = blk_driver_lookup_type(if_type);
if (!cur_drvr)
continue;

printf("Scanning disks on %s...\n", cur_drvr->if_typename);
for (i = 0; i < 4; i++) {
struct blk_desc *desc;
char devname[32] = { 0 }; /* dp->str is u16[32] long */

desc = blk_get_dev(cur_drvr->name, i);
desc = blk_get_devnum_by_type(if_type, i);
if (!desc)
continue;
if (desc->type == DEV_TYPE_UNKNOWN)
continue;

snprintf(devname, sizeof(devname), "%s%d",
cur_drvr->name, i);
cur_drvr->if_typename, i);
efi_disk_add_dev(devname, cur_drvr, desc, i, 0);
disks++;

Expand Down

0 comments on commit 6dd9faf

Please sign in to comment.