/** @file
CpuIo2Smm.h -- Header for CpuIo2Smm
Copyright (c) HR650X BIOS Decompilation Project
**/
#ifndef __CPUIO2SMM_H__
#define __CPUIO2SMM_H__
#include "../uefi_headers/Uefi.h"
//
// Function Prototypes
//
EFI_STATUS
EFIAPI
SmmSetJump(
VOID
);
EFI_STATUS
EFIAPI
SmmLongJump(
VOID
);
EFI_STATUS
EFIAPI
CpuIo2SmmValidateJumpBuffer(
VOID
);
EFI_STATUS
EFIAPI
CpuIo2SmmInitServices(
VOID
);
EFI_STATUS
EFIAPI
CpuIo2SmmCheckParameter(
VOID
);
EFI_STATUS
EFIAPI
CpuIo2SmmMemRead(
VOID
);
EFI_STATUS
EFIAPI
CpuIo2SmmMemWrite(
VOID
);
EFI_STATUS
EFIAPI
CpuIo2SmmIoRead(
VOID
);
EFI_STATUS
EFIAPI
CpuIo2SmmIoWrite(
VOID
);
EFI_STATUS
EFIAPI
CpuIo2SmmInstallProtocol(
VOID
);
EFI_STATUS
EFIAPI
CpuIo2SmmDebugVPrint(
VOID
);
EFI_STATUS
EFIAPI
CpuIo2SmmDebugAssert(
VOID
);
EFI_STATUS
EFIAPI
CpuIo2SmmDriverEntryPoint(
VOID
);
EFI_STATUS
EFIAPI
per width index: mSmmIoStride[Width] = { 1, 2, 4, 8 }(
VOID
);
EFI_STATUS
EFIAPI
at 0xE18.(
VOID
);
EFI_STATUS
EFIAPI
UINT8 mSmmIoStride[] = { 1, 2, 4, 8 };(
VOID
);
EFI_STATUS
EFIAPI
initialized by CpuIo2SmmInitServices(
VOID
);
EFI_STATUS
EFIAPI
gImageHandle = NULL; // 0x13E8(
VOID
);
EFI_STATUS
EFIAPI
EFI_BOOT_SERVICES *gBS = NULL; // 0x13E0(
VOID
);
EFI_STATUS
EFIAPI
VOID *gSmst = NULL; // 0x13F8 (SMM System Table 2)(
VOID
);
EFI_STATUS
EFIAPI
(DebugLib protocol)(
VOID
);
EFI_STATUS
EFIAPI
buffer for SmmBase2->GetSmstLocation communication(
VOID
);
EFI_STATUS
EFIAPI
at 0x1410.(
VOID
);
EFI_STATUS
EFIAPI
gJumpBuffer;(
VOID
);
EFI_STATUS
EFIAPI
function table template at 0x13B0.(
VOID
);
EFI_STATUS
EFIAPI
bytes: 4 x 8-byte function pointers:(
VOID
);
EFI_STATUS
EFIAPI
gCpuIoTemplate = {(
VOID
);
EFI_STATUS
EFIAPI
CpuIo2SmmMemRead, // .Read(
VOID
);
EFI_STATUS
EFIAPI
CpuIo2SmmIoRead, // .Read(
VOID
);
EFI_STATUS
EFIAPI
handle (initialized to NULL before installation)(
VOID
);
EFI_STATUS
EFIAPI
at 0x13D0.(
VOID
);
EFI_STATUS
EFIAPI
mCpuIo2Handle = NULL;(
VOID
);
EFI_STATUS
EFIAPI
status - starts as EFI_UNSUPPORTED (0x8000000000000001)(
VOID
);
EFI_STATUS
EFIAPI
at 0x1508. Updated with result from protocol installation.(
VOID
);
EFI_STATUS
EFIAPI
gStatus = EFI_UNSUPPORTED;(
VOID
);
EFI_STATUS
EFIAPI
Helpers (library bindings)(
VOID
);
EFI_STATUS
EFIAPI
(0x2C0) - aligned copy with overlap handling(
VOID
);
EFI_STATUS
EFIAPI
VOID *(
VOID
);
EFI_STATUS
EFIAPI
(0x310) - save execution context(
VOID
);
EFI_STATUS
EFIAPI
UINTN(
VOID
);
EFI_STATUS
EFIAPI
(0x3B0) - restore execution context(
VOID
);
EFI_STATUS
EFIAPI
VOID(
VOID
);
EFI_STATUS
EFIAPI
(0xCE8)(
VOID
);
EFI_STATUS
EFIAPI
alignment of JumpBuffer for SetJump.(
VOID
);
EFI_STATUS
EFIAPI
(0x524)(
VOID
);
EFI_STATUS
EFIAPI
function that initializes gBS, gRT, gSmst from SystemTable.(
VOID
);
EFI_STATUS
EFIAPI
once during module entry.(
VOID
);
EFI_STATUS
EFIAPI
locates EFI_SMM_BASE2_PROTOCOL (F4CCBFB7-F6E0-47FD-9DD4-10A8F150C191)(
VOID
);
EFI_STATUS
EFIAPI
retrieves the SMM System Table 2 via GetSmstLocation.(
VOID
);
EFI_STATUS
EFIAPI
EFI_SMM_BASE2_PROTOCOL(
VOID
);
EFI_STATUS
EFIAPI
= NULL;(
VOID
);
EFI_STATUS
EFIAPI
gSmst via SmmBase2->GetSmstLocation()(
VOID
);
EFI_STATUS
EFIAPI
SetJump/LongJump for context switching inside SMM(
VOID
);
EFI_STATUS
EFIAPI
(&gJumpBuffer);(
VOID
);
EFI_STATUS
EFIAPI
(0x664)(
VOID
);
EFI_STATUS
EFIAPI
I/O parameters for all four protocol interface functions.(
VOID
);
EFI_STATUS
EFIAPI
- parameters are valid(
VOID
);
EFI_STATUS
EFIAPI
- invalid width, alignment, or out of range(
VOID
);
EFI_STATUS
EFIAPI
validation: Buffer must not be NULL, Width must be valid(
VOID
);
EFI_STATUS
EFIAPI
QWord I/O (Width=3) is not supported for port I/O.(
VOID
);
EFI_STATUS
EFIAPI
((Buffer == NULL) || (Width > SmmIoWidthUint64) ||(
VOID
);
EFI_STATUS
EFIAPI
address:(
VOID
);
EFI_STATUS
EFIAPI
(MmioOperation) {(
VOID
);
EFI_STATUS
EFIAPI
Count > 0, ensure the access range does not exceed MaxAddress.(
VOID
);
EFI_STATUS
EFIAPI
is mSmmIoStride[Width]: 1, 2, 4, or 8 bytes.(
VOID
);
EFI_STATUS
EFIAPI
(Count > 0) {(
VOID
);
EFI_STATUS
EFIAPI
start address is within bounds(
VOID
);
EFI_STATUS
EFIAPI
(Address > MaxAddress) {(
VOID
);
EFI_STATUS
EFIAPI
((Address & (mSmmIoStride[Width] - 1)) != 0) {(
VOID
);
EFI_STATUS
EFIAPI
Interface Functions(
VOID
);
EFI_STATUS
EFIAPI
(0x76C)(
VOID
);
EFI_STATUS
EFIAPI
read via direct memory pointer dereference.(
VOID
);
EFI_STATUS
EFIAPI
Count elements of Width from Address into Buffer.(
VOID
);
EFI_STATUS
EFIAPI
EFIAPI(
VOID
);
EFI_STATUS
EFIAPI
(0x850)(
VOID
);
EFI_STATUS
EFIAPI
write via direct memory pointer dereference.(
VOID
);
EFI_STATUS
EFIAPI
Count elements of Width from Buffer into Address.(
VOID
);
EFI_STATUS
EFIAPI
(0x934)(
VOID
);
EFI_STATUS
EFIAPI
Count elements of Width from I/O Port Address into Buffer.(
VOID
);
EFI_STATUS
EFIAPI
I/O port access is not supported by x86 ISA(
VOID
);
EFI_STATUS
EFIAPI
(0xA10)(
VOID
);
EFI_STATUS
EFIAPI
Count elements of Width from Buffer to I/O Port Address.(
VOID
);
EFI_STATUS
EFIAPI
(0xAF0)(
VOID
);
EFI_STATUS
EFIAPI
EFI_SMM_CPU_IO2_PROTOCOL via gSmst->SmmInstallProtocolInterface.(
VOID
);
EFI_STATUS
EFIAPI
copies the function table to SmmIoMemAbstraction area of Smst.(
VOID
);
EFI_STATUS
EFIAPI
protocol function table to Smst+0x30(
VOID
);
EFI_STATUS
EFIAPI
((
VOID
);
EFI_STATUS
EFIAPI
protocol into SMM protocol database(
VOID
);
EFI_STATUS
EFIAPI
= Smst->SmmInstallProtocolInterface ((
VOID
);
EFI_STATUS
EFIAPI
Protocol Support(
VOID
);
EFI_STATUS
EFIAPI
GUID at 0x1390 (441FFA18-8714-421E-8C95-587080796FEE) is used to(
VOID
);
EFI_STATUS
EFIAPI
a debug print protocol via gSmst->SmmLocateProtocol.(
VOID
);
EFI_STATUS
EFIAPI
(0xBD0)(
VOID
);
EFI_STATUS
EFIAPI
(0xC20)(
VOID
);
EFI_STATUS
EFIAPI
print using the located debug protocol.(
VOID
);
EFI_STATUS
EFIAPI
debug level from CMOS register 0x4C(
VOID
);
EFI_STATUS
EFIAPI
= IoRead8 (0x70) & 0x80 | 0x4C;(
VOID
);
EFI_STATUS
EFIAPI
debug print level from CMOS byte(
VOID
);
EFI_STATUS
EFIAPI
= 0;(
VOID
);
EFI_STATUS
EFIAPI
(0xCA8)(
VOID
);
EFI_STATUS
EFIAPI
assert call. Invokes the debug protocol's assert handler.(
VOID
);
EFI_STATUS
EFIAPI
(0x484)(
VOID
);
EFI_STATUS
EFIAPI
1: Initialize global service table pointers(
VOID
);
EFI_STATUS
EFIAPI
= CpuIo2SmmInitServices (ImageHandle, SystemTable);(
VOID
);
EFI_STATUS
EFIAPI
2: Install EFI_SMM_CPU_IO2_PROTOCOL(
VOID
);
EFI_STATUS
EFIAPI
(!EFI_ERROR (Status)) {(
VOID
);
EFI_STATUS
EFIAPI
jump buffer at gJumpBuffer (0x1410) is used by AutoGen.(
VOID
);
EFI_STATUS
EFIAPI
install error if init was OK but install failed(
VOID
);
EFI_STATUS
EFIAPI
= Status;(
VOID
);
#endif /* __CPUIO2SMM_H__ */