> On 15 Dec 2017, at 03:34, Kever Yang <kever.y...@rock-chips.com> wrote:
> 
> Hi Philipp,
> 
> 
> On 12/14/2017 05:53 PM, Dr. Philipp Tomsich wrote:
>> Kever,
>> 
>>> On 14 Dec 2017, at 07:39, Kever Yang <kever.y...@rock-chips.com> 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 <kever.y...@rock-chips.com>
>>> ---
>>> 
>>> 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
>>> 
>> 
> 
> 

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to