blob: 120f5da50dee4f8cd76a80d22b9d5b4daaafb8ed [file] [log] [blame]
Levi Yun03adb132024-05-13 10:24:31 +01001/*
2 * Copyright (c) 2024, Arm Limited and Contributors. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#ifndef HOB_H
8#define HOB_H
9
10#include <stdbool.h>
11#include <stdint.h>
12
13#include <lib/hob/efi_types.h>
14#include <lib/utils_def.h>
15#include <tools_share/uuid.h>
16
17/*****************************************************************************
18 * Hob Generic Header *
19 *****************************************************************************/
20
21/**
22 * HobType values of EFI_HOB_GENERIC_HEADER.
23 */
24#define EFI_HOB_TYPE_HANDOFF U(0x0001)
25#define EFI_HOB_TYPE_MEMORY_ALLOCATION U(0x0002)
26#define EFI_HOB_TYPE_RESOURCE_DESCRIPTOR U(0x0003)
27#define EFI_HOB_TYPE_GUID_EXTENSION U(0x0004)
28#define EFI_HOB_TYPE_FV U(0x0005)
29#define EFI_HOB_TYPE_CPU U(0x0006)
30#define EFI_HOB_TYPE_MEMORY_POOL U(0x0007)
31#define EFI_HOB_TYPE_FV2 U(0x0009)
32#define EFI_HOB_TYPE_LOAD_PEIM_UNUSED U(0x000A)
33#define EFI_HOB_TYPE_UEFI_CAPSULE U(0x000B)
34#define EFI_HOB_TYPE_FV3 U(0x000C)
35#define EFI_HOB_TYPE_UNUSED U(0xFFFE)
36#define EFI_HOB_TYPE_END_OF_HOB_LIST U(0xFFFF)
37
38struct efi_hob_generic_header {
39 uint16_t hob_type;
40 uint16_t hob_length;
41 uint32_t reserved;
42};
43
44/*****************************************************************************
45 * PHIT Hob. *
46 *****************************************************************************/
47
48#define EFI_HOB_HANDOFF_TABLE_VERSION U(0x000a)
49
50struct efi_hob_handoff_info_table {
51 struct efi_hob_generic_header header;
52 uint32_t version;
53 efi_boot_mode_t boot_mode;
54 efi_physical_address_t efi_memory_top;
55 efi_physical_address_t efi_memory_bottom;
56 efi_physical_address_t efi_free_memory_top;
57 efi_physical_address_t efi_free_memory_bottom;
58 efi_physical_address_t efi_end_of_hob_list;
59};
60
61/*****************************************************************************
62 * Resource Descriptor Hob. *
63 *****************************************************************************/
64
65struct efi_hob_resource_descriptor {
66 struct efi_hob_generic_header header;
67 struct efi_guid owner;
68 efi_resource_type_t resource_type;
69 efi_resource_attribute_type_t resource_attribute;
70 efi_physical_address_t physical_start;
71 uint64_t resource_length;
72};
73
74/*****************************************************************************
75 * Guid Extension Hob. *
76 *****************************************************************************/
77struct efi_hob_guid_type {
78 struct efi_hob_generic_header header;
79 struct efi_guid name;
80 /**
81 * Guid specific data goes here.
82 */
83};
84
85/*****************************************************************************
86 * Firmware Volume Hob. *
87 *****************************************************************************/
88struct efi_hob_firmware_volume {
89 struct efi_hob_generic_header header;
90 efi_physical_address_t base_address;
91 uint64_t length;
92 /**
93 * Guid specific data goes here.
94 */
95};
96
97/*****************************************************************************
98 * Interfaces. *
99 *****************************************************************************/
100
101struct efi_hob_handoff_info_table *
102create_hob_list(
103 efi_physical_address_t efi_memory_begin, size_t efi_memory_length,
104 efi_physical_address_t efi_free_memory_bottom, size_t efi_free_memory_length);
105
106int create_resource_descriptor_hob(
107 struct efi_hob_handoff_info_table *hob_table,
108 efi_resource_type_t resource_type,
109 efi_resource_attribute_type_t resource_attribute,
110 efi_physical_address_t phy_addr_start,
111 uint64_t resource_length);
112
113int create_guid_hob(struct efi_hob_handoff_info_table *hob_table,
114 struct efi_guid *guid, uint16_t data_length, void **data);
115
116int create_fv_hob(struct efi_hob_handoff_info_table *hob_table,
117 efi_physical_address_t base_addr, uint64_t size);
118
119#endif /* HOB_H */