[U-Boot] [PATCH 14/30] dm: part: Convert partition API use to linker lists

Simon Glass sjg at chromium.org
Mon Feb 29 05:18:57 CET 2016


Hi Bin,

On 16 February 2016 at 07:25, Bin Meng <bmeng.cn at gmail.com> wrote:
> Hi Simon,
>
> On Mon, Feb 15, 2016 at 10:16 AM, Simon Glass <sjg at chromium.org> wrote:
>> We can use linker lists instead of explicitly declaring each function.
>> This makes the code shorter by avoiding switch() statements and lots of
>> header file declarations.
>>
>> While this does clean up the code it introduces a few code issues with SPL.
>> SPL never needs to print partition information since this all happens from
>> commands. SPL mostly doesn't need to obtain information about a partition
>> either, except in a few cases. Add these cases so that the code will be
>> dropped from each partition driver when not needed. This avoids code bloat.
>>
>> I think this is still a win, since it is not a bad thing to be explicit
>> about which features are used in SPL. But others may like to weigh in.
>>
>> Signed-off-by: Simon Glass <sjg at chromium.org>
>> ---
>>
>>  disk/part.c       | 184 +++++++++++++++++-------------------------------------
>>  disk/part_amiga.c |  16 +++--
>>  disk/part_dos.c   |   9 ++-
>>  disk/part_efi.c   |  10 ++-
>>  disk/part_iso.c   |  16 +++--
>>  disk/part_mac.c   |  16 +++--
>>  include/part.h    |  79 ++++++++++++++---------
>>  7 files changed, 157 insertions(+), 173 deletions(-)
>>
>
> [snip]
>
>> diff --git a/disk/part_amiga.c b/disk/part_amiga.c
>> index 5702c95..0f569f0 100644
>> --- a/disk/part_amiga.c
>> +++ b/disk/part_amiga.c
>> @@ -207,7 +207,7 @@ struct bootcode_block *get_bootcode(struct blk_desc *dev_desc)
>>   * Test if the given partition has an Amiga partition table/Rigid
>>   * Disk block
>>   */
>> -int test_part_amiga(struct blk_desc *dev_desc)
>> +static int test_part_amiga(struct blk_desc *dev_desc)
>>  {
>>      struct rigid_disk_block *rdb;
>>      struct bootcode_block *bootcode;
>> @@ -291,8 +291,8 @@ static struct partition_block *find_partition(struct blk_desc *dev_desc,
>>  /*
>>   * Get info about a partition
>>   */
>> -int get_partition_info_amiga(struct blk_desc *dev_desc, int part,
>> -                            disk_partition_t *info)
>> +static int get_partition_info_amiga(struct blk_desc *dev_desc, int part,
>> +                                   disk_partition_t *info)
>>  {
>>      struct partition_block *p = find_partition(dev_desc, part-1);
>>      struct amiga_part_geometry *g;
>> @@ -319,7 +319,7 @@ int get_partition_info_amiga(struct blk_desc *dev_desc, int part,
>>      return 0;
>>  }
>>
>> -void print_part_amiga(struct blk_desc *dev_desc)
>> +static void print_part_amiga(struct blk_desc *dev_desc)
>>  {
>>      struct rigid_disk_block *rdb;
>>      struct bootcode_block *boot;
>> @@ -379,4 +379,12 @@ void print_part_amiga(struct blk_desc *dev_desc)
>>      }
>>  }
>>
>> +U_BOOT_PART_TYPE(amiga) = {
>> +       .name           = "AMIGA",
>> +       .part_type      = PART_TYPE_AMIGA,
>> +       .get_info       = get_partition_info_amiga,
>> +       .print          = print_part_amiga,
>> +       .test           = test_part_amiga,
>> +};
>> +
>>  #endif
>> diff --git a/disk/part_dos.c b/disk/part_dos.c
>> index ea0315c..7567ed3 100644
>> --- a/disk/part_dos.c
>> +++ b/disk/part_dos.c
>> @@ -87,7 +87,7 @@ static int test_block_type(unsigned char *buffer)
>>  }
>>
>>
>> -int test_part_dos(struct blk_desc *dev_desc)
>> +static int test_part_dos(struct blk_desc *dev_desc)
>>  {
>>         ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz);
>>
>> @@ -295,5 +295,12 @@ int get_partition_info_dos(struct blk_desc *dev_desc, int part,
>>         return get_partition_info_extended(dev_desc, 0, 0, 1, part, info, 0);
>>  }
>>
>> +U_BOOT_PART_TYPE(dos) = {
>> +       .name           = "DOS",
>> +       .part_type      = PART_TYPE_DOS,
>> +       .get_info       = part_get_info_ptr(get_partition_info_dos),
>
> Does this compile?

These are defined in part.h. I had to add these to avoid bloating the
code since these functions are never called in SPL.

>
>> +       .print          = part_print_ptr(print_part_dos),
>
> and this?
>
>> +       .test           = test_part_dos,
>> +};
>>
>>  #endif
>> diff --git a/disk/part_efi.c b/disk/part_efi.c
>> index 7bd840f..6f80877 100644
>> --- a/disk/part_efi.c
>> +++ b/disk/part_efi.c
>> @@ -319,7 +319,7 @@ int get_partition_info_efi_by_name(struct blk_desc *dev_desc,
>>         return -2;
>>  }
>>
>> -int test_part_efi(struct blk_desc *dev_desc)
>> +static int test_part_efi(struct blk_desc *dev_desc)
>>  {
>>         ALLOC_CACHE_ALIGN_BUFFER_PAD(legacy_mbr, legacymbr, 1, dev_desc->blksz);
>>
>> @@ -953,4 +953,12 @@ static int is_pte_valid(gpt_entry * pte)
>>                 return 1;
>>         }
>>  }
>> +
>> +U_BOOT_PART_TYPE(efi) = {
>> +       .name           = "EFI",
>> +       .part_type      = PART_TYPE_EFI,
>> +       .get_info       = part_get_info_ptr(get_partition_info_efi),
>> +       .print          = part_print_ptr(print_part_efi),
>
> and these?
>
>> +       .test           = test_part_efi,
>> +};
>>  #endif
>> diff --git a/disk/part_iso.c b/disk/part_iso.c
>> index 2984df5..1d72d23 100644
>> --- a/disk/part_iso.c
>> +++ b/disk/part_iso.c
>> @@ -217,14 +217,13 @@ found:
>>         return 0;
>>  }
>>
>> -int get_partition_info_iso(struct blk_desc *dev_desc, int part_num,
>> -                          disk_partition_t *info)
>> +static int get_partition_info_iso(struct blk_desc *dev_desc, int part_num,
>> +                                 disk_partition_t *info)
>>  {
>>         return(get_partition_info_iso_verb(dev_desc, part_num, info, 1));
>>  }
>>
>> -
>> -void print_part_iso(struct blk_desc *dev_desc)
>> +static void print_part_iso(struct blk_desc *dev_desc)
>>  {
>>         disk_partition_t info;
>>         int i;
>> @@ -241,11 +240,18 @@ void print_part_iso(struct blk_desc *dev_desc)
>>         } while (get_partition_info_iso_verb(dev_desc,i,&info,0)!=-1);
>>  }
>>
>> -int test_part_iso(struct blk_desc *dev_desc)
>> +static int test_part_iso(struct blk_desc *dev_desc)
>>  {
>>         disk_partition_t info;
>>
>>         return(get_partition_info_iso_verb(dev_desc,0,&info,0));
>>  }
>>
>> +U_BOOT_PART_TYPE(iso) = {
>> +       .name           = "ISO",
>> +       .part_type      = PART_TYPE_ISO,
>> +       .get_info       = get_partition_info_iso,
>> +       .print          = print_part_iso,
>> +       .test           = test_part_iso,
>> +};
>>  #endif
>> diff --git a/disk/part_mac.c b/disk/part_mac.c
>> index ae83495..3fb3b16 100644
>> --- a/disk/part_mac.c
>> +++ b/disk/part_mac.c
>> @@ -40,7 +40,7 @@ static int part_mac_read_pdb(struct blk_desc *dev_desc, int part,
>>  /*
>>   * Test for a valid MAC partition
>>   */
>> -int test_part_mac(struct blk_desc *dev_desc)
>> +static int test_part_mac(struct blk_desc *dev_desc)
>>  {
>>         ALLOC_CACHE_ALIGN_BUFFER(mac_driver_desc_t, ddesc, 1);
>>         ALLOC_CACHE_ALIGN_BUFFER(mac_partition_t, mpart, 1);
>> @@ -64,8 +64,7 @@ int test_part_mac(struct blk_desc *dev_desc)
>>         return (0);
>>  }
>>
>> -
>> -void print_part_mac(struct blk_desc *dev_desc)
>> +static void print_part_mac(struct blk_desc *dev_desc)
>>  {
>>         ulong i, n;
>>         ALLOC_CACHE_ALIGN_BUFFER(mac_driver_desc_t, ddesc, 1);
>> @@ -214,8 +213,8 @@ static int part_mac_read_pdb(struct blk_desc *dev_desc, int part,
>>         /* NOTREACHED */
>>  }
>>
>> -int get_partition_info_mac(struct blk_desc *dev_desc, int part,
>> -                          disk_partition_t *info)
>> +static int get_partition_info_mac(struct blk_desc *dev_desc, int part,
>> +                                 disk_partition_t *info)
>>  {
>>         ALLOC_CACHE_ALIGN_BUFFER(mac_driver_desc_t, ddesc, 1);
>>         ALLOC_CACHE_ALIGN_BUFFER(mac_partition_t, mpart, 1);
>> @@ -238,4 +237,11 @@ int get_partition_info_mac(struct blk_desc *dev_desc, int part,
>>         return (0);
>>  }
>>
>> +U_BOOT_PART_TYPE(mac) = {
>> +       .name           = "MAC",
>> +       .part_type      = PART_TYPE_MAC,
>> +       .get_info       = get_partition_info_mac,
>> +       .print          = print_part_mac,
>> +       .test           = test_part_mac,
>> +};
>>  #endif
>
> [snip]
>
> Regards,
> Bin

Regards,
Simon


More information about the U-Boot mailing list