This makes the InstallQemuFwcfgTables function reusable by bhyve. Signed-off-by: Corvin Köhne <corvink@FreeBSD.org> Acked-by: Peter Grehan <grehan@freebsd.org>
		
			
				
	
	
		
			106 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			106 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @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
 |