/** @file
CsmDxe.h -- Header for CsmDxe
Copyright (c) HR650X BIOS Decompilation Project
**/
#ifndef __CSMDXE_H__
#define __CSMDXE_H__
#include "../uefi_headers/Uefi.h"
//
// Function Prototypes
//
EFI_STATUS
EFIAPI
CsmDxeConstructor(
VOID
);
EFI_STATUS
EFIAPI
CsmDxeDriverEntryPoint(
VOID
);
EFI_STATUS
EFIAPI
CsmDxeUnload(
VOID
);
EFI_STATUS
EFIAPI
_mm_pause_w(
VOID
);
EFI_STATUS
EFIAPI
__rdtsc_w(
VOID
);
EFI_STATUS
EFIAPI
_enable_w(
VOID
);
EFI_STATUS
EFIAPI
_disable_w(
VOID
);
EFI_STATUS
EFIAPI
__getcallerseflags_w(
VOID
);
EFI_STATUS
EFIAPI
CsmThunk16Entry(
VOID
);
EFI_STATUS
EFIAPI
ModuleEntryPoint(
VOID
);
EFI_STATUS
EFIAPI
CsmLegacyBiosInstallProtocol(
VOID
);
EFI_STATUS
EFIAPI
CsmRegisterBootEventCallbacks(
VOID
);
EFI_STATUS
EFIAPI
CsmLocateAmiBoardInfo2(
VOID
);
EFI_STATUS
EFIAPI
CsmAllConnectedCallback(
VOID
);
EFI_STATUS
EFIAPI
CsmInstallProtocolNotifications(
VOID
);
EFI_STATUS
EFIAPI
CsmShadowAllLegacyOproms(
VOID
);
EFI_STATUS
EFIAPI
CsmInitializePciPlatform(
VOID
);
EFI_STATUS
EFIAPI
CsmInitializeLegacyBios(
VOID
);
EFI_STATUS
EFIAPI
CsmLegacyBiosGetBbsInfo(
VOID
);
EFI_STATUS
EFIAPI
CsmLegacyBiosSetBdaComPort(
VOID
);
EFI_STATUS
EFIAPI
CsmLegacyBiosBoot(
VOID
);
EFI_STATUS
EFIAPI
CsmLegacyBiosBootUnconventionalDevice(
VOID
);
EFI_STATUS
EFIAPI
CsmLegacyBiosUpdateKeyboardLedStatus(
VOID
);
EFI_STATUS
EFIAPI
CsmLegacyBiosPrepareToBootEfi(
VOID
);
EFI_STATUS
EFIAPI
CsmLegacyBiosShadowAllLegacyOproms(
VOID
);
EFI_STATUS
EFIAPI
CsmLegacyBiosInstall(
VOID
);
EFI_STATUS
EFIAPI
CsmLegacyBiosUninstall(
VOID
);
EFI_STATUS
EFIAPI
CsmLegacyBiosSetBdaBase(
VOID
);
EFI_STATUS
EFIAPI
CsmLegacyBiosGetBbsInfo_GetCount(
VOID
);
EFI_STATUS
EFIAPI
CsmSaveBootScriptToLockBox(
VOID
);
EFI_STATUS
EFIAPI
CsmDebugPrint(
VOID
);
EFI_STATUS
EFIAPI
CsmAssert(
VOID
);
EFI_STATUS
EFIAPI
nullsub_1(
VOID
);
EFI_STATUS
EFIAPI
functions are library-internal wrappers linked from:(
VOID
);
EFI_STATUS
EFIAPI
= DebugPrint (EfiDLevel, Format, ...)(
VOID
);
EFI_STATUS
EFIAPI
= Assert (FileName, Line, Expression)(
VOID
);
EFI_STATUS
EFIAPI
= LibPcdGetPtr (or LibPcdGetSize)(
VOID
);
EFI_STATUS
EFIAPI
= DxeServicesTableLib constructor(
VOID
);
EFI_STATUS
EFIAPI
= ReadTimeStampCounter (via __rdtsc)(
VOID
);
EFI_STATUS
EFIAPI
= MmPciBaseLib constructor(
VOID
);
EFI_STATUS
EFIAPI
= PcdGetPtr (by token number)(
VOID
);
EFI_STATUS
EFIAPI
= DebugClearMemory / gBS->SetMem(
VOID
);
EFI_STATUS
EFIAPI
= MmioWrite32 (or similar)(
VOID
);
EFI_STATUS
EFIAPI
= PcieSegBusTableInit(
VOID
);
EFI_STATUS
EFIAPI
= gBS->InstallMultipleProtocolInterfaces(
VOID
);
EFI_STATUS
EFIAPI
= DriverBinding / handle protocol uninstalls(
VOID
);
EFI_STATUS
EFIAPI
= gBS->LocateProtocol for AMI_BOARD_INFO2_PROTOCOL(
VOID
);
EFI_STATUS
EFIAPI
= gBS->LocateHandleBuffer(
VOID
);
EFI_STATUS
EFIAPI
not shown - thunk to 16-bit code(
VOID
);
EFI_STATUS
EFIAPI
is the "library constructor" pattern. The original source is(
VOID
);
EFI_STATUS
EFIAPI
real work of the driver happens in CsmDxeDriverEntryPoint.(
VOID
);
EFI_STATUS
EFIAPI
UEFI BootServicesTableLib constructor(
VOID
);
EFI_STATUS
EFIAPI
= (EFI_HANDLE)qword_10BE0;(
VOID
);
EFI_STATUS
EFIAPI
constructor(
VOID
);
EFI_STATUS
EFIAPI
= DxeServicesTableLibConstructor (&ProtocolGuid, &gDS);(
VOID
);
EFI_STATUS
EFIAPI
constructor - initialize PCI USRA protocol(
VOID
);
EFI_STATUS
EFIAPI
(mPciUsra == NULL) {(
VOID
);
EFI_STATUS
EFIAPI
the MMIO PCI Base library(
VOID
);
EFI_STATUS
EFIAPI
();(
VOID
);
EFI_STATUS
EFIAPI
PCD value and enable VGA legacy decoding if needed(
VOID
);
EFI_STATUS
EFIAPI
= LibPcdGetPtr (Token5);(
VOID
);
EFI_STATUS
EFIAPI
caller EFLAGS for interrupt state (IF bit = bit 9)(
VOID
);
EFI_STATUS
EFIAPI
__getcallerseflags() intrinsic(
VOID
);
EFI_STATUS
EFIAPI
= (UINT16)__getcallerseflags_w ();(
VOID
);
EFI_STATUS
EFIAPI
= __rdtsc_w () & 0xFFFFFF;(
VOID
);
EFI_STATUS
EFIAPI
interrupt state(
VOID
);
EFI_STATUS
EFIAPI
(InterruptsEnabled) {(
VOID
);
EFI_STATUS
EFIAPI
PCIe Segment Bus Table(
VOID
);
EFI_STATUS
EFIAPI
= LibPcdGetSize (Token7);(
VOID
);
EFI_STATUS
EFIAPI
protocol interfaces via AutoGen(
VOID
);
EFI_STATUS
EFIAPI
= gBS->InstallMultipleProtocolInterfaces ((
VOID
);
EFI_STATUS
EFIAPI
to our EFI system table and boot/runtime services(
VOID
);
EFI_STATUS
EFIAPI
(gST == NULL) {(
VOID
);
EFI_STATUS
EFIAPI
protocol notify for EfiLegacyInterruptProtocol(
VOID
);
EFI_STATUS
EFIAPI
SecureBoot variable(
VOID
);
EFI_STATUS
EFIAPI
= '\0';(
VOID
);
EFI_STATUS
EFIAPI
SecureBoot is enabled, clear the CSM "Setup" variable(
VOID
);
EFI_STATUS
EFIAPI
= CSM16_CONFIG_SIZE;(
VOID
);
EFI_STATUS
EFIAPI
the CSM "Setup" variable to determine whether CSM should be enabled(
VOID
);
EFI_STATUS
EFIAPI
derived from byte_11DA2(
VOID
);
EFI_STATUS
EFIAPI
the Legacy BIOS protocol interface(
VOID
);
EFI_STATUS
EFIAPI
= CsmLegacyBiosInstallProtocol (ImageHandle);(
VOID
);
EFI_STATUS
EFIAPI
boot event callbacks(
VOID
);
EFI_STATUS
EFIAPI
= CsmRegisterBootEventCallbacks ();(
VOID
);
EFI_STATUS
EFIAPI
AMI_BOARD_INFO2_PROTOCOL(
VOID
);
EFI_STATUS
EFIAPI
(mBoardInfo2 == NULL) {(
VOID
);
EFI_STATUS
EFIAPI
the main CSM context (6328 bytes)(
VOID
);
EFI_STATUS
EFIAPI
= gBS->AllocatePool ((
VOID
);
EFI_STATUS
EFIAPI
required protocols for the context(
VOID
);
EFI_STATUS
EFIAPI
= gBS->LocateProtocol ((
VOID
);
EFI_STATUS
EFIAPI
the Legacy BIOS function table(
VOID
);
EFI_STATUS
EFIAPI
MaxOpRomAddress (must be 0xC0000-0xF0000)(
VOID
);
EFI_STATUS
EFIAPI
= (*CsmCtx->PciIoProtocol->AllocateBuffer) ((
VOID
);
EFI_STATUS
EFIAPI
PCI platform interface(
VOID
);
EFI_STATUS
EFIAPI
= CsmInitializePciPlatform ();(
VOID
);
EFI_STATUS
EFIAPI
current video mode(
VOID
);
EFI_STATUS
EFIAPI
= (*CsmCtx->SmmLegacyBootProtocol->GetCurrentMode) ((
VOID
);
EFI_STATUS
EFIAPI
VGA mode to text mode 80x25(
VOID
);
EFI_STATUS
EFIAPI
= (UINT16)-1;(
VOID
);
EFI_STATUS
EFIAPI
CSM mode from Setup variable(
VOID
);
EFI_STATUS
EFIAPI
offset(
VOID
);
EFI_STATUS
EFIAPI
the Legacy BIOS driver(
VOID
);
EFI_STATUS
EFIAPI
= CsmInitializeLegacyBios (Csm16Mode, SystemTable);(
VOID
);
EFI_STATUS
EFIAPI
VGA mode again after CSM16 init(
VOID
);
EFI_STATUS
EFIAPI
= (*CsmCtx->SmmLegacyBootProtocol->SetMode) ((
VOID
);
EFI_STATUS
EFIAPI
the PCI enumeration data(
VOID
);
EFI_STATUS
EFIAPI
= (*CsmCtx->PciIoProtocol->GetLocation) ((
VOID
);
EFI_STATUS
EFIAPI
the base OpROM address (0xC0000)(
VOID
);
EFI_STATUS
EFIAPI
= 0xC0000;(
VOID
);
EFI_STATUS
EFIAPI
PCI data table (1312 bytes)(
VOID
);
EFI_STATUS
EFIAPI
for internal data structure(
VOID
);
EFI_STATUS
EFIAPI
BBS table (1728 bytes)(
VOID
);
EFI_STATUS
EFIAPI
to BBS data start(
VOID
);
EFI_STATUS
EFIAPI
event notification for Legacy BIOS protocol(
VOID
);
EFI_STATUS
EFIAPI
= (UINT64)CsmCtx;(
VOID
);
EFI_STATUS
EFIAPI
notification for AllConnected (via EfiBootScriptNotify)(
VOID
);
EFI_STATUS
EFIAPI
= gBS->CreateEvent ((
VOID
);
EFI_STATUS
EFIAPI
protocol notification(
VOID
);
EFI_STATUS
EFIAPI
= gBS->InstallProtocolInterface ((
VOID
);
EFI_STATUS
EFIAPI
CSM internal protocol notifications(
VOID
);
EFI_STATUS
EFIAPI
ShadowAll callback(
VOID
);
EFI_STATUS
EFIAPI
= gBS->RegisterProtocolNotify ((
VOID
);
EFI_STATUS
EFIAPI
up callback function pointers(
VOID
);
EFI_STATUS
EFIAPI
BoardInfo2 data(
VOID
);
EFI_STATUS
EFIAPI
(((AMI_BOARD_INFO2_PROTOCOL *)Interface)->DataValid);(
VOID
);
EFI_STATUS
EFIAPI
the "AllConnected" event(
VOID
);
EFI_STATUS
EFIAPI
EFI_SUCCESS;(
VOID
);
EFI_STATUS
EFIAPI
each legacy Option ROM(
VOID
);
EFI_STATUS
EFIAPI
Option ROM images to 0xC0000-0xF0000 region](
VOID
);
EFI_STATUS
EFIAPI
PCI device data and Option ROM shadow region(
VOID
);
EFI_STATUS
EFIAPI
= NULL;(
VOID
);
EFI_STATUS
EFIAPI
PCI platform configuration(
VOID
);
EFI_STATUS
EFIAPI
Status;(
VOID
);
EFI_STATUS
EFIAPI
and initialize the Legacy BIOS interface(
VOID
);
EFI_STATUS
EFIAPI
Legacy BIOS protocol(
VOID
);
EFI_STATUS
EFIAPI
BBS table(
VOID
);
EFI_STATUS
EFIAPI
legacy boot event handler(
VOID
);
EFI_STATUS
EFIAPI
the INT19 trap handler (for legacy boot)(
VOID
);
EFI_STATUS
EFIAPI
entry initialization(
VOID
);
EFI_STATUS
EFIAPI
= CsmThunk16Entry (Csm16Mode, 0, 0, 0, 0);(
VOID
);
EFI_STATUS
EFIAPI
from Csm16 BBS table(
VOID
);
EFI_STATUS
EFIAPI
COM port address to BIOS Data Area (BDA)(
VOID
);
EFI_STATUS
EFIAPI
at 0x400: COM port table at 0x400+0x00, LPT at 0x400+0x08(
VOID
);
EFI_STATUS
EFIAPI
BBS table for boot device(
VOID
);
EFI_STATUS
EFIAPI
INT 19h via CSM16 thunk(
VOID
);
EFI_STATUS
EFIAPI
= CsmThunk16Entry ((
VOID
);
EFI_STATUS
EFIAPI
boot from unconventional devices (USB, network, etc.)(
VOID
);
EFI_STATUS
EFIAPI
each boot device type(
VOID
);
EFI_STATUS
EFIAPI
keyboard LED status in BDA(
VOID
);
EFI_STATUS
EFIAPI
offset 0x417 bit 5-3: keyboard LED flags(
VOID
);
EFI_STATUS
EFIAPI
to boot EFI: save legacy state, restore EFI state(
VOID
);
EFI_STATUS
EFIAPI
all discovered legacy Option ROMs(
VOID
);
EFI_STATUS
EFIAPI
algorithm:(
VOID
);
EFI_STATUS
EFIAPI
CLP (Configuration Load Protocol) support if needed(
VOID
);
EFI_STATUS
EFIAPI
loop(
VOID
);
EFI_STATUS
EFIAPI
(OpRomIndex = *NumberOfOpRoms; OpRomIndex < *TotalSize; OpRomIndex++) {(
VOID
);
EFI_STATUS
EFIAPI
each ROM(
VOID
);
EFI_STATUS
EFIAPI
Legacy BIOS protocol interfaces(
VOID
);
EFI_STATUS
EFIAPI
base memory size in BDA at 0x413(
VOID
);
EFI_STATUS
EFIAPI
BBS count and table from CSM context(
VOID
);
EFI_STATUS
EFIAPI
memory map data to lockbox(
VOID
);
EFI_STATUS
EFIAPI
= gBS->GetMemoryMap ((
VOID
);
EFI_STATUS
EFIAPI
code calls a specific DebugPrint implementation(
VOID
);
EFI_STATUS
EFIAPI
writes to the serial port / console(
VOID
);
EFI_STATUS
EFIAPI
(Level, Format, VaList);(
VOID
);
EFI_STATUS
EFIAPI
code calls ASSERT via DebugLib(
VOID
);
EFI_STATUS
EFIAPI
(Description);(
VOID
);
EFI_STATUS
EFIAPI
driver registers a ComponentName2 protocol at gCsmComponentName2.(
VOID
);
EFI_STATUS
EFIAPI
structures are generated by the UEFI driver framework.(
VOID
);
#endif /* __CSMDXE_H__ */