Newer
Older
AMI-Aptio-BIOS-Reversed / UefiCpuPkg / CpuArchDxe / CpuArchDxe.h
@Ajax Dong Ajax Dong 2 days ago 12 KB Full restructure
/** @file
  CpuArchDxe.h -- Header for CpuArchDxe

Copyright (c) HR650X BIOS Decompilation Project
**/

#ifndef __CPUARCHDXE_H__
#define __CPUARCHDXE_H__

#include "../uefi_headers/Uefi.h"

//
// Function Prototypes
//

EFI_STATUS
EFIAPI
Cpuid(
  VOID
);

EFI_STATUS
EFIAPI
ReadTsc(
  VOID
);

EFI_STATUS
EFIAPI
EnableInterrupts(
  VOID
);

EFI_STATUS
EFIAPI
DisableInterrupts(
  VOID
);

EFI_STATUS
EFIAPI
GetRflags(
  VOID
);

EFI_STATUS
EFIAPI
CpuHlt(
  VOID
);

EFI_STATUS
EFIAPI
CpuPause(
  VOID
);

EFI_STATUS
EFIAPI
ReadStr(
  VOID
);

EFI_STATUS
EFIAPI
ReadSldt(
  VOID
);

EFI_STATUS
EFIAPI
ReadIdtr(
  VOID
);

EFI_STATUS
EFIAPI
WriteIdtr(
  VOID
);

EFI_STATUS
EFIAPI
ReadGdtr(
  VOID
);

EFI_STATUS
EFIAPI
ReadMsr(
  VOID
);

EFI_STATUS
EFIAPI
WriteMsr(
  VOID
);

EFI_STATUS
EFIAPI
IoWrite16(
  VOID
);

EFI_STATUS
EFIAPI
IoRead32(
  VOID
);

EFI_STATUS
EFIAPI
BitFieldRead64(
  VOID
);

EFI_STATUS
EFIAPI
RShiftU64(
  VOID
);

EFI_STATUS
EFIAPI
LShiftU64(
  VOID
);

EFI_STATUS
EFIAPI
MultU64x32(
  VOID
);

EFI_STATUS
EFIAPI
DivU64x32(
  VOID
);

EFI_STATUS
EFIAPI
GetPowerOfTwo64(
  VOID
);

EFI_STATUS
EFIAPI
DivU64x64Remainder(
  VOID
);

EFI_STATUS
EFIAPI
BitFieldRead32(
  VOID
);

EFI_STATUS
EFIAPI
BitFieldOr64(
  VOID
);

EFI_STATUS
EFIAPI
InitializeFpuSse(
  VOID
);

EFI_STATUS
EFIAPI
DebugEnabled(
  VOID
);

EFI_STATUS
EFIAPI
AssertEnabled(
  VOID
);

EFI_STATUS
EFIAPI
DebugPrint(
  VOID
);

EFI_STATUS
EFIAPI
DebugAssert(
  VOID
);

EFI_STATUS
EFIAPI
EfiGetSystemConfigurationTable(
  VOID
);

EFI_STATUS
EFIAPI
AllocateZeroedPages(
  VOID
);

EFI_STATUS
EFIAPI
AllocatePool(
  VOID
);

EFI_STATUS
EFIAPI
FreePool(
  VOID
);

EFI_STATUS
EFIAPI
SetMem32(
  VOID
);

EFI_STATUS
EFIAPI
CopyMem(
  VOID
);

EFI_STATUS
EFIAPI
ZeroMem(
  VOID
);

EFI_STATUS
EFIAPI
Stall(
  VOID
);

EFI_STATUS
EFIAPI
GetMaxPhysicalAddress(
  VOID
);

EFI_STATUS
EFIAPI
MtrrSupported(
  VOID
);

EFI_STATUS
EFIAPI
GetVariableMtrrCount(
  VOID
);

EFI_STATUS
EFIAPI
GetEffectiveVariableMtrrCount(
  VOID
);

EFI_STATUS
EFIAPI
GetMtrrDefaultType(
  VOID
);

EFI_STATUS
EFIAPI
ReadAllVariableMtrrs(
  VOID
);

EFI_STATUS
EFIAPI
BuildMtrrDescriptorTable(
  VOID
);

EFI_STATUS
EFIAPI
MtrrGetMemoryAttribute(
  VOID
);

EFI_STATUS
EFIAPI
UefiBootServicesTableLibConstructor(
  VOID
);

EFI_STATUS
EFIAPI
UefiRuntimeServicesTableLibConstructor(
  VOID
);

EFI_STATUS
EFIAPI
DxeServicesTableLibConstructor(
  VOID
);

EFI_STATUS
EFIAPI
CpuArchDxeMain(
  VOID
);

EFI_STATUS
EFIAPI
DriverMainInit(
  VOID
);

EFI_STATUS
EFIAPI
ModuleEntryPoint(
  VOID
);

EFI_STATUS
EFIAPI
ProgramCpuFeatures(
  VOID
);

EFI_STATUS
EFIAPI
CacheTypeToMemoryAttribute(
  VOID
);

EFI_STATUS
EFIAPI
FindMemorySpaceMapEntry(
  VOID
);

EFI_STATUS
EFIAPI
SetMemorySpaceAttributesCpuArch(
  VOID
);

EFI_STATUS
EFIAPI
ProgramMemoryAttributes(
  VOID
);

EFI_STATUS
EFIAPI
InitExceptionHandlers(
  VOID
);

EFI_STATUS
EFIAPI
SetIdtEntry(
  VOID
);

EFI_STATUS
EFIAPI
GetExceptionTemplateInfo(
  VOID
);

EFI_STATUS
EFIAPI
SetupIdtTable(
  VOID
);

EFI_STATUS
EFIAPI
InitializeExternalInterruptHandlerTable(
  VOID
);

EFI_STATUS
EFIAPI
AcquireSpinLock(
  VOID
);

EFI_STATUS
EFIAPI
TryAcquireSpinLock(
  VOID
);

EFI_STATUS
EFIAPI
ReleaseSpinLock(
  VOID
);

EFI_STATUS
EFIAPI
MtrrSyncInit(
  VOID
);

EFI_STATUS
EFIAPI
RegisterMtrrNotify(
  VOID
);

EFI_STATUS
EFIAPI
GetPcdProtocol(
  VOID
);

EFI_STATUS
EFIAPI
DxeHobLibConstructor(
  VOID
);

EFI_STATUS
EFIAPI
GetPciExpressBase(
  VOID
);

EFI_STATUS
EFIAPI
PciExpressLibAddress(
  VOID
);

EFI_STATUS
EFIAPI
ResetColdSystem(
  VOID
);

EFI_STATUS
EFIAPI
MtrrReadDefaultType(
  VOID
);

EFI_STATUS
EFIAPI
WriteBackInvalidateCache(
  VOID
);

EFI_STATUS
EFIAPI
IsX2Apic(
  VOID
);

EFI_STATUS
EFIAPI
GetApicBase(
  VOID
);

EFI_STATUS
EFIAPI
ReadLocalApicReg(
  VOID
);

EFI_STATUS
EFIAPI
WriteLocalApicReg(
  VOID
);

EFI_STATUS
EFIAPI
GetApicMode(
  VOID
);

EFI_STATUS
EFIAPI
GetApicId(
  VOID
);

EFI_STATUS
EFIAPI
-- The EFI image handle for this driver.(
  VOID
);

/// Pointer to EFI System Table.
EFI_STATUS
EFIAPI
/// gST(
  VOID
);

/// Pointer to EFI Boot Services Table.
EFI_STATUS
EFIAPI
/// gBS(
  VOID
);

/// Pointer to EFI Runtime Services Table.
EFI_STATUS
EFIAPI
/// gRT(
  VOID
);

/// Pointer to DXE Services Table (located by GUID in .data).
EFI_STATUS
EFIAPI
/// gDS(
  VOID
);

/// PCD database pointer (located by GUID).
EFI_STATUS
EFIAPI
/// gPcdDb(
  VOID
);

/// HOB list pointer (from DxeHobLib).
EFI_STATUS
EFIAPI
/// gHobList(
  VOID
);

/// PCI Express MMIO base address.
EFI_STATUS
EFIAPI
/// gMmPciBase(
  VOID
);

/// Maximum physical address (page-aligned, CPUID-based).
EFI_STATUS
EFIAPI
/// gPhysicalMax(
  VOID
);

/// Raw maximum physical address.
EFI_STATUS
EFIAPI
/// gPhysicalMaxRaw(
  VOID
);

/// Allocated MTRR sync/state buffer (608 bytes).
EFI_STATUS
EFIAPI
/// gMtrrBuffer(
  VOID
);

/// Non-zero during MTRR sync.
EFI_STATUS
EFIAPI
/// gMtrrSyncLock(
  VOID
);

/// pointer to reserved exception vector table (22528 B).
EFI_STATUS
EFIAPI
/// gReservedVectors(
  VOID
);

/// pointer to external interrupt handler table.
EFI_STATUS
EFIAPI
/// gExternalIntHandler(
  VOID
);

/// difference: total - available variable MTRRs.
EFI_STATUS
EFIAPI
/// gVariableMtrrCountOffset(
  VOID
);

EFI_STATUS
EFIAPI
/*==========================================================================(
  VOID
);

EFI_STATUS
EFIAPI
entry: [Reserved, BaseAddress, StepSize](
  VOID
);

EFI_STATUS
EFIAPI
in sub_1E40 to iterate through fixed MTRR ranges(
  VOID
);

EFI_STATUS
EFIAPI
adjacent ranges with the same memory type.(
  VOID
);

EFI_STATUS
EFIAPI
by sub_61F to determine the correct save slot index.(
  VOID
);

EFI_STATUS
EFIAPI
during InstallMultipleProtocolInterfaces.(
  VOID
);

EFI_STATUS
EFIAPI
// gST->ConfigurationTable is at offset 112(
  VOID
);

EFI_STATUS
EFIAPI
= 10 = EfiBootServicesData(
  VOID
);

EFI_STATUS
EFIAPI
40 in gBS vtable = AllocatePages(
  VOID
);

EFI_STATUS
EFIAPI
0x80000000 to check max extended leaf(
  VOID
);

EFI_STATUS
EFIAPI
CPUID.01H:EDX[12] = MTRR support(
  VOID
);

EFI_STATUS
EFIAPI
// Check VCNT (bits 7:0) != 0(
  VOID
);

EFI_STATUS
EFIAPI
FIXED (bit 8) == 1(
  VOID
);

EFI_STATUS
EFIAPI
from pre-saved buffer (offset 80 + 2*i elements each)(
  VOID
);

EFI_STATUS
EFIAPI
Mask = ReadMsr (0x201 + 2 * i);       // IA32_MTRR_PHYSMASKi(
  VOID
);

EFI_STATUS
EFIAPI
MTRR_PHYS_MASK bit 11 (valid)(
  VOID
);

EFI_STATUS
EFIAPI
layout (32 bytes each):(
  VOID
);

EFI_STATUS
EFIAPI
0: Reserved (index)(
  VOID
);

EFI_STATUS
EFIAPI
8: BaseAddress = a4 & (mask & base)(
  VOID
);

EFI_STATUS
EFIAPI
16: Length = (a3 & ~(a4 & mask)) + 1(
  VOID
);

EFI_STATUS
EFIAPI
24: MemoryType = bits[7:0] of base(
  VOID
);

EFI_STATUS
EFIAPI
28: Attributes (0x0101 = valid + MSR pair)(
  VOID
);

/// // reads fixed MTRRs for sub-1MB addresses, then checks variable MTRRs
EFI_STATUS
EFIAPI
based on MtrrLib algorithm(
  VOID
);

EFI_STATUS
EFIAPI
addresses >= 1MB, then falls back to default type.(
  VOID
);

EFI_STATUS
EFIAPI
default(
  VOID
);

EFI_STATUS
EFIAPI
table: 11 entries, 12 bytes each =(
  VOID
);

EFI_STATUS
EFIAPI
the 11 fixed MTRR MSRs(
  VOID
);

EFI_STATUS
EFIAPI
MSR address from internal table(
  VOID
);

EFI_STATUS
EFIAPI
variable MTRRs(
  VOID
);

EFI_STATUS
EFIAPI
MTRR default type MSR(
  VOID
);

EFI_STATUS
EFIAPI
ptr at unk_8CC0 -> gDS(
  VOID
);

EFI_STATUS
EFIAPI
global services (sub_55DC equivalent)(
  VOID
);

EFI_STATUS
EFIAPI
done by constructor list(
  VOID
);

EFI_STATUS
EFIAPI
FPU + SSE (sub_410)(
  VOID
);

EFI_STATUS
EFIAPI
exception handlers (sub_12C0 / sub_4A88)(
  VOID
);

EFI_STATUS
EFIAPI
if cache is enabled (sub_243C)(
  VOID
);

EFI_STATUS
EFIAPI
GDT (sub_8EC0)(
  VOID
);

EFI_STATUS
EFIAPI
the OS-visible GDT descriptor(
  VOID
);

EFI_STATUS
EFIAPI
vector info from config table (sub_12C0)(
  VOID
);

EFI_STATUS
EFIAPI
back invalidate cache (sub_2460)(
  VOID
);

EFI_STATUS
EFIAPI
CPU Arch Protocol via gBS->InstallMultipleProtocolInterfaces(
  VOID
);

EFI_STATUS
EFIAPI
call at [BootServices + 128](
  VOID
);

EFI_STATUS
EFIAPI
GCD memory attributes based on current MTRR settings(
  VOID
);

EFI_STATUS
EFIAPI
CPU features (sub_3048)(
  VOID
);

EFI_STATUS
EFIAPI
MTRR sync (sub_1880)(
  VOID
);

EFI_STATUS
EFIAPI
back and invalidate cache(
  VOID
);

EFI_STATUS
EFIAPI
main entry(
  VOID
);

EFI_STATUS
EFIAPI
library constructor list(
  VOID
);

EFI_STATUS
EFIAPI
main entry wrapper (sub_DB0 -> sub_13A0)(
  VOID
);

EFI_STATUS
EFIAPI
failure: process destructors (sub_DA0)(
  VOID
);

/// IA32_DEBUGCTL
EFI_STATUS
EFIAPI
MSR 0x1D0(
  VOID
);

/// IA32_MISC_ENABLE
EFI_STATUS
EFIAPI
MSR 0x3A0(
  VOID
);

EFI_STATUS
EFIAPI
MSR 0x3A1(
  VOID
);

EFI_STATUS
EFIAPI
case 1:  return 2;               // WC(
  VOID
);

EFI_STATUS
EFIAPI
case 5:  return 0x1000;          // WP(
  VOID
);

EFI_STATUS
EFIAPI
}(
  VOID
);

EFI_STATUS
EFIAPI
layout at 56 bytes each:(
  VOID
);

EFI_STATUS
EFIAPI
GCD SetMemorySpaceAttributes from gDS(
  VOID
);

EFI_STATUS
EFIAPI
sync: sub_568C (1, 69639, 0, 0, 0)(
  VOID
);

EFI_STATUS
EFIAPI
max physical address(
  VOID
);

EFI_STATUS
EFIAPI
GCD memory space map via gDS(
  VOID
);

EFI_STATUS
EFIAPI
all MTRRs(
  VOID
);

EFI_STATUS
EFIAPI
GCD entries:(
  VOID
);

EFI_STATUS
EFIAPI
WB type entries (MTRR type 6)(
  VOID
);

EFI_STATUS
EFIAPI
for each WB region(
  VOID
);

EFI_STATUS
EFIAPI
adjacent ranges with same cache type in fixed MTRR region(
  VOID
);

EFI_STATUS
EFIAPI
through fixed MTRR ranges (dword_8D20 table: 11 entries x 3 DWORDs)(
  VOID
);

EFI_STATUS
EFIAPI
each MTRR range within the fixed MTRR(
  VOID
);

EFI_STATUS
EFIAPI
attribute changed, program the previous merged range(
  VOID
);

EFI_STATUS
EFIAPI
the final merged range(
  VOID
);

EFI_STATUS
EFIAPI
256 * 88 = 22528 bytes for reserved vector table(
  VOID
);

EFI_STATUS
EFIAPI
optional VectorInfo list(
  VOID
);

EFI_STATUS
EFIAPI
handler type in exception entry(
  VOID
);

EFI_STATUS
EFIAPI
external interrupt handler table (2048 bytes = 256 * 8)(
  VOID
);

EFI_STATUS
EFIAPI
current IDT limit(
  VOID
);

EFI_STATUS
EFIAPI
IDT table (4096 bytes)(
  VOID
);

EFI_STATUS
EFIAPI
exception stub template info(
  VOID
);

EFI_STATUS
EFIAPI
interrupt entry code(
  VOID
);

EFI_STATUS
EFIAPI
stubs and set vector numbers(
  VOID
);

EFI_STATUS
EFIAPI
globals and install IDT(
  VOID
);

EFI_STATUS
EFIAPI
external interrupt handler table notification(
  VOID
);

EFI_STATUS
EFIAPI
new IDTR(
  VOID
);

EFI_STATUS
EFIAPI
the MOV byte instruction encoding the vector number(
  VOID
);

EFI_STATUS
EFIAPI
stub header size = 16 bytes(
  VOID
);

EFI_STATUS
EFIAPI
handler entry at 0x430 (CommonExceptionHandler)(
  VOID
);

EFI_STATUS
EFIAPI
base (segment selector)(
  VOID
);

EFI_STATUS
EFIAPI
current CS from GDT(
  VOID
);

EFI_STATUS
EFIAPI
stub size(
  VOID
);

EFI_STATUS
EFIAPI
IDT entry:(
  VOID
);

EFI_STATUS
EFIAPI
= EntryCode + i * StubSize(
  VOID
);

EFI_STATUS
EFIAPI
= CodeSegment(
  VOID
);

EFI_STATUS
EFIAPI
= 0x8E (32-bit interrupt gate)(
  VOID
);

EFI_STATUS
EFIAPI
spin lock for exception handler(
  VOID
);

EFI_STATUS
EFIAPI
(Lock, 2, 1) == 1(
  VOID
);

EFI_STATUS
EFIAPI
to exchange from 1 (free) to 2 (acquired)(
  VOID
);

EFI_STATUS
EFIAPI
MTRR sync buffer (608 = 0x260 bytes)(
  VOID
);

EFI_STATUS
EFIAPI
protocol notify (sub_29F8)(
  VOID
);

EFI_STATUS
EFIAPI
GetPtr at offset 32 in vtable(
  VOID
);

EFI_STATUS
EFIAPI
CMOS status register A (0x4B)(
  VOID
);

EFI_STATUS
EFIAPI
CMOS status A with UIP bit set(
  VOID
);

EFI_STATUS
EFIAPI
bit 7 at the CMOS address(
  VOID
);

EFI_STATUS
EFIAPI
current RFLAGS, then disable interrupts(
  VOID
);

EFI_STATUS
EFIAPI
if interrupts were previously enabled(
  VOID
);

EFI_STATUS
EFIAPI
timer tick counter from IO port 0x508 (1288)(
  VOID
);

EFI_STATUS
EFIAPI
TSC for delay loop(
  VOID
);

EFI_STATUS
EFIAPI
for ~357ms timer tick interval(
  VOID
);

EFI_STATUS
EFIAPI
interrupt state(
  VOID
);

/// enable interrupts before WBINVD if needed
EFI_STATUS
EFIAPI
was UC(
  VOID
);

/// MMIO access
EFI_STATUS
EFIAPI
mode(
  VOID
);

EFI_STATUS
EFIAPI
ApicBaseMsr = ReadMsr (0x1B);(
  VOID
);

EFI_STATUS
EFIAPI
bit 11 (EN) is set(
  VOID
);

EFI_STATUS
EFIAPI
bit 10 (EXTD) = x2APIC(
  VOID
);

EFI_STATUS
EFIAPI
mode: CPUID.01H:EBX[31:24](
  VOID
);

EFI_STATUS
EFIAPI
mode: MSR 0x802 (x2APIC ID)(
  VOID
);

#endif /* __CPUARCHDXE_H__ */