81 lines
2.0 KiB
C
81 lines
2.0 KiB
C
#ifndef _BM_IMAGE_H_
|
|
#define _BM_IMAGE_H_
|
|
|
|
#include "stdint.h"
|
|
|
|
#define MAX_LABEL_SIZE (8)
|
|
#define MAX_FILENAME_SIZE (16)
|
|
|
|
struct guid_t {
|
|
uint32_t time_low;
|
|
uint16_t time_mid;
|
|
uint16_t time_hi_and_version;
|
|
uint8_t clock_seq_hi_and_reserved;
|
|
uint8_t clock_seq_low;
|
|
uint8_t node[6];
|
|
} __attribute__((packed));
|
|
|
|
#define LBA_SIZE (512)
|
|
#define GPT_HEADER_SIZE (92)
|
|
#define ENTRY_NUM (128)
|
|
#define ENTRY_SIZE (128)
|
|
#define ENTRY_LBA (ENTRY_NUM * ENTRY_SIZE / LBA_SIZE)
|
|
|
|
struct partition_record_t {
|
|
uint8_t boot_indicator;
|
|
uint8_t start_head;
|
|
uint8_t start_sector;
|
|
uint8_t start_track;
|
|
uint8_t os_type;
|
|
uint8_t end_head;
|
|
uint8_t end_sector;
|
|
uint8_t end_track;
|
|
uint32_t starting_lba;
|
|
uint32_t size_in_lba;
|
|
} __attribute__((packed));
|
|
|
|
struct legacy_mbr_t {
|
|
uint8_t boot_code[440];
|
|
uint32_t unique_mbr_signature;
|
|
uint16_t unknown;
|
|
struct partition_record_t part_record[4];
|
|
uint16_t signature;
|
|
} __attribute__((packed));
|
|
|
|
struct gpt_header_t {
|
|
uint64_t signature;
|
|
uint32_t revision;
|
|
uint32_t header_size;
|
|
uint32_t header_crc32;
|
|
uint32_t reserved1;
|
|
uint64_t my_lba;
|
|
uint64_t alternate_lba;
|
|
uint64_t first_usable_lba;
|
|
uint64_t last_usable_lba;
|
|
struct guid_t disk_guid;
|
|
uint64_t part_entry_lba;
|
|
uint32_t number_of_entries;
|
|
uint32_t size_of_entry;
|
|
uint32_t entry_array_crc32;
|
|
uint8_t reserved2[LBA_SIZE - GPT_HEADER_SIZE];
|
|
} __attribute__((packed));
|
|
|
|
struct gpt_entry_t {
|
|
struct guid_t part_type_guid;
|
|
struct guid_t unique_part_guid;
|
|
uint64_t starting_lba;
|
|
uint64_t ending_lba;
|
|
uint64_t attributes;
|
|
uint16_t part_name[(ENTRY_SIZE - 56) / 2];
|
|
} __attribute__((packed));
|
|
|
|
#define MBR_SIGNATURE (0xAA55)
|
|
#define MBR_OSTYPE_EFI (0xEE)
|
|
#define GPT_HEADER_SIGNATURE (0x5452415020494645)
|
|
#define GPT_REVISION (0x00010000)
|
|
|
|
#define FIND_GPT_START_BLOCK 1
|
|
#define FIND_GPT_END_BLOCK 8
|
|
|
|
#endif /* _BM_IMAGE_H_ */
|