|  | @@ -0,0 +1,129 @@
 | 
		
	
		
			
			|  | 1 | +/** @file
 | 
		
	
		
			
			|  | 2 | +  The file provides the protocol to install or remove an ACPI
 | 
		
	
		
			
			|  | 3 | +  table from a platform.
 | 
		
	
		
			
			|  | 4 | +
 | 
		
	
		
			
			|  | 5 | +  Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
 | 
		
	
		
			
			|  | 6 | +  This program and the accompanying materials
 | 
		
	
		
			
			|  | 7 | +  are licensed and made available under the terms and conditions of the BSD License
 | 
		
	
		
			
			|  | 8 | +  which accompanies this distribution.  The full text of the license may be found at
 | 
		
	
		
			
			|  | 9 | +  http://opensource.org/licenses/bsd-license.php
 | 
		
	
		
			
			|  | 10 | +
 | 
		
	
		
			
			|  | 11 | +  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 | 
		
	
		
			
			|  | 12 | +  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | 
		
	
		
			
			|  | 13 | +
 | 
		
	
		
			
			|  | 14 | +**/
 | 
		
	
		
			
			|  | 15 | +
 | 
		
	
		
			
			|  | 16 | +#ifndef __ACPI_TABLE_H___
 | 
		
	
		
			
			|  | 17 | +#define __ACPI_TABLE_H___
 | 
		
	
		
			
			|  | 18 | +
 | 
		
	
		
			
			|  | 19 | +FILE_LICENCE ( BSD3 );
 | 
		
	
		
			
			|  | 20 | +
 | 
		
	
		
			
			|  | 21 | +#define EFI_ACPI_TABLE_PROTOCOL_GUID \
 | 
		
	
		
			
			|  | 22 | +  { 0xffe06bdd, 0x6107, 0x46a6, { 0x7b, 0xb2, 0x5a, 0x9c, 0x7e, 0xc5, 0x27, 0x5c }}
 | 
		
	
		
			
			|  | 23 | +
 | 
		
	
		
			
			|  | 24 | +
 | 
		
	
		
			
			|  | 25 | +typedef struct _EFI_ACPI_TABLE_PROTOCOL EFI_ACPI_TABLE_PROTOCOL;
 | 
		
	
		
			
			|  | 26 | +
 | 
		
	
		
			
			|  | 27 | +/**
 | 
		
	
		
			
			|  | 28 | +
 | 
		
	
		
			
			|  | 29 | +  The InstallAcpiTable() function allows a caller to install an
 | 
		
	
		
			
			|  | 30 | +  ACPI table. When successful, the table will be linked by the
 | 
		
	
		
			
			|  | 31 | +  RSDT/XSDT. AcpiTableBuffer specifies the table to be installed.
 | 
		
	
		
			
			|  | 32 | +  InstallAcpiTable() will make a copy of the table and insert the
 | 
		
	
		
			
			|  | 33 | +  copy into the RSDT/XSDT. InstallAcpiTable() must insert the new
 | 
		
	
		
			
			|  | 34 | +  table at the end of the RSDT/XSDT. To prevent namespace
 | 
		
	
		
			
			|  | 35 | +  collision, ACPI tables may be created using UEFI ACPI table
 | 
		
	
		
			
			|  | 36 | +  format. If this protocol is used to install a table with a
 | 
		
	
		
			
			|  | 37 | +  signature already present in the system, the new table will not
 | 
		
	
		
			
			|  | 38 | +  replace the existing table. It is a platform implementation
 | 
		
	
		
			
			|  | 39 | +  decision to add a new table with a signature matching an
 | 
		
	
		
			
			|  | 40 | +  existing table or disallow duplicate table signatures and
 | 
		
	
		
			
			|  | 41 | +  return EFI_ACCESS_DENIED. On successful output, TableKey is
 | 
		
	
		
			
			|  | 42 | +  initialized with a unique key. Its value may be used in a
 | 
		
	
		
			
			|  | 43 | +  subsequent call to UninstallAcpiTable to remove an ACPI table.
 | 
		
	
		
			
			|  | 44 | +  If an EFI application is running at the time of this call, the
 | 
		
	
		
			
			|  | 45 | +  relevant EFI_CONFIGURATION_TABLE pointer to the RSDT is no
 | 
		
	
		
			
			|  | 46 | +  longer considered valid.
 | 
		
	
		
			
			|  | 47 | +
 | 
		
	
		
			
			|  | 48 | +
 | 
		
	
		
			
			|  | 49 | +  @param This                 A pointer to a EFI_ACPI_TABLE_PROTOCOL.
 | 
		
	
		
			
			|  | 50 | +
 | 
		
	
		
			
			|  | 51 | +  @param AcpiTableBuffer      A pointer to a buffer containing the
 | 
		
	
		
			
			|  | 52 | +                              ACPI table to be installed.
 | 
		
	
		
			
			|  | 53 | +
 | 
		
	
		
			
			|  | 54 | +  @param AcpiTableBufferSize  Specifies the size, in bytes, of
 | 
		
	
		
			
			|  | 55 | +                              the AcpiTableBuffer buffer.
 | 
		
	
		
			
			|  | 56 | +
 | 
		
	
		
			
			|  | 57 | +
 | 
		
	
		
			
			|  | 58 | +  @param TableKey             Returns a key to refer to the ACPI table.
 | 
		
	
		
			
			|  | 59 | +
 | 
		
	
		
			
			|  | 60 | +  @retval EFI_SUCCESS           The table was successfully inserted
 | 
		
	
		
			
			|  | 61 | +
 | 
		
	
		
			
			|  | 62 | +  @retval EFI_INVALID_PARAMETER Either AcpiTableBuffer is NULL,
 | 
		
	
		
			
			|  | 63 | +                                TableKey is NULL, or
 | 
		
	
		
			
			|  | 64 | +                                AcpiTableBufferSize and the size
 | 
		
	
		
			
			|  | 65 | +                                field embedded in the ACPI table
 | 
		
	
		
			
			|  | 66 | +                                pointed to by AcpiTableBuffer
 | 
		
	
		
			
			|  | 67 | +                                are not in sync.
 | 
		
	
		
			
			|  | 68 | +
 | 
		
	
		
			
			|  | 69 | +  @retval EFI_OUT_OF_RESOURCES  Insufficient resources exist to
 | 
		
	
		
			
			|  | 70 | +                                complete the request.
 | 
		
	
		
			
			|  | 71 | +  @retval EFI_ACCESS_DENIED     The table signature matches a table already
 | 
		
	
		
			
			|  | 72 | +                                present in the system and platform policy
 | 
		
	
		
			
			|  | 73 | +                                does not allow duplicate tables of this type.
 | 
		
	
		
			
			|  | 74 | +
 | 
		
	
		
			
			|  | 75 | +**/
 | 
		
	
		
			
			|  | 76 | +typedef
 | 
		
	
		
			
			|  | 77 | +EFI_STATUS
 | 
		
	
		
			
			|  | 78 | +(EFIAPI *EFI_ACPI_TABLE_INSTALL_ACPI_TABLE)(
 | 
		
	
		
			
			|  | 79 | +  IN   EFI_ACPI_TABLE_PROTOCOL       *This,
 | 
		
	
		
			
			|  | 80 | +  IN   VOID                          *AcpiTableBuffer,
 | 
		
	
		
			
			|  | 81 | +  IN   UINTN                         AcpiTableBufferSize,
 | 
		
	
		
			
			|  | 82 | +  OUT  UINTN                         *TableKey
 | 
		
	
		
			
			|  | 83 | +);
 | 
		
	
		
			
			|  | 84 | +
 | 
		
	
		
			
			|  | 85 | +
 | 
		
	
		
			
			|  | 86 | +/**
 | 
		
	
		
			
			|  | 87 | +
 | 
		
	
		
			
			|  | 88 | +  The UninstallAcpiTable() function allows a caller to remove an
 | 
		
	
		
			
			|  | 89 | +  ACPI table. The routine will remove its reference from the
 | 
		
	
		
			
			|  | 90 | +  RSDT/XSDT. A table is referenced by the TableKey parameter
 | 
		
	
		
			
			|  | 91 | +  returned from a prior call to InstallAcpiTable(). If an EFI
 | 
		
	
		
			
			|  | 92 | +  application is running at the time of this call, the relevant
 | 
		
	
		
			
			|  | 93 | +  EFI_CONFIGURATION_TABLE pointer to the RSDT is no longer
 | 
		
	
		
			
			|  | 94 | +  considered valid.
 | 
		
	
		
			
			|  | 95 | +
 | 
		
	
		
			
			|  | 96 | +  @param This                   A pointer to a EFI_ACPI_TABLE_PROTOCOL.
 | 
		
	
		
			
			|  | 97 | +
 | 
		
	
		
			
			|  | 98 | +  @param TableKey               Specifies the table to uninstall. The key was
 | 
		
	
		
			
			|  | 99 | +                                returned from InstallAcpiTable().
 | 
		
	
		
			
			|  | 100 | +
 | 
		
	
		
			
			|  | 101 | +  @retval EFI_SUCCESS           The table was successfully inserted
 | 
		
	
		
			
			|  | 102 | +
 | 
		
	
		
			
			|  | 103 | +  @retval EFI_NOT_FOUND         TableKey does not refer to a valid key
 | 
		
	
		
			
			|  | 104 | +                                for a table entry.
 | 
		
	
		
			
			|  | 105 | +
 | 
		
	
		
			
			|  | 106 | +  @retval EFI_OUT_OF_RESOURCES  Insufficient resources exist to
 | 
		
	
		
			
			|  | 107 | +                                complete the request.
 | 
		
	
		
			
			|  | 108 | +
 | 
		
	
		
			
			|  | 109 | +**/
 | 
		
	
		
			
			|  | 110 | +typedef
 | 
		
	
		
			
			|  | 111 | +EFI_STATUS
 | 
		
	
		
			
			|  | 112 | +(EFIAPI *EFI_ACPI_TABLE_UNINSTALL_ACPI_TABLE)(
 | 
		
	
		
			
			|  | 113 | +  IN  EFI_ACPI_TABLE_PROTOCOL       *This,
 | 
		
	
		
			
			|  | 114 | +  IN  UINTN                         TableKey
 | 
		
	
		
			
			|  | 115 | +);
 | 
		
	
		
			
			|  | 116 | +
 | 
		
	
		
			
			|  | 117 | +///
 | 
		
	
		
			
			|  | 118 | +/// The EFI_ACPI_TABLE_PROTOCOL provides the ability for a component
 | 
		
	
		
			
			|  | 119 | +/// to install and uninstall ACPI tables from a platform.
 | 
		
	
		
			
			|  | 120 | +///
 | 
		
	
		
			
			|  | 121 | +struct _EFI_ACPI_TABLE_PROTOCOL {
 | 
		
	
		
			
			|  | 122 | +  EFI_ACPI_TABLE_INSTALL_ACPI_TABLE   InstallAcpiTable;
 | 
		
	
		
			
			|  | 123 | +  EFI_ACPI_TABLE_UNINSTALL_ACPI_TABLE UninstallAcpiTable;
 | 
		
	
		
			
			|  | 124 | +};
 | 
		
	
		
			
			|  | 125 | +
 | 
		
	
		
			
			|  | 126 | +extern EFI_GUID gEfiAcpiTableProtocolGuid;
 | 
		
	
		
			
			|  | 127 | +
 | 
		
	
		
			
			|  | 128 | +#endif
 | 
		
	
		
			
			|  | 129 | +
 |