From: Chang Hyun Park <chchch.p...@samsung.com>

Custom definitions of le_XX_to_int functions have been replaced with
standard ones, defined at <compiler.h>

Replacement of several GPT related structures members with ones
indicating its endianness and proper size.

Signed-off-by: Chang Hyun Park <chchch.p...@samsung.com>
Signed-off-by: Lukasz Majewski <l.majew...@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.p...@samsung.com>

---
Changes for v2:
- Combining two commits regarding part_efi.{h|c}
---
 disk/part_efi.c    |  109 +++++++++++++++++++---------------------------------
 include/part_efi.h |   85 +++++++++++++++++++++-------------------
 2 files changed, 84 insertions(+), 110 deletions(-)

diff --git a/disk/part_efi.c b/disk/part_efi.c
index b2233da..d4c61d2 100644
--- a/disk/part_efi.c
+++ b/disk/part_efi.c
@@ -44,34 +44,6 @@
     defined(CONFIG_MMC) || \
     defined(CONFIG_SYSTEMACE)
 
-/* Convert char[2] in little endian format to the host format integer
- */
-static inline unsigned short le16_to_int(unsigned char *le16)
-{
-       return ((le16[1] << 8) + le16[0]);
-}
-
-/* Convert char[4] in little endian format to the host format integer
- */
-static inline unsigned long le32_to_int(unsigned char *le32)
-{
-       return ((le32[3] << 24) + (le32[2] << 16) + (le32[1] << 8) + le32[0]);
-}
-
-/* Convert char[8] in little endian format to the host format integer
- */
-static inline unsigned long long le64_to_int(unsigned char *le64)
-{
-       return (((unsigned long long)le64[7] << 56) +
-               ((unsigned long long)le64[6] << 48) +
-               ((unsigned long long)le64[5] << 40) +
-               ((unsigned long long)le64[4] << 32) +
-               ((unsigned long long)le64[3] << 24) +
-               ((unsigned long long)le64[2] << 16) +
-               ((unsigned long long)le64[1] << 8) +
-               (unsigned long long)le64[0]);
-}
-
 /**
  * efi_crc32() - EFI version of crc32 function
  * @buf: buffer to calculate crc32 of
@@ -79,7 +51,7 @@ static inline unsigned long long le64_to_int(unsigned char 
*le64)
  *
  * Description: Returns EFI-style CRC32 value for @buf
  */
-static inline unsigned long efi_crc32(const void *buf, unsigned long len)
+static inline u32 efi_crc32(const void *buf, u32 len)
 {
        return crc32(0, buf, len);
 }
@@ -137,13 +109,13 @@ void print_part_efi(block_dev_desc_t * dev_desc)
        debug("%s: gpt-entry at %p\n", __func__, gpt_pte);
 
        printf("Part\tName\t\t\tStart LBA\tEnd LBA\n");
-       for (i = 0; i < le32_to_int(gpt_head->num_partition_entries); i++) {
+       for (i = 0; i < le32_to_cpu(gpt_head->num_partition_entries); i++) {
 
                if (is_pte_valid(&gpt_pte[i])) {
                        printf("%3d\t%-18s\t0x%08llX\t0x%08llX\n", (i + 1),
                                print_efiname(&gpt_pte[i]),
-                               le64_to_int(gpt_pte[i].starting_lba),
-                               le64_to_int(gpt_pte[i].ending_lba));
+                              (u64) le64_to_cpu(gpt_pte[i].starting_lba),
+                              (u64) le64_to_cpu(gpt_pte[i].ending_lba));
                } else {
                        break;  /* Stop at the first non valid PTE */
                }
@@ -174,9 +146,9 @@ int get_partition_info_efi(block_dev_desc_t * dev_desc, int 
part,
        }
 
        /* The ulong casting limits the maximum disk size to 2 TB */
-       info->start = (ulong) le64_to_int(gpt_pte[part - 1].starting_lba);
+       info->start = (u64) le64_to_cpu(gpt_pte[part - 1].starting_lba);
        /* The ending LBA is inclusive, to calculate size, add 1 to it */
-       info->size = ((ulong)le64_to_int(gpt_pte[part - 1].ending_lba) + 1)
+       info->size = ((u64)le64_to_cpu(gpt_pte[part - 1].ending_lba) + 1)
                     - info->start;
        info->blksz = GPT_BLOCK_SIZE;
 
@@ -215,7 +187,7 @@ int test_part_efi(block_dev_desc_t * dev_desc)
 static int pmbr_part_valid(struct partition *part)
 {
        if (part->sys_ind == EFI_PMBR_OSTYPE_EFI_GPT &&
-               le32_to_int(part->start_sect) == 1UL) {
+               le32_to_cpu(part->start_sect) == 1UL) {
                return 1;
        }
 
@@ -234,9 +206,8 @@ static int is_pmbr_valid(legacy_mbr * mbr)
 {
        int i = 0;
 
-       if (!mbr || le16_to_int(mbr->signature) != MSDOS_MBR_SIGNATURE) {
+       if (!mbr || le16_to_cpu(mbr->signature) != MSDOS_MBR_SIGNATURE)
                return 0;
-       }
 
        for (i = 0; i < 4; i++) {
                if (pmbr_part_valid(&mbr->partition_record[i])) {
@@ -259,8 +230,8 @@ static int is_pmbr_valid(legacy_mbr * mbr)
 static int is_gpt_valid(block_dev_desc_t * dev_desc, unsigned long long lba,
                        gpt_header * pgpt_head, gpt_entry ** pgpt_pte)
 {
-       unsigned char crc32_backup[4] = { 0 };
-       unsigned long calc_crc32;
+       u32 crc32_backup = 0;
+       u32 calc_crc32;
        unsigned long long lastlba;
 
        if (!dev_desc || !pgpt_head) {
@@ -275,54 +246,54 @@ static int is_gpt_valid(block_dev_desc_t * dev_desc, 
unsigned long long lba,
        }
 
        /* Check the GPT header signature */
-       if (le64_to_int(pgpt_head->signature) != GPT_HEADER_SIGNATURE) {
+       if (le64_to_cpu(pgpt_head->signature) != GPT_HEADER_SIGNATURE) {
                printf("GUID Partition Table Header signature is wrong:"
                        "0x%llX != 0x%llX\n",
-                       (unsigned long long)le64_to_int(pgpt_head->signature),
-                       (unsigned long long)GPT_HEADER_SIGNATURE);
+                       (u64) le64_to_cpu(pgpt_head->signature),
+                       (u64) GPT_HEADER_SIGNATURE);
                return 0;
        }
 
        /* Check the GUID Partition Table CRC */
-       memcpy(crc32_backup, pgpt_head->header_crc32, sizeof(crc32_backup));
-       memset(pgpt_head->header_crc32, 0, sizeof(pgpt_head->header_crc32));
+       memcpy(&crc32_backup, &pgpt_head->header_crc32, sizeof(crc32_backup));
+       memset(&pgpt_head->header_crc32, 0, sizeof(pgpt_head->header_crc32));
 
        calc_crc32 = efi_crc32((const unsigned char *)pgpt_head,
-               le32_to_int(pgpt_head->header_size));
+               le32_to_cpu(pgpt_head->header_size));
 
-       memcpy(pgpt_head->header_crc32, crc32_backup, sizeof(crc32_backup));
+       memcpy(&pgpt_head->header_crc32, &crc32_backup, sizeof(crc32_backup));
 
-       if (calc_crc32 != le32_to_int(crc32_backup)) {
+       if (calc_crc32 != le32_to_cpu(crc32_backup)) {
                printf("GUID Partition Table Header CRC is wrong:"
-                       "0x%08lX != 0x%08lX\n",
-                       le32_to_int(crc32_backup), calc_crc32);
+                       "0x%x != 0x%x\n",
+                      (u32) le32_to_cpu(crc32_backup), calc_crc32);
                return 0;
        }
 
        /* Check that the my_lba entry points to the LBA that contains the GPT 
*/
-       if (le64_to_int(pgpt_head->my_lba) != lba) {
+       if (le64_to_cpu(pgpt_head->my_lba) != lba) {
                printf("GPT: my_lba incorrect: %llX != %llX\n",
-                       (unsigned long long)le64_to_int(pgpt_head->my_lba),
-                       (unsigned long long)lba);
+                       (u64)le64_to_cpu(pgpt_head->my_lba),
+                       (u64)lba);
                return 0;
        }
 
        /* Check the first_usable_lba and last_usable_lba are within the disk. 
*/
        lastlba = (unsigned long long)dev_desc->lba;
-       if (le64_to_int(pgpt_head->first_usable_lba) > lastlba) {
+       if (le64_to_cpu(pgpt_head->first_usable_lba) > lastlba) {
                printf("GPT: first_usable_lba incorrect: %llX > %llX\n",
-                       le64_to_int(pgpt_head->first_usable_lba), lastlba);
+                      (u64) le64_to_cpu(pgpt_head->first_usable_lba), lastlba);
                return 0;
        }
-       if (le64_to_int(pgpt_head->last_usable_lba) > lastlba) {
+       if (le64_to_cpu(pgpt_head->last_usable_lba) > lastlba) {
                printf("GPT: last_usable_lba incorrect: %llX > %llX\n",
-                       le64_to_int(pgpt_head->last_usable_lba), lastlba);
+                      (u64) le64_to_cpu(pgpt_head->last_usable_lba), lastlba);
                return 0;
        }
 
        debug("GPT: first_usable_lba: %llX last_usable_lba %llX last lba 
%llX\n",
-               le64_to_int(pgpt_head->first_usable_lba),
-               le64_to_int(pgpt_head->last_usable_lba), lastlba);
+             (u64) le64_to_cpu(pgpt_head->first_usable_lba),
+             (u64) le64_to_cpu(pgpt_head->last_usable_lba), lastlba);
 
        /* Read and allocate Partition Table Entries */
        *pgpt_pte = alloc_read_gpt_entries(dev_desc, pgpt_head);
@@ -333,13 +304,13 @@ static int is_gpt_valid(block_dev_desc_t * dev_desc, 
unsigned long long lba,
 
        /* Check the GUID Partition Table Entry Array CRC */
        calc_crc32 = efi_crc32((const unsigned char *)*pgpt_pte,
-               le32_to_int(pgpt_head->num_partition_entries) *
-               le32_to_int(pgpt_head->sizeof_partition_entry));
+               le32_to_cpu(pgpt_head->num_partition_entries) *
+               le32_to_cpu(pgpt_head->sizeof_partition_entry));
 
-       if (calc_crc32 != le32_to_int(pgpt_head->partition_entry_array_crc32)) {
+       if (calc_crc32 != le32_to_cpu(pgpt_head->partition_entry_array_crc32)) {
                printf("GUID Partition Table Entry Array CRC is wrong:"
-                       "0x%08lX != 0x%08lX\n",
-                       le32_to_int(pgpt_head->partition_entry_array_crc32),
+                       "0x%x != 0x%x\n",
+                      (u32)le32_to_cpu(pgpt_head->partition_entry_array_crc32),
                        calc_crc32);
 
                free(*pgpt_pte);
@@ -370,12 +341,12 @@ static gpt_entry *alloc_read_gpt_entries(block_dev_desc_t 
* dev_desc,
                return NULL;
        }
 
-       count = le32_to_int(pgpt_head->num_partition_entries) *
-               le32_to_int(pgpt_head->sizeof_partition_entry);
+       count = le32_to_cpu(pgpt_head->num_partition_entries) *
+               le32_to_cpu(pgpt_head->sizeof_partition_entry);
 
-       debug("%s: count = %lu * %lu = %u\n", __func__,
-               le32_to_int(pgpt_head->num_partition_entries),
-               le32_to_int(pgpt_head->sizeof_partition_entry), count);
+       debug("%s: count = %u * %u = %u\n", __func__,
+             (u32) le32_to_cpu(pgpt_head->num_partition_entries),
+             (u32) le32_to_cpu(pgpt_head->sizeof_partition_entry), count);
 
        /* Allocate memory for PTE, remember to FREE */
        if (count != 0) {
@@ -390,7 +361,7 @@ static gpt_entry *alloc_read_gpt_entries(block_dev_desc_t * 
dev_desc,
 
        /* Read GPT Entries from device */
        if (dev_desc->block_read (dev_desc->dev,
-               (unsigned long)le64_to_int(pgpt_head->partition_entry_lba),
+               (u64) le64_to_cpu(pgpt_head->partition_entry_lba),
                (lbaint_t) (count / GPT_BLOCK_SIZE), pte)
                != (count / GPT_BLOCK_SIZE)) {
 
diff --git a/include/part_efi.h b/include/part_efi.h
index a9d4399..11d995c 100644
--- a/include/part_efi.h
+++ b/include/part_efi.h
@@ -29,6 +29,8 @@
  * http://developer.intel.com/technology/efi/efi.htm
 */
 
+#include <linux/compiler.h>
+
 #ifndef _DISK_PART_EFI_H
 #define _DISK_PART_EFI_H
 
@@ -41,6 +43,8 @@
 #define GPT_HEADER_REVISION_V1 0x00010000
 #define GPT_PRIMARY_PARTITION_TABLE_LBA 1ULL
 #define GPT_ENTRY_NAME "gpt"
+#define GPT_ENTRY_NUMBERS              128
+#define GPT_ENTRY_SIZE                 128
 
 #define EFI_GUID(a, b, c, d0, d1, d2, d3, d4, d5, d6, d7) \
        ((efi_guid_t) \
@@ -73,68 +77,67 @@
                0xa2, 0x3c, 0x23, 0x8f, 0x2a, 0x3d, 0xf9, 0x28)
 
 /* linux/include/efi.h */
-typedef unsigned short efi_char16_t;
+typedef u16 efi_char16_t;
 
 typedef struct {
-       unsigned char b[16];
+       u8 b[16];
 } efi_guid_t;
 
 /* based on linux/include/genhd.h */
 struct partition {
-       unsigned char boot_ind;         /* 0x80 - active */
-       unsigned char head;             /* starting head */
-       unsigned char sector;           /* starting sector */
-       unsigned char cyl;              /* starting cylinder */
-       unsigned char sys_ind;          /* What partition type */
-       unsigned char end_head;         /* end head */
-       unsigned char end_sector;       /* end sector */
-       unsigned char end_cyl;          /* end cylinder */
-       unsigned char start_sect[4];    /* starting sector counting from 0 */
-       unsigned char nr_sects[4];      /* nr of sectors in partition */
-} __attribute__ ((packed));
+       u8 boot_ind;            /* 0x80 - active */
+       u8 head;                /* starting head */
+       u8 sector;              /* starting sector */
+       u8 cyl;         /* starting cylinder */
+       u8 sys_ind;             /* What partition type */
+       u8 end_head;            /* end head */
+       u8 end_sector;  /* end sector */
+       u8 end_cyl;             /* end cylinder */
+       __le32 start_sect;      /* starting sector counting from 0 */
+       __le32 nr_sects;        /* nr of sectors in partition */
+} __packed;
 
 /* based on linux/fs/partitions/efi.h */
 typedef struct _gpt_header {
-       unsigned char signature[8];
-       unsigned char revision[4];
-       unsigned char header_size[4];
-       unsigned char header_crc32[4];
-       unsigned char reserved1[4];
-       unsigned char my_lba[8];
-       unsigned char alternate_lba[8];
-       unsigned char first_usable_lba[8];
-       unsigned char last_usable_lba[8];
+       __le64 signature;
+       __le32 revision;
+       __le32 header_size;
+       __le32 header_crc32;
+       __le32 reserved1;
+       __le64 my_lba;
+       __le64 alternate_lba;
+       __le64 first_usable_lba;
+       __le64 last_usable_lba;
        efi_guid_t disk_guid;
-       unsigned char partition_entry_lba[8];
-       unsigned char num_partition_entries[4];
-       unsigned char sizeof_partition_entry[4];
-       unsigned char partition_entry_array_crc32[4];
-       unsigned char reserved2[GPT_BLOCK_SIZE - 92];
-} __attribute__ ((packed)) gpt_header;
+       __le64 partition_entry_lba;
+       __le32 num_partition_entries;
+       __le32 sizeof_partition_entry;
+       __le32 partition_entry_array_crc32;
+       u8 reserved2[GPT_BLOCK_SIZE - 92];
+} __packed gpt_header;
 
 typedef struct _gpt_entry_attributes {
-       unsigned long long required_to_function:1;
-       unsigned long long reserved:47;
-       unsigned long long type_guid_specific:16;
-} __attribute__ ((packed)) gpt_entry_attributes;
+       u64 required_to_function:1;
+       u64 reserved:47;
+       u64 type_guid_specific:16;
+} __packed gpt_entry_attributes;
 
 #define PARTNAME_SZ    (72 / sizeof(efi_char16_t))
 typedef struct _gpt_entry {
        efi_guid_t partition_type_guid;
        efi_guid_t unique_partition_guid;
-       unsigned char starting_lba[8];
-       unsigned char ending_lba[8];
+       __le64 starting_lba;
+       __le64 ending_lba;
        gpt_entry_attributes attributes;
        efi_char16_t partition_name[PARTNAME_SZ];
-}
-__attribute__ ((packed)) gpt_entry;
+} __packed gpt_entry;
 
 typedef struct _legacy_mbr {
-       unsigned char boot_code[440];
-       unsigned char unique_mbr_signature[4];
-       unsigned char unknown[2];
+       u8 boot_code[440];
+       __le32 unique_mbr_signature;
+       __le16 unknown;
        struct partition partition_record[4];
-       unsigned char signature[2];
-} __attribute__ ((packed)) legacy_mbr;
+       __le16 signature;
+} __packed legacy_mbr;
 
 #endif /* _DISK_PART_EFI_H */
-- 
1.7.2.3

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

Reply via email to