]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTable.h
MdePkg: Fix SmBios.h PROCESSOR_CHARACTERISTIC_FLAGS to be UINT16
[mirror_edk2.git] / MdeModulePkg / Universal / Acpi / AcpiTableDxe / AcpiTable.h
CommitLineData
5f55c700 1/** @file\r
2 ACPI Table Protocol Driver\r
3\r
d1102dba 4 Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
9d510e61 5 SPDX-License-Identifier: BSD-2-Clause-Patent\r
5f55c700 6\r
7**/\r
8\r
9#ifndef _ACPI_TABLE_H_\r
10#define _ACPI_TABLE_H_\r
11\r
12\r
13#include <PiDxe.h>\r
14\r
15#include <Protocol/AcpiTable.h>\r
16#include <Guid/Acpi.h>\r
3dc8585e 17#include <Protocol/AcpiSystemDescriptionTable.h>\r
5f55c700 18\r
19#include <Library/BaseLib.h>\r
20#include <Library/DebugLib.h>\r
21#include <Library/UefiLib.h>\r
22#include <Library/BaseMemoryLib.h>\r
23#include <Library/UefiDriverEntryPoint.h>\r
24#include <Library/MemoryAllocationLib.h>\r
25#include <Library/UefiBootServicesTableLib.h>\r
26#include <Library/PcdLib.h>\r
27\r
28//\r
29// Statements that include other files\r
30//\r
31#include <IndustryStandard/Acpi.h>\r
32\r
3dc8585e
JY
33#include "AcpiSdt.h"\r
34\r
5f55c700 35//\r
f0071740 36// Great than or equal to 2.0.\r
5f55c700 37//\r
f0071740
SZ
38#define ACPI_TABLE_VERSION_GTE_2_0 (EFI_ACPI_TABLE_VERSION_2_0 | \\r
39 EFI_ACPI_TABLE_VERSION_3_0 | \\r
40 EFI_ACPI_TABLE_VERSION_4_0 | \\r
41 EFI_ACPI_TABLE_VERSION_5_0)\r
5f55c700 42\r
43//\r
44// Private Driver Data\r
45//\r
46//\r
47// ACPI Table Linked List Signature.\r
48//\r
49#define EFI_ACPI_TABLE_LIST_SIGNATURE SIGNATURE_32 ('E', 'A', 'T', 'L')\r
50\r
51//\r
52// ACPI Table Linked List Entry definition.\r
53//\r
54// Signature must be set to EFI_ACPI_TABLE_LIST_SIGNATURE\r
55// Link is the linked list data.\r
56// Version is the versions of the ACPI tables that this table belongs in.\r
57// Table is a pointer to the table.\r
58// PageAddress is the address of the pages allocated for the table.\r
59// NumberOfPages is the number of pages allocated at PageAddress.\r
60// Handle is used to identify a particular table.\r
61//\r
62typedef struct {\r
63 UINT32 Signature;\r
64 LIST_ENTRY Link;\r
65 EFI_ACPI_TABLE_VERSION Version;\r
66 EFI_ACPI_COMMON_HEADER *Table;\r
67 EFI_PHYSICAL_ADDRESS PageAddress;\r
68 UINTN NumberOfPages;\r
69 UINTN Handle;\r
70} EFI_ACPI_TABLE_LIST;\r
71\r
72//\r
3dc8585e 73// Containment record for ACPI Table linked list.\r
5f55c700 74//\r
75#define EFI_ACPI_TABLE_LIST_FROM_LINK(_link) CR (_link, EFI_ACPI_TABLE_LIST, Link, EFI_ACPI_TABLE_LIST_SIGNATURE)\r
76\r
77//\r
78// The maximum number of tables this driver supports\r
79//\r
80#define EFI_ACPI_MAX_NUM_TABLES 20\r
81\r
5f55c700 82//\r
83// Protocol private structure definition\r
84//\r
85//\r
86// ACPI support protocol instance signature definition.\r
87//\r
88#define EFI_ACPI_TABLE_SIGNATURE SIGNATURE_32 ('S', 'T', 'A', 'E')\r
89\r
90//\r
91// ACPI support protocol instance data structure\r
92//\r
93typedef struct {\r
94 UINTN Signature;\r
95 EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_POINTER *Rsdp1; // Pointer to RSD_PTR structure\r
96 EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER *Rsdp3; // Pointer to RSD_PTR structure\r
97 EFI_ACPI_DESCRIPTION_HEADER *Rsdt1; // Pointer to RSDT table header\r
98 EFI_ACPI_DESCRIPTION_HEADER *Rsdt3; // Pointer to RSDT table header\r
99 EFI_ACPI_DESCRIPTION_HEADER *Xsdt; // Pointer to XSDT table header\r
100 EFI_ACPI_1_0_FIXED_ACPI_DESCRIPTION_TABLE *Fadt1; // Pointer to FADT table header\r
101 EFI_ACPI_3_0_FIXED_ACPI_DESCRIPTION_TABLE *Fadt3; // Pointer to FADT table header\r
102 EFI_ACPI_1_0_FIRMWARE_ACPI_CONTROL_STRUCTURE *Facs1; // Pointer to FACS table header\r
103 EFI_ACPI_3_0_FIRMWARE_ACPI_CONTROL_STRUCTURE *Facs3; // Pointer to FACS table header\r
104 EFI_ACPI_DESCRIPTION_HEADER *Dsdt1; // Pointer to DSDT table header\r
105 EFI_ACPI_DESCRIPTION_HEADER *Dsdt3; // Pointer to DSDT table header\r
3dc8585e 106 LIST_ENTRY TableList;\r
5f55c700 107 UINTN NumberOfTableEntries1; // Number of ACPI 1.0 tables\r
108 UINTN NumberOfTableEntries3; // Number of ACPI 3.0 tables\r
109 UINTN CurrentHandle;\r
5f55c700 110 EFI_ACPI_TABLE_PROTOCOL AcpiTableProtocol;\r
3dc8585e
JY
111 EFI_ACPI_SDT_PROTOCOL AcpiSdtProtocol;\r
112 LIST_ENTRY NotifyList;\r
5f55c700 113} EFI_ACPI_TABLE_INSTANCE;\r
114\r
115//\r
116// ACPI table protocol instance containing record macro\r
117//\r
118#define EFI_ACPI_TABLE_INSTANCE_FROM_THIS(a) \\r
119 CR (a, \\r
120 EFI_ACPI_TABLE_INSTANCE, \\r
121 AcpiTableProtocol, \\r
122 EFI_ACPI_TABLE_SIGNATURE \\r
123 )\r
124\r
125//\r
126// Protocol Constructor functions\r
127//\r
128\r
129/**\r
130 Constructor for the ACPI support protocol. Initializes instance\r
131 data.\r
132\r
133 @param AcpiTableInstance Instance to construct\r
134\r
135 @return EFI_SUCCESS Instance initialized.\r
136 @return EFI_OUT_OF_RESOURCES Unable to allocate required resources.\r
137\r
138**/\r
139EFI_STATUS\r
140AcpiTableAcpiTableConstructor (\r
141 EFI_ACPI_TABLE_INSTANCE *AcpiTableInstance\r
142 );\r
143\r
144\r
145/**\r
146 Entry point of the ACPI table driver.\r
d1102dba 147 Creates and initializes an instance of the ACPI Table\r
5f55c700 148 Protocol and installs it on a new handle.\r
149\r
150 @param ImageHandle A handle for the image that is initializing this driver\r
151 @param SystemTable A pointer to the EFI system table\r
152\r
153 @return EFI_SUCCESS Driver initialized successfully\r
d1102dba 154 @return EFI_LOAD_ERROR Failed to Initialize or has been loaded\r
5f55c700 155 @return EFI_OUT_OF_RESOURCES Could not allocate needed resources\r
156\r
157**/\r
158EFI_STATUS\r
159EFIAPI\r
160InitializeAcpiTableDxe (\r
161 IN EFI_HANDLE ImageHandle,\r
162 IN EFI_SYSTEM_TABLE *SystemTable\r
163 );\r
164\r
3dc8585e
JY
165/**\r
166\r
167 This function finds the table specified by the handle and returns a pointer to it.\r
168 If the handle is not found, EFI_NOT_FOUND is returned and the contents of Table are\r
169 undefined.\r
170\r
171 @param[in] Handle Table to find.\r
172 @param[in] TableList Table list to search\r
d1102dba 173 @param[out] Table Pointer to table found.\r
3dc8585e
JY
174\r
175 @retval EFI_SUCCESS The function completed successfully.\r
176 @retval EFI_NOT_FOUND No table found matching the handle specified.\r
177\r
178**/\r
179EFI_STATUS\r
180FindTableByHandle (\r
181 IN UINTN Handle,\r
182 IN LIST_ENTRY *TableList,\r
183 OUT EFI_ACPI_TABLE_LIST **Table\r
184 );\r
185\r
186/**\r
187\r
188 This function calculates and updates an UINT8 checksum.\r
189\r
190 @param[in] Buffer Pointer to buffer to checksum\r
191 @param[in] Size Number of bytes to checksum\r
192 @param[in] ChecksumOffset Offset to place the checksum result in\r
193\r
194 @retval EFI_SUCCESS The function completed successfully.\r
195\r
196**/\r
197EFI_STATUS\r
198AcpiPlatformChecksum (\r
199 IN VOID *Buffer,\r
200 IN UINTN Size,\r
201 IN UINTN ChecksumOffset\r
202 );\r
203\r
204/**\r
205 This function invokes ACPI notification.\r
206\r
207 @param[in] AcpiTableInstance Instance to AcpiTable\r
208 @param[in] Version Version(s) to set.\r
209 @param[in] Handle Handle of the table.\r
210**/\r
211VOID\r
212SdtNotifyAcpiList (\r
213 IN EFI_ACPI_TABLE_INSTANCE *AcpiTableInstance,\r
214 IN EFI_ACPI_TABLE_VERSION Version,\r
215 IN UINTN Handle\r
216 );\r
217\r
218/**\r
219 This function initializes AcpiSdt protocol in ACPI table instance.\r
220\r
221 @param[in] AcpiTableInstance Instance to construct\r
222**/\r
223VOID\r
224SdtAcpiTableAcpiSdtConstructor (\r
225 IN EFI_ACPI_TABLE_INSTANCE *AcpiTableInstance\r
226 );\r
227\r
228//\r
229// export PrivateData symbol, because we need that in AcpiSdtProtol implementation\r
230//\r
231extern EFI_HANDLE mHandle;\r
232extern EFI_ACPI_TABLE_INSTANCE *mPrivateData;\r
233\r
5f55c700 234#endif\r