/** @file | |
SMM STM support | |
Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR> | |
SPDX-License-Identifier: BSD-2-Clause-Patent | |
**/ | |
#ifndef _SMM_STM_H_ | |
#define _SMM_STM_H_ | |
#include <Protocol/SmMonitorInit.h> | |
/** | |
Create 4G page table for STM. | |
2M PAE page table in X64 version. | |
@param PageTableBase The page table base in MSEG | |
**/ | |
VOID | |
StmGen4GPageTable ( | |
IN UINTN PageTableBase | |
); | |
/** | |
This is SMM exception handle. | |
Consumed by STM when exception happen. | |
@param Context STM protection exception stack frame | |
@return the EBX value for STM reference. | |
EBX = 0: resume SMM guest using register state found on exception stack. | |
EBX = 1 to 0x0F: EBX contains a BIOS error code which the STM must record in the | |
TXT.ERRORCODE register and subsequently reset the system via | |
TXT.CMD.SYS_RESET. The value of the TXT.ERRORCODE register is calculated as | |
follows: TXT.ERRORCODE = (EBX & 0x0F) | STM_CRASH_BIOS_PANIC | |
EBX = 0x10 to 0xFFFFFFFF - reserved, do not use. | |
**/ | |
UINT32 | |
EFIAPI | |
SmmStmExceptionHandler ( | |
IN OUT STM_PROTECTION_EXCEPTION_STACK_FRAME Context | |
); | |
/** | |
Get STM state. | |
@return STM state | |
**/ | |
EFI_SM_MONITOR_STATE | |
EFIAPI | |
GetMonitorState ( | |
VOID | |
); | |
/** | |
Load STM image to MSEG. | |
@param StmImage STM image | |
@param StmImageSize STM image size | |
@retval EFI_SUCCESS Load STM to MSEG successfully | |
@retval EFI_BUFFER_TOO_SMALL MSEG is smaller than minimal requirement of STM image | |
**/ | |
EFI_STATUS | |
EFIAPI | |
LoadMonitor ( | |
IN EFI_PHYSICAL_ADDRESS StmImage, | |
IN UINTN StmImageSize | |
); | |
/** | |
Add resources in list to database. Allocate new memory areas as needed. | |
@param ResourceList A pointer to resource list to be added | |
@param NumEntries Optional number of entries. | |
If 0, list must be terminated by END_OF_RESOURCES. | |
@retval EFI_SUCCESS If resources are added | |
@retval EFI_INVALID_PARAMETER If nested procedure detected resource failer | |
@retval EFI_OUT_OF_RESOURCES If nested procedure returned it and we cannot allocate more areas. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
AddPiResource ( | |
IN STM_RSC *ResourceList, | |
IN UINT32 NumEntries OPTIONAL | |
); | |
/** | |
Delete resources in list to database. | |
@param ResourceList A pointer to resource list to be deleted | |
NULL means delete all resources. | |
@param NumEntries Optional number of entries. | |
If 0, list must be terminated by END_OF_RESOURCES. | |
@retval EFI_SUCCESS If resources are deleted | |
@retval EFI_INVALID_PARAMETER If nested procedure detected resource failer | |
**/ | |
EFI_STATUS | |
EFIAPI | |
DeletePiResource ( | |
IN STM_RSC *ResourceList, | |
IN UINT32 NumEntries OPTIONAL | |
); | |
/** | |
Get BIOS resources. | |
@param ResourceList A pointer to resource list to be filled | |
@param ResourceSize On input it means size of resource list input. | |
On output it means size of resource list filled, | |
or the size of resource list to be filled if size of too small. | |
@retval EFI_SUCCESS If resources are returned. | |
@retval EFI_BUFFER_TOO_SMALL If resource list buffer is too small to hold the whole resources. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
GetPiResource ( | |
OUT STM_RSC *ResourceList, | |
IN OUT UINT32 *ResourceSize | |
); | |
/** | |
This function initialize STM configuration table. | |
**/ | |
VOID | |
StmSmmConfigurationTableInit ( | |
VOID | |
); | |
/** | |
This function notify STM resource change. | |
@param StmResource BIOS STM resource | |
**/ | |
VOID | |
NotifyStmResourceChange ( | |
IN VOID *StmResource | |
); | |
/** | |
This function return BIOS STM resource. | |
@return BIOS STM resource | |
**/ | |
VOID * | |
GetStmResource ( | |
VOID | |
); | |
/** | |
This function fixes up the address of the global variable or function | |
referred in SmiEntry assembly files to be the absolute address. | |
**/ | |
VOID | |
EFIAPI | |
SmmCpuFeaturesLibStmSmiEntryFixupAddress ( | |
); | |
#endif |