[U-Boot] [PATCH 3/6] gpt: Replacement of GPT structures members with ones indicating endianness and size

Lukasz Majewski
2012-08-24T08:13:12Z

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

Signed-off-by: Chang Hyun Park <chchch.park@samsung.com>
Signed-off-by: Lukasz Majewski <l.majewski@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
---
disk/part_efi.h | 85 ++++++++++++++++++++++++++++--------------------------
1 files changed, 44 insertions(+), 41 deletions(-)

diff --git a/disk/part_efi.h b/disk/part_efi.h
index 5903e7c..85692fb 100644
--- a/disk/part_efi.h
+++ b/disk/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) \
@@ -72,68 +76,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