/** @file | |
Copyright (c) 2023, Corvin Köhne <corvink@FreeBSD.org> | |
SPDX-License-Identifier: BSD-2-Clause-Patent | |
**/ | |
#ifndef ACPI_PLATFORM_LIB_H_ | |
#define ACPI_PLATFORM_LIB_H_ | |
#include <Protocol/AcpiTable.h> | |
#include <Protocol/PciIo.h> | |
typedef struct { | |
EFI_PCI_IO_PROTOCOL *PciIo; | |
UINT64 PciAttributes; | |
} ORIGINAL_ATTRIBUTES; | |
typedef struct S3_CONTEXT S3_CONTEXT; | |
/** | |
Searches and returns the address of the ACPI Root System Description Pointer (RSDP) in system memory. | |
@param StartAddress Start address of search range. | |
@param EndAddress End address of search range. | |
@param RsdpPtr Return pointer to RSDP. | |
@retval EFI_SUCCESS RSDP successfully found. | |
@retval EFI_NOT_FOUND Couldn't find RSDP. | |
@retval EFI_ABORTED Invalid RSDP found. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
GetAcpiRsdpFromMemory ( | |
IN UINTN StartAddress, | |
IN UINTN EndAddress, | |
OUT EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER **RsdpPtr | |
); | |
/** | |
Get Acpi tables from the RSDP structure. And installs ACPI tables | |
into the RSDT/XSDT using InstallAcpiTable. Some signature of the installed | |
ACPI tables are: FACP, APIC, HPET, WAET, SSDT, FACS, DSDT. | |
@param AcpiProtocol Protocol instance pointer. | |
@return EFI_SUCCESS The table was successfully inserted. | |
@return EFI_INVALID_PARAMETER Either AcpiTableBuffer is NULL, TableHandle is | |
NULL, or AcpiTableBufferSize and the size | |
field embedded in the ACPI table pointed to | |
by AcpiTableBuffer are not in sync. | |
@return EFI_OUT_OF_RESOURCES Insufficient resources exist to complete the | |
request. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
InstallAcpiTablesFromRsdp ( | |
IN EFI_ACPI_TABLE_PROTOCOL *AcpiProtocol, | |
IN EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER *Rsdp | |
); | |
EFI_STATUS | |
EFIAPI | |
InstallQemuFwCfgTables ( | |
IN EFI_ACPI_TABLE_PROTOCOL *AcpiProtocol | |
); | |
VOID | |
EnablePciDecoding ( | |
OUT ORIGINAL_ATTRIBUTES **OriginalAttributes, | |
OUT UINTN *Count | |
); | |
VOID | |
RestorePciDecoding ( | |
IN ORIGINAL_ATTRIBUTES *OriginalAttributes, | |
IN UINTN Count | |
); | |
EFI_STATUS | |
AllocateS3Context ( | |
OUT S3_CONTEXT **S3Context, | |
IN UINTN WritePointerCount | |
); | |
VOID | |
ReleaseS3Context ( | |
IN S3_CONTEXT *S3Context | |
); | |
EFI_STATUS | |
SaveCondensedWritePointerToS3Context ( | |
IN OUT S3_CONTEXT *S3Context, | |
IN UINT16 PointerItem, | |
IN UINT8 PointerSize, | |
IN UINT32 PointerOffset, | |
IN UINT64 PointerValue | |
); | |
EFI_STATUS | |
TransferS3ContextToBootScript ( | |
IN S3_CONTEXT *S3Context | |
); | |
#endif |