blob: a2bed33402d98daaabb85b771575d03c39bec7c2 [file] [log] [blame]
Jason Chiu5d247d12023-11-27 16:42:44 +08001/*
2 * Copyright (C) 2019 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#pragma once
18
19#include <map>
20#include <string>
21#include <vector>
22
23namespace android {
24namespace hardware {
25namespace boot {
26namespace V1_2 {
27namespace implementation {
28
29#define GPT_SIGNATURE 0x5452415020494645UL
30
31typedef struct {
32 uint8_t type_guid[16];
33 uint8_t guid[16];
34 uint64_t first_lba;
35 uint64_t last_lba;
36 uint64_t attr;
37 uint16_t name[36];
38} __attribute__((packed)) gpt_entry;
39
40typedef struct {
41 uint64_t signature;
42 uint32_t revision;
43 uint32_t header_size;
44 uint32_t crc32;
45 uint32_t reserved;
46 uint64_t current_lba;
47 uint64_t backup_lba;
48 uint64_t first_usable_lba;
49 uint64_t last_usable_lba;
50 uint8_t disk_guid[16];
51 uint64_t start_lba;
52 uint32_t entry_count;
53 uint32_t entry_size;
54 uint32_t entries_crc32;
55} __attribute__((packed)) gpt_header;
56
57class GptUtils {
58 public:
59 GptUtils(const std::string dev_path);
60 int Load(void);
61 gpt_entry *GetPartitionEntry(std::string name);
62 int Sync(void);
63 ~GptUtils();
64
65 private:
66 std::string dev_path;
67 int fd;
68 uint32_t block_size;
69 gpt_header gpt_primary;
70 gpt_header gpt_backup;
71 std::vector<gpt_entry> entry_array;
72 std::map<std::string, gpt_entry *> entries;
73};
74
75} // namespace implementation
76} // namespace V1_2
77} // namespace boot
78} // namespace hardware
79} // namespace android