diff options
Diffstat (limited to 'boot_control/gpt.h')
-rw-r--r-- | boot_control/gpt.h | 137 |
1 files changed, 0 insertions, 137 deletions
diff --git a/boot_control/gpt.h b/boot_control/gpt.h deleted file mode 100644 index 68e66cf..0000000 --- a/boot_control/gpt.h +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Copyright (c) 2015, The Linux Foundation. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of The Linux Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN - * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef HARDWARE_ROCKCHIP_BOOTCTL_HAL_GPT_H -#define HARDWARE_ROCKCHIP_BOOTCTL_HAL_GPT_H - -#include <string> - -#define GPT_HDR_SIGNATURE 0x5452415020494645ULL -#define MAX_GPT_ENTRIES 128 -#define MAX_SLOTS 2 - -namespace rockchip_boot_control { - -/* linux/include/efi.h */ -typedef char16_t efi_char16_t; - -typedef struct -{ - uint8_t b[16]; -} efi_guid_t; - -/* based on linux/fs/partitions/efi.h */ -typedef struct _gpt_header { - 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; - efi_guid_t disk_guid; - uint64_t partition_entry_lba; - uint32_t num_partition_entries; - uint32_t sizeof_partition_entry; - uint32_t partition_entry_array_crc32; -} __attribute__((packed)) gpt_header; - -typedef union _slot_attributes { - struct { - uint64_t required_to_function:1; - uint64_t no_block_io_protocol:1; - uint64_t legacy_bios_bootable:1; - uint64_t priority:4; - uint64_t tries:4; - uint64_t successful:1; - uint64_t reserved:36; - uint64_t type_guid_specific:16; - } fields; - uint64_t raw; -} __attribute__((packed)) slot_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; - uint64_t starting_lba; - uint64_t ending_lba; - slot_attributes attributes; - efi_char16_t partition_name[PARTNAME_SZ]; -} __attribute__((packed)) gpt_entry; - -class PartitionTables { -public: - /* - * read_partitions() reads the header and partition array from - * primary or secondary GPT of the disk. Secondary GPT is read in case - * primary GPT fails sanity check, errni is set if both GPT copies - * fail sanity check. - * Returns pointer to allocated object on success, - * and 'nullptr' on error with errno set. - * On failure this method will log to stderr. - */ - static std::unique_ptr<PartitionTables> - read_partitions(const std::string& device); - - /* - * write_partitions() writes the header and partition array to - * primary and secondary GPT on the disk. - * Returns 0 on success, -errno on error. - */ - int write_partitions(); - - /* - * getIndexForSlottedBootPartition() gets the partition index associated - * with the slot parameter passed. - * Returns 0 on success, and partition_index value is valid. - * REtrns -errno on error, the partition_index value is invalid. - */ - int getIndexForSlottedBootPartition(unsigned slot, - uint32_t& partition_index) const; - - /* - * gpt_sanity_check() checks the header for correctness of signature, - * size and CRC. - * Returns 'true' on success, 'false' on error. - */ - bool gpt_sanity_check(); - - gpt_header header; - gpt_entry partition_array[MAX_GPT_ENTRIES]; - -private: - std::string disk_device = ""; -}; - -}; //rockchip_boot_control - -#endif |