From patchwork Mon Apr 11 01:12:31 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 608606 X-Patchwork-Delegate: sjg@chromium.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id 3qjsdj5LJ2z9t3n for ; Mon, 11 Apr 2016 11:18:33 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.b=GTpUPGvq; dkim-atps=neutral Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id D398CA7638; Mon, 11 Apr 2016 03:18:22 +0200 (CEST) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 45TcrG8ClyXR; Mon, 11 Apr 2016 03:18:22 +0200 (CEST) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 16A4EA76BE; Mon, 11 Apr 2016 03:17:47 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 10C83A7531 for ; Mon, 11 Apr 2016 03:17:33 +0200 (CEST) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id mlN3ZWYJwexS for ; Mon, 11 Apr 2016 03:17:32 +0200 (CEST) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from mail-ig0-f181.google.com (mail-ig0-f181.google.com [209.85.213.181]) by theia.denx.de (Postfix) with ESMTPS id A0F60A75BA for ; Mon, 11 Apr 2016 03:17:32 +0200 (CEST) Received: by mail-ig0-f181.google.com with SMTP id gy3so70959637igb.1 for ; Sun, 10 Apr 2016 18:17:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=YhAjDsj7wnPQbhZqKqlzjqLeXzga8Gp0y9627fE0ql8=; b=GTpUPGvqmnyo+6W//Qaaa5q0HWrdkPOpDuJ5OdvNDd3RJgkrKCXuGdnJIHBnJvlE8b tX7rExdcAUQTVWGIsXxn+q7piek6PjXHOlP3qoJa1goT+dbNoQxERcAdxDpXpa4ncFy7 rQkZTr1pR77GASc4nECWpUnhUUtmhLEvpKaL3BVCIUS6zwU2TNyg1jlA3okI6ozhJTxB 9Kk7PkC/CNJsuXo39uBj/RMAQjIA0siEGmCjDnLYlkKRtYIeWV/Ljg02NjRLKl5ytWRD g4+Ag8FYVuQ2iOi+o7EryLQFPcn8uQS56ZhQWnhibuyuzIlG9Vxf3HqxPcG0HjliSmOu n+dg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=YhAjDsj7wnPQbhZqKqlzjqLeXzga8Gp0y9627fE0ql8=; b=dhZZMEuZfC8fRt4QWjWJO0I2/Mc1I2jkT0oBuhVg8q2Y7mhgH3y6/pdH4Mzr6KjCLN oNMLI/Xr5qaMmmX/req7aXJLWo7JaQzQNqHmEbqsyCbFmleW+Q0C6vFIJHm0UFTBofhu LvzqAip/akOywuWROiXEKmdhAagvkopFSicWMTfrl74h7cFCS5eQDjudrn7Jt3jH4FX9 UYZ1F7wDyfIqSl0YHK5PeHY7qTOSXMal2m2mJab7VoICc0yYm7XaOlomMSmiZMni5tR1 Rr9EFO5zigtL530PNGdbHXNhzf7FskxEVhZfQHmVt3O5FxB68JVRUHHjQkGfet2r27Cn d/bg== X-Gm-Message-State: AD7BkJL3oYd+J1Sa8YJWyzoMxTwOGBwPE0wT2gOukslMTFS9bqLPbYtAFMGjxVMNpeq4BX7W X-Received: by 10.50.47.49 with SMTP id a17mr15591747ign.35.1460337451350; Sun, 10 Apr 2016 18:17:31 -0700 (PDT) Received: from kaki.bld.corp.google.com ([100.100.202.57]) by smtp.gmail.com with ESMTPSA id o15sm10802287igi.9.2016.04.10.18.17.26 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 10 Apr 2016 18:17:27 -0700 (PDT) Received: by kaki.bld.corp.google.com (Postfix, from userid 121222) id 067DE221A31; Sun, 10 Apr 2016 19:17:24 -0600 (MDT) From: Simon Glass To: U-Boot Mailing List Date: Sun, 10 Apr 2016 19:12:31 -0600 Message-Id: <1460337163-5584-12-git-send-email-sjg@chromium.org> X-Mailer: git-send-email 2.8.0.rc3.226.g39d4020 In-Reply-To: <1460337163-5584-1-git-send-email-sjg@chromium.org> References: <1460337163-5584-1-git-send-email-sjg@chromium.org> Cc: Tom Rini , Pantelis Antoniou , Erik Tideman , Patrick Delaunay Subject: [U-Boot] [PATCH 11/23] dm: part: Drop the block_drvr table X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.15 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" This is not needed since we can use the functions provided by the legacy block device support. Signed-off-by: Simon Glass --- disk/part.c | 67 ++++++++++------------------------------------- lib/efi_loader/efi_disk.c | 19 +++++++++----- 2 files changed, 26 insertions(+), 60 deletions(-) diff --git a/disk/part.c b/disk/part.c index 5d6dc68..4b850fa 100644 --- a/disk/part.c +++ b/disk/part.c @@ -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 @@ -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) diff --git a/lib/efi_loader/efi_disk.c b/lib/efi_loader/efi_disk.c index aaff947..8a8b685 100644 --- a/lib/efi_loader/efi_disk.c +++ b/lib/efi_loader/efi_disk.c @@ -7,6 +7,7 @@ */ #include +#include #include #include #include @@ -147,13 +148,17 @@ static const struct efi_block_io block_io_disk_template = { */ 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; struct efi_disk_obj *diskobj; @@ -161,7 +166,7 @@ int efi_disk_register(void) int objlen = sizeof(*diskobj) + (sizeof(*dp) * 2); char devname[16] = { 0 }; /* dp->str is u16[16] 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) @@ -176,7 +181,7 @@ int efi_disk_register(void) 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 = i; /* Fill in EFI IO Media info (for read/write callbacks) */ @@ -194,7 +199,7 @@ int efi_disk_register(void) dp[0].dp.sub_type = DEVICE_PATH_SUB_TYPE_FILE_PATH; dp[0].dp.length = sizeof(*dp); snprintf(devname, sizeof(devname), "%s%d", - cur_drvr->name, i); + cur_drvr->if_typename, i); ascii2unicode(dp[0].str, devname); dp[1].dp.type = DEVICE_PATH_TYPE_END;