From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dr. Philipp Tomsich Date: Fri, 15 Dec 2017 10:08:50 +0100 Subject: [U-Boot] [PATCH 2/2] disk: part: use common api to lookup part driver In-Reply-To: <3e90b652-62ac-c56d-f566-96626029d0fc@rock-chips.com> References: <1513233549-22018-1-git-send-email-kever.yang@rock-chips.com> <1513233549-22018-2-git-send-email-kever.yang@rock-chips.com> <6D709D11-BAFC-4E44-83C5-F6317A57B4B4@theobroma-systems.com> <3e90b652-62ac-c56d-f566-96626029d0fc@rock-chips.com> Message-ID: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit To: u-boot@lists.denx.de > On 15 Dec 2017, at 03:34, Kever Yang wrote: > > Hi Philipp, > > > On 12/14/2017 05:53 PM, Dr. Philipp Tomsich wrote: >> Kever, >> >>> On 14 Dec 2017, at 07:39, Kever Yang wrote: >>> >>> Do not need to scan disk every time when we get part info >>> by name. >> How does this interact with USB devices? >> I.e.: what happens, when you get the partition-info for a usb drive, then change >> the attached usb drive (with only a single one attached, but a different one) and >> do a ‘usb rescan’? > > I don't understand your question here, the part driver is using block api, > no matter its from usb or emmc, it's the same for part driver. > USB msc driver should always call part_init() for a new device. Thanks, this answers it: part_init() will always be called for new devices. > This patch does not change the functionality of the origin implement, but with > a better api, and do not need to scan the disk if the disk already have a known type. > > Thanks, > - Kever >> >> Regards, >> Philipp. >> >>> Signed-off-by: Kever Yang >>> --- >>> >>> disk/part.c | 29 +++++++++++++---------------- >>> 1 file changed, 13 insertions(+), 16 deletions(-) >>> >>> diff --git a/disk/part.c b/disk/part.c >>> index b007138..96c2858 100644 >>> --- a/disk/part.c >>> +++ b/disk/part.c >>> @@ -638,26 +638,23 @@ cleanup: >>> int part_get_info_by_name(struct blk_desc *dev_desc, const char *name, >>> disk_partition_t *info) >>> { >>> - struct part_driver *first_drv = >>> - ll_entry_start(struct part_driver, part_driver); >>> - const int n_drvs = ll_entry_count(struct part_driver, part_driver); >>> struct part_driver *part_drv; >>> + int ret; >>> + int i; >>> >>> - for (part_drv = first_drv; part_drv != first_drv + n_drvs; part_drv++) { >>> - int ret; >>> - int i; >>> - for (i = 1; i < part_drv->max_entries; i++) { >>> - ret = part_drv->get_info(dev_desc, i, info); >>> - if (ret != 0) { >>> - /* no more entries in table */ >>> - break; >>> - } >>> - if (strcmp(name, (const char *)info->name) == 0) { >>> - /* matched */ >>> - return i; >>> - } >>> + part_drv = part_driver_lookup_type(dev_desc); >>> + for (i = 1; i < part_drv->max_entries; i++) { >>> + ret = part_drv->get_info(dev_desc, i, info); >>> + if (ret != 0) { >>> + /* no more entries in table */ >>> + break; >>> + } >>> + if (strcmp(name, (const char *)info->name) == 0) { >>> + /* matched */ >>> + return i; >>> } >>> } >>> + >>> return -1; >>> } >>> >>> -- >>> 1.9.1 >>> >> > >