blob: ec68cf6fcbef1f12b441a31992ce30200d7ed506 [file] [log] [blame]
Jason Chiu33031712023-11-27 16:52:08 +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 aidl::android::hardware::boot {
24
25#define GPT_SIGNATURE 0x5452415020494645UL
26
27typedef struct {
28 uint8_t type_guid[16];
29 uint8_t guid[16];
30 uint64_t first_lba;
31 uint64_t last_lba;
32 uint64_t attr;
33 uint16_t name[36];
34} __attribute__((packed)) gpt_entry;
35
36typedef struct {
37 uint64_t signature;
38 uint32_t revision;
39 uint32_t header_size;
40 uint32_t crc32;
41 uint32_t reserved;
42 uint64_t current_lba;
43 uint64_t backup_lba;
44 uint64_t first_usable_lba;
45 uint64_t last_usable_lba;
46 uint8_t disk_guid[16];
47 uint64_t start_lba;
48 uint32_t entry_count;
49 uint32_t entry_size;
50 uint32_t entries_crc32;
51} __attribute__((packed)) gpt_header;
52
53class GptUtils {
54 public:
55 GptUtils(const std::string dev_path);
56 int Load(void);
57 gpt_entry *GetPartitionEntry(std::string name);
58 int Sync(void);
59 ~GptUtils();
60
61 private:
62 std::string dev_path;
63 int fd;
64 uint32_t block_size;
65 gpt_header gpt_primary;
66 gpt_header gpt_backup;
67 std::vector<gpt_entry> entry_array;
68 std::map<std::string, gpt_entry *> entries;
69};
70
71} // namespace aidl::android::hardware::boot