Home | History | Annotate | Download | only in AcpiSupportDxe
      1 /** @file
      2   This is an implementation of the ACPI Support protocol.
      3   It is in compliance with the 0.9 definition of the protocol.
      4 
      5 Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>
      6 
      7 This program and the accompanying materials
      8 are licensed and made available under the terms and conditions
      9 of the BSD License which accompanies this distribution.  The
     10 full text of the license may be found at
     11 http://opensource.org/licenses/bsd-license.php
     12 
     13 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     14 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     15 
     16 **/
     17 
     18 #ifndef _ACPI_SUPPORT_H_
     19 #define _ACPI_SUPPORT_H_
     20 
     21 
     22 #include <PiDxe.h>
     23 
     24 #include <Protocol/AcpiTable.h>
     25 #include <Guid/Acpi.h>
     26 #include <Protocol/AcpiSupport.h>
     27 
     28 #include <Library/BaseLib.h>
     29 #include <Library/DebugLib.h>
     30 #include <Library/UefiLib.h>
     31 #include <Library/BaseMemoryLib.h>
     32 #include <Library/UefiDriverEntryPoint.h>
     33 #include <Library/MemoryAllocationLib.h>
     34 #include <Library/UefiBootServicesTableLib.h>
     35 #include <Library/PcdLib.h>
     36 
     37 //
     38 // Statements that include other files
     39 //
     40 #include <IndustryStandard/Acpi.h>
     41 
     42 
     43 //
     44 // Private Driver Data
     45 //
     46 //
     47 // ACPI Table Linked List Signature.
     48 //
     49 #define EFI_ACPI_TABLE_LIST_SIGNATURE SIGNATURE_32 ('E', 'A', 'T', 'L')
     50 
     51 //
     52 // ACPI Table Linked List Entry definition.
     53 //
     54 //  Signature must be set to EFI_ACPI_TABLE_LIST_SIGNATURE
     55 //  Link is the linked list data.
     56 //  Version is the versions of the ACPI tables that this table belongs in.
     57 //  Table is a pointer to the table.
     58 //  PageAddress is the address of the pages allocated for the table.
     59 //  NumberOfPages is the number of pages allocated at PageAddress.
     60 //  Handle is used to identify a particular table.
     61 //
     62 typedef struct {
     63   UINT32                  Signature;
     64   LIST_ENTRY          Link;
     65   EFI_ACPI_TABLE_VERSION  Version;
     66   EFI_ACPI_COMMON_HEADER  *Table;
     67   EFI_PHYSICAL_ADDRESS    PageAddress;
     68   UINTN                   NumberOfPages;
     69   UINTN                   Handle;
     70 } EFI_ACPI_TABLE_LIST;
     71 
     72 //
     73 // Containment record for linked list.
     74 //
     75 #define EFI_ACPI_TABLE_LIST_FROM_LINK(_link)  CR (_link, EFI_ACPI_TABLE_LIST, Link, EFI_ACPI_TABLE_LIST_SIGNATURE)
     76 
     77 //
     78 // The maximum number of tables this driver supports
     79 //
     80 #define EFI_ACPI_MAX_NUM_TABLES 20
     81 
     82 //
     83 // Protocol private structure definition
     84 //
     85 //
     86 // ACPI support protocol instance signature definition.
     87 //
     88 #define EFI_ACPI_SUPPORT_SIGNATURE  SIGNATURE_32 ('S', 'S', 'A', 'E')
     89 
     90 //
     91 // ACPI support protocol instance data structure
     92 //
     93 typedef struct {
     94   UINTN                                         Signature;
     95   EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_POINTER  *Rsdp1;                 // Pointer to RSD_PTR structure
     96   EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER  *Rsdp3;                 // Pointer to RSD_PTR structure
     97   EFI_ACPI_DESCRIPTION_HEADER                   *Rsdt1;                 // Pointer to RSDT table header
     98   EFI_ACPI_DESCRIPTION_HEADER                   *Rsdt3;                 // Pointer to RSDT table header
     99   EFI_ACPI_DESCRIPTION_HEADER                   *Xsdt;                  // Pointer to XSDT table header
    100   EFI_ACPI_1_0_FIXED_ACPI_DESCRIPTION_TABLE     *Fadt1;                 // Pointer to FADT table header
    101   EFI_ACPI_3_0_FIXED_ACPI_DESCRIPTION_TABLE     *Fadt3;                 // Pointer to FADT table header
    102   EFI_ACPI_1_0_FIRMWARE_ACPI_CONTROL_STRUCTURE  *Facs1;                 // Pointer to FACS table header
    103   EFI_ACPI_3_0_FIRMWARE_ACPI_CONTROL_STRUCTURE  *Facs3;                 // Pointer to FACS table header
    104   EFI_ACPI_DESCRIPTION_HEADER                   *Dsdt1;                 // Pointer to DSDT table header
    105   EFI_ACPI_DESCRIPTION_HEADER                   *Dsdt3;                 // Pointer to DSDT table header
    106   LIST_ENTRY                                TableList;
    107   UINTN                                         NumberOfTableEntries1;  // Number of ACPI 1.0 tables
    108   UINTN                                         NumberOfTableEntries3;  // Number of ACPI 3.0 tables
    109   UINTN                                         CurrentHandle;
    110   BOOLEAN                                       TablesInstalled1;       // ACPI 1.0 tables published
    111   BOOLEAN                                       TablesInstalled3;       // ACPI 3.0 tables published
    112   EFI_ACPI_SUPPORT_PROTOCOL                     AcpiSupport;
    113   EFI_ACPI_TABLE_PROTOCOL                       AcpiTableProtocol;
    114 } EFI_ACPI_SUPPORT_INSTANCE;
    115 
    116 //
    117 // ACPI support protocol instance containing record macro
    118 //
    119 #define EFI_ACPI_SUPPORT_INSTANCE_FROM_ACPI_SUPPORT_THIS(a) \
    120   CR (a, \
    121       EFI_ACPI_SUPPORT_INSTANCE, \
    122       AcpiSupport, \
    123       EFI_ACPI_SUPPORT_SIGNATURE \
    124       )
    125 //
    126 // ACPI table protocol instance containing record macro
    127 //
    128 #define EFI_ACPI_TABLE_INSTANCE_FROM_ACPI_SUPPORT_THIS(a) \
    129   CR (a, \
    130       EFI_ACPI_SUPPORT_INSTANCE, \
    131       AcpiTableProtocol, \
    132       EFI_ACPI_SUPPORT_SIGNATURE \
    133       )
    134 
    135 /**
    136   Constructor for the ACPI support protocol.
    137 
    138   Constructor for the ACPI support protocol to initializes instance data.
    139 
    140   @param AcpiSupportInstance   Instance to construct
    141 
    142   @retval EFI_SUCCESS           Instance initialized.
    143   @retval EFI_OUT_OF_RESOURCES  Unable to allocate required resources.
    144 **/
    145 EFI_STATUS
    146 AcpiSupportAcpiSupportConstructor (
    147   IN EFI_ACPI_SUPPORT_INSTANCE                 *AcpiSupportInstance
    148   );
    149 /**
    150   Entry point of the ACPI support driver. This function creates and initializes an instance of the ACPI Support
    151   Protocol and installs it on a new handle.
    152 
    153   @param ImageHandle   A handle for the image that is initializing this driver
    154   @param SystemTable   A pointer to the EFI system table
    155 
    156   @retval EFI_SUCCESS              Driver initialized successfully
    157   @retval EFI_LOAD_ERROR           Failed to Initialize or has been loaded
    158   @retval EFI_OUT_OF_RESOURCES     Could not allocate needed resources
    159 **/
    160 EFI_STATUS
    161 EFIAPI
    162 InstallAcpiSupport (
    163   IN EFI_HANDLE           ImageHandle,
    164   IN EFI_SYSTEM_TABLE     *SystemTable
    165   );
    166 #endif
    167