2 This is an implementation of the ACPI Support protocol.
3 It is in compliance with the 0.9 definition of the protocol.
5 Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
7 SPDX-License-Identifier: BSD-2-Clause-Patent
11 #ifndef _ACPI_SUPPORT_H_
12 #define _ACPI_SUPPORT_H_
17 #include <Protocol/AcpiTable.h>
18 #include <Guid/Acpi.h>
19 #include <Protocol/AcpiSupport.h>
21 #include <Library/BaseLib.h>
22 #include <Library/DebugLib.h>
23 #include <Library/UefiLib.h>
24 #include <Library/BaseMemoryLib.h>
25 #include <Library/UefiDriverEntryPoint.h>
26 #include <Library/MemoryAllocationLib.h>
27 #include <Library/UefiBootServicesTableLib.h>
28 #include <Library/PcdLib.h>
31 // Statements that include other files
33 #include <IndustryStandard/Acpi.h>
37 // Private Driver Data
40 // ACPI Table Linked List Signature.
42 #define EFI_ACPI_TABLE_LIST_SIGNATURE SIGNATURE_32 ('E', 'A', 'T', 'L')
45 // ACPI Table Linked List Entry definition.
47 // Signature must be set to EFI_ACPI_TABLE_LIST_SIGNATURE
48 // Link is the linked list data.
49 // Version is the versions of the ACPI tables that this table belongs in.
50 // Table is a pointer to the table.
51 // PageAddress is the address of the pages allocated for the table.
52 // NumberOfPages is the number of pages allocated at PageAddress.
53 // Handle is used to identify a particular table.
58 EFI_ACPI_TABLE_VERSION Version
;
59 EFI_ACPI_COMMON_HEADER
*Table
;
60 EFI_PHYSICAL_ADDRESS PageAddress
;
63 } EFI_ACPI_TABLE_LIST
;
66 // Containment record for linked list.
68 #define EFI_ACPI_TABLE_LIST_FROM_LINK(_link) CR (_link, EFI_ACPI_TABLE_LIST, Link, EFI_ACPI_TABLE_LIST_SIGNATURE)
71 // The maximum number of tables this driver supports
73 #define EFI_ACPI_MAX_NUM_TABLES 20
76 // Protocol private structure definition
79 // ACPI support protocol instance signature definition.
81 #define EFI_ACPI_SUPPORT_SIGNATURE SIGNATURE_32 ('S', 'S', 'A', 'E')
84 // ACPI support protocol instance data structure
88 EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_POINTER
*Rsdp1
; // Pointer to RSD_PTR structure
89 EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER
*Rsdp3
; // Pointer to RSD_PTR structure
90 EFI_ACPI_DESCRIPTION_HEADER
*Rsdt1
; // Pointer to RSDT table header
91 EFI_ACPI_DESCRIPTION_HEADER
*Rsdt3
; // Pointer to RSDT table header
92 EFI_ACPI_DESCRIPTION_HEADER
*Xsdt
; // Pointer to XSDT table header
93 EFI_ACPI_1_0_FIXED_ACPI_DESCRIPTION_TABLE
*Fadt1
; // Pointer to FADT table header
94 EFI_ACPI_3_0_FIXED_ACPI_DESCRIPTION_TABLE
*Fadt3
; // Pointer to FADT table header
95 EFI_ACPI_1_0_FIRMWARE_ACPI_CONTROL_STRUCTURE
*Facs1
; // Pointer to FACS table header
96 EFI_ACPI_3_0_FIRMWARE_ACPI_CONTROL_STRUCTURE
*Facs3
; // Pointer to FACS table header
97 EFI_ACPI_DESCRIPTION_HEADER
*Dsdt1
; // Pointer to DSDT table header
98 EFI_ACPI_DESCRIPTION_HEADER
*Dsdt3
; // Pointer to DSDT table header
100 UINTN NumberOfTableEntries1
; // Number of ACPI 1.0 tables
101 UINTN NumberOfTableEntries3
; // Number of ACPI 3.0 tables
103 BOOLEAN TablesInstalled1
; // ACPI 1.0 tables published
104 BOOLEAN TablesInstalled3
; // ACPI 3.0 tables published
105 EFI_ACPI_SUPPORT_PROTOCOL AcpiSupport
;
106 EFI_ACPI_TABLE_PROTOCOL AcpiTableProtocol
;
107 } EFI_ACPI_SUPPORT_INSTANCE
;
110 // ACPI support protocol instance containing record macro
112 #define EFI_ACPI_SUPPORT_INSTANCE_FROM_ACPI_SUPPORT_THIS(a) \
114 EFI_ACPI_SUPPORT_INSTANCE, \
116 EFI_ACPI_SUPPORT_SIGNATURE \
119 // ACPI table protocol instance containing record macro
121 #define EFI_ACPI_TABLE_INSTANCE_FROM_ACPI_SUPPORT_THIS(a) \
123 EFI_ACPI_SUPPORT_INSTANCE, \
125 EFI_ACPI_SUPPORT_SIGNATURE \
129 Constructor for the ACPI support protocol.
131 Constructor for the ACPI support protocol to initializes instance data.
133 @param AcpiSupportInstance Instance to construct
135 @retval EFI_SUCCESS Instance initialized.
136 @retval EFI_OUT_OF_RESOURCES Unable to allocate required resources.
139 AcpiSupportAcpiSupportConstructor (
140 IN EFI_ACPI_SUPPORT_INSTANCE
*AcpiSupportInstance
143 Entry point of the ACPI support driver. This function creates and initializes an instance of the ACPI Support
144 Protocol and installs it on a new handle.
146 @param ImageHandle A handle for the image that is initializing this driver
147 @param SystemTable A pointer to the EFI system table
149 @retval EFI_SUCCESS Driver initialized successfully
150 @retval EFI_LOAD_ERROR Failed to Initialize or has been loaded
151 @retval EFI_OUT_OF_RESOURCES Could not allocate needed resources
156 IN EFI_HANDLE ImageHandle
,
157 IN EFI_SYSTEM_TABLE
*SystemTable