/** @file Copyright (c) 2023, Corvin Köhne SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef ACPI_PLATFORM_LIB_H_ #define ACPI_PLATFORM_LIB_H_ #include #include 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