Home | History | Annotate | Download | only in SmmCpuFeaturesLib
      1 /** @file
      2   SMM STM support
      3 
      4   Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>
      5   This program and the accompanying materials
      6   are licensed and made available under the terms and conditions of the BSD License
      7   which accompanies this distribution.  The full text of the license may be found at
      8   http://opensource.org/licenses/bsd-license.php.
      9 
     10   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     11   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     12 
     13 **/
     14 
     15 #ifndef _SMM_STM_H_
     16 #define _SMM_STM_H_
     17 
     18 #include <Protocol/SmMonitorInit.h>
     19 
     20 /**
     21 
     22   Create 4G page table for STM.
     23   2M PAE page table in X64 version.
     24 
     25   @param PageTableBase        The page table base in MSEG
     26 
     27 **/
     28 VOID
     29 StmGen4GPageTable (
     30   IN UINTN              PageTableBase
     31   );
     32 
     33 /**
     34   This is SMM exception handle.
     35   Consumed by STM when exception happen.
     36 
     37   @param Context  STM protection exception stack frame
     38 
     39   @return the EBX value for STM reference.
     40           EBX = 0: resume SMM guest using register state found on exception stack.
     41           EBX = 1 to 0x0F: EBX contains a BIOS error code which the STM must record in the
     42                            TXT.ERRORCODE register and subsequently reset the system via
     43                            TXT.CMD.SYS_RESET. The value of the TXT.ERRORCODE register is calculated as
     44                            follows: TXT.ERRORCODE = (EBX & 0x0F) | STM_CRASH_BIOS_PANIC
     45           EBX = 0x10 to 0xFFFFFFFF - reserved, do not use.
     46 
     47 **/
     48 UINT32
     49 EFIAPI
     50 SmmStmExceptionHandler (
     51   IN OUT STM_PROTECTION_EXCEPTION_STACK_FRAME Context
     52   );
     53 
     54 
     55 /**
     56 
     57   Get STM state.
     58 
     59   @return STM state
     60 
     61 **/
     62 EFI_SM_MONITOR_STATE
     63 EFIAPI
     64 GetMonitorState (
     65   VOID
     66   );
     67 
     68 /**
     69 
     70   Load STM image to MSEG.
     71 
     72   @param StmImage      STM image
     73   @param StmImageSize  STM image size
     74 
     75   @retval EFI_SUCCESS            Load STM to MSEG successfully
     76   @retval EFI_BUFFER_TOO_SMALL   MSEG is smaller than minimal requirement of STM image
     77 
     78 **/
     79 EFI_STATUS
     80 EFIAPI
     81 LoadMonitor (
     82   IN EFI_PHYSICAL_ADDRESS StmImage,
     83   IN UINTN                StmImageSize
     84   );
     85 
     86 /**
     87 
     88   Add resources in list to database. Allocate new memory areas as needed.
     89 
     90   @param ResourceList  A pointer to resource list to be added
     91   @param NumEntries    Optional number of entries.
     92                        If 0, list must be terminated by END_OF_RESOURCES.
     93 
     94   @retval EFI_SUCCESS            If resources are added
     95   @retval EFI_INVALID_PARAMETER  If nested procedure detected resource failer
     96   @retval EFI_OUT_OF_RESOURCES   If nested procedure returned it and we cannot allocate more areas.
     97 
     98 **/
     99 EFI_STATUS
    100 EFIAPI
    101 AddPiResource (
    102   IN  STM_RSC  *ResourceList,
    103   IN  UINT32    NumEntries OPTIONAL
    104   );
    105 
    106 /**
    107 
    108   Delete resources in list to database.
    109 
    110   @param ResourceList  A pointer to resource list to be deleted
    111                        NULL means delete all resources.
    112   @param NumEntries    Optional number of entries.
    113                        If 0, list must be terminated by END_OF_RESOURCES.
    114 
    115   @retval EFI_SUCCESS            If resources are deleted
    116   @retval EFI_INVALID_PARAMETER  If nested procedure detected resource failer
    117 
    118 **/
    119 EFI_STATUS
    120 EFIAPI
    121 DeletePiResource (
    122   IN  STM_RSC    *ResourceList,
    123   IN  UINT32      NumEntries OPTIONAL
    124   );
    125 
    126 /**
    127 
    128   Get BIOS resources.
    129 
    130   @param ResourceList  A pointer to resource list to be filled
    131   @param ResourceSize  On input it means size of resource list input.
    132                        On output it means size of resource list filled,
    133                        or the size of resource list to be filled if size of too small.
    134 
    135   @retval EFI_SUCCESS            If resources are returned.
    136   @retval EFI_BUFFER_TOO_SMALL   If resource list buffer is too small to hold the whole resources.
    137 
    138 **/
    139 EFI_STATUS
    140 EFIAPI
    141 GetPiResource (
    142   OUT    STM_RSC *ResourceList,
    143   IN OUT UINT32  *ResourceSize
    144   );
    145 
    146 /**
    147   This functin initialize STM configuration table.
    148 **/
    149 VOID
    150 StmSmmConfigurationTableInit (
    151   VOID
    152   );
    153 
    154 /**
    155   This function notify STM resource change.
    156 
    157   @param StmResource BIOS STM resource
    158 
    159 **/
    160 VOID
    161 NotifyStmResourceChange (
    162   IN VOID *StmResource
    163   );
    164 
    165 /**
    166   This function return BIOS STM resource.
    167 
    168   @return BIOS STM resource
    169 
    170 **/
    171 VOID *
    172 GetStmResource (
    173   VOID
    174   );
    175 
    176 #endif
    177