1 /*
2  * Copyright (c) 2016-2022, ARM Limited and Contributors. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #ifndef PARTITION_H
8 #define PARTITION_H
9 
10 #include <stdint.h>
11 
12 #include "efi.h"
13 #include "uuid.h"
14 
15 #if !PLAT_PARTITION_MAX_ENTRIES
16 #define PLAT_PARTITION_MAX_ENTRIES 16
17 #endif /* PLAT_PARTITION_MAX_ENTRIES */
18 
19 #if !PLAT_PARTITION_BLOCK_SIZE
20 #define PLAT_PARTITION_BLOCK_SIZE 512
21 #endif /* PLAT_PARTITION_BLOCK_SIZE */
22 
23 #define LEGACY_PARTITION_BLOCK_SIZE 512
24 
25 #define DEFAULT_GPT_HEADER_SIZE 92
26 
27 typedef struct partition_entry {
28     uint64_t start;
29     uint64_t length;
30     char name[EFI_NAMELEN];
31     struct efi_guid part_guid;
32     struct efi_guid type_guid;
33 } partition_entry_t;
34 
35 typedef struct partition_entry_list {
36     partition_entry_t list[PLAT_PARTITION_MAX_ENTRIES];
37     int entry_count;
38 } partition_entry_list_t;
39 
40 int load_partition_table(unsigned int image_id);
41 const partition_entry_t *get_partition_entry(const char *name);
42 const partition_entry_t *get_partition_entry_by_type(const uuid_t *type_guid);
43 const partition_entry_t *get_partition_replica_by_type(const uuid_t *type_uuid);
44 const partition_entry_t *get_partition_entry_by_uuid(const uuid_t *part_uuid);
45 const partition_entry_list_t *get_partition_entry_list(void);
46 void partition_init(unsigned int image_id);
47 
48 #endif /* PARTITION_H */
49