Home | History | Annotate | Download | only in Ppi
      1 //
      2 //
      3 /*++
      4 
      5 Copyright (c)  2009  - 2014, Intel Corporation. All rights reserved
      6 
      7   This program and the accompanying materials are licensed and made available under
      8   the terms and conditions of the BSD License that accompanies this distribution.
      9   The full text of the license may be found at
     10   http://opensource.org/licenses/bsd-license.php.
     11 
     12   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     13   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     14 
     15 
     16 
     17 Module Name:
     18 
     19   SmmAccess.h
     20 
     21 Abstract:
     22 
     23   SmmAccess PPI
     24 
     25   This code abstracts the PEI core to provide SmmAccess services.
     26 
     27 --*/
     28 
     29 #ifndef _PEI_SMM_ACCESS_PPI_H_
     30 #define _PEI_SMM_ACCESS_PPI_H_
     31 
     32 #ifdef ECP_FLAG
     33 #include "Guid/SmramMemoryReserve/SmramMemoryReserve.h"
     34 #else
     35 #include "Guid/SmramMemoryReserve.h"
     36 #endif
     37 
     38 #define PEI_SMM_ACCESS_PPI_GUID \
     39   { \
     40     0x268f33a9, 0xcccd, 0x48be, 0x88, 0x17, 0x86, 0x5, 0x3a, 0xc3, 0x2e, 0xd6 \
     41   }
     42 
     43 typedef struct _PEI_SMM_ACCESS_PPI PEI_SMM_ACCESS_PPI;
     44 
     45 typedef
     46 EFI_STATUS
     47 (EFIAPI *PEI_SMM_OPEN) (
     48   IN EFI_PEI_SERVICES                **PeiServices,
     49   IN PEI_SMM_ACCESS_PPI              *This,
     50   IN UINTN                           DescriptorIndex
     51   )
     52 /*++
     53 
     54   Routine Description:
     55     This routine accepts a request to "open" a region of SMRAM.  The
     56     region could be legacy ABSEG, HSEG, or TSEG near top of physical memory.
     57     The use of "open" means that the memory is visible from all PEIM
     58     and SMM agents.
     59 
     60   Arguments:
     61     PeiServices           - General purpose services available to every PEIM.
     62     This                  - Pointer to the SMM Access Interface.
     63     DescriptorIndex       - Region of SMRAM to Open.
     64 
     65   Returns:
     66     EFI_SUCCESS           - The region was successfully opened.
     67     EFI_DEVICE_ERROR      - The region could not be opened because locked by
     68                             chipset.
     69     EFI_INVALID_PARAMETER - The descriptor index was out of bounds.
     70 --*/
     71 ;
     72 
     73 typedef
     74 EFI_STATUS
     75 (EFIAPI *PEI_SMM_CLOSE) (
     76   IN EFI_PEI_SERVICES                **PeiServices,
     77   IN PEI_SMM_ACCESS_PPI              *This,
     78   IN UINTN                           DescriptorIndex
     79   )
     80 /*++
     81 
     82   Routine Description:
     83     This routine accepts a request to "close" a region of SMRAM.  The
     84     region could be legacy AB or TSEG near top of physical memory.
     85     The use of "close" means that the memory is only visible from SMM agents,
     86     not from PEIM.
     87 
     88   Arguments:
     89     PeiServices           - General purpose services available to every PEIM.
     90     This                  - Pointer to the SMM Access Interface.
     91     DescriptorIndex       - Region of SMRAM to Close.
     92 
     93   Returns:
     94     EFI_SUCCESS           - The region was successfully closed.
     95     EFI_DEVICE_ERROR      - The region could not be closed because locked by
     96                               chipset.
     97     EFI_INVALID_PARAMETER - The descriptor index was out of bounds.
     98 
     99 --*/
    100 ;
    101 
    102 typedef
    103 EFI_STATUS
    104 (EFIAPI *PEI_SMM_LOCK) (
    105   IN EFI_PEI_SERVICES                **PeiServices,
    106   IN PEI_SMM_ACCESS_PPI              *This,
    107   IN UINTN                           DescriptorIndex
    108   )
    109 /*++
    110 
    111   Routine Description:
    112     This routine accepts a request to "lock" SMRAM.  The
    113     region could be legacy AB or TSEG near top of physical memory.
    114     The use of "lock" means that the memory can no longer be opened
    115     to PEIM.
    116 
    117   Arguments:
    118     PeiServices           - General purpose services available to every PEIM.
    119     This                  - Pointer to the SMM Access Interface.
    120     DescriptorIndex       - Region of SMRAM to Lock.
    121 
    122   Returns:
    123     EFI_SUCCESS           - The region was successfully locked.
    124     EFI_DEVICE_ERROR      - The region could not be locked because at least
    125                             one range is still open.
    126     EFI_INVALID_PARAMETER - The descriptor index was out of bounds.
    127 
    128 --*/
    129 ;
    130 
    131 typedef
    132 EFI_STATUS
    133 (EFIAPI *PEI_SMM_CAPABILITIES) (
    134   IN EFI_PEI_SERVICES                **PeiServices,
    135   IN PEI_SMM_ACCESS_PPI              *This,
    136   IN OUT UINTN                       *SmramMapSize,
    137   IN OUT EFI_SMRAM_DESCRIPTOR        *SmramMap
    138   )
    139 /*++
    140 
    141   Routine Description:
    142     This routine services a user request to discover the SMRAM
    143     capabilities of this platform.  This will report the possible
    144     ranges that are possible for SMRAM access, based upon the
    145     memory controller capabilities.
    146 
    147   Arguments:
    148     PeiServices           - General purpose services available to every PEIM.
    149     This                  - Pointer to the SMRAM Access Interface.
    150     SmramMapSize          - Pointer to the variable containing size of the
    151                               buffer to contain the description information.
    152     SmramMap              - Buffer containing the data describing the Smram
    153                               region descriptors.
    154   Returns:
    155     EFI_BUFFER_TOO_SMALL  - The user did not provide a sufficient buffer.
    156     EFI_SUCCESS           - The user provided a sufficiently-sized buffer.
    157 --*/
    158 ;
    159 
    160 struct _PEI_SMM_ACCESS_PPI {
    161   PEI_SMM_OPEN          Open;
    162   PEI_SMM_CLOSE         Close;
    163   PEI_SMM_LOCK          Lock;
    164   PEI_SMM_CAPABILITIES  GetCapabilities;
    165   BOOLEAN               LockState;
    166   BOOLEAN               OpenState;
    167 };
    168 
    169 extern EFI_GUID gPeiSmmAccessPpiGuid;
    170 
    171 #endif
    172