Newer
Older
AMI-Aptio-BIOS-Reversed / LenovoServerPkg / GetCpuInfo / GetCpuInfo.h
@Ajax Dong Ajax Dong 2 days ago 7 KB Full restructure
/** @file
  GetCpuInfo.h -- Header for GetCpuInfo

Copyright (c) HR650X BIOS Decompilation Project
**/

#ifndef __GETCPUINFO_H__
#define __GETCPUINFO_H__

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

//
// Function Prototypes
//

EFI_STATUS
EFIAPI
GetCpuInfoEntryPoint(
  VOID
);

EFI_STATUS
EFIAPI
CpuInfoDriverEntry(
  VOID
);

EFI_STATUS
EFIAPI
CpuInfoCollection(
  VOID
);

EFI_STATUS
EFIAPI
CpuInfoDisplayForm(
  VOID
);

EFI_STATUS
EFIAPI
CpuInfoDelayMicro(
  VOID
);

EFI_STATUS
EFIAPI
GetPlatformLanguage(
  VOID
);

EFI_STATUS
EFIAPI
CpuIdEx(
  VOID
);

EFI_STATUS
EFIAPI
AsmReadMsr64(
  VOID
);

EFI_STATUS
EFIAPI
AsmWriteMsr64(
  VOID
);

EFI_STATUS
EFIAPI
CpuInfoReadAll(
  VOID
);

EFI_STATUS
EFIAPI
CpuInfoLocatePcdProtocol(
  VOID
);

EFI_STATUS
EFIAPI
CpuInfoGetProcessorCountFromHob(
  VOID
);

EFI_STATUS
EFIAPI
CpuInfoFreeAllBuffers(
  VOID
);

EFI_STATUS
EFIAPI
HiiFreeOpCodeHandle(
  VOID
);

EFI_STATUS
EFIAPI
VARIABLES  (.data section, 0x3D30 - 0x3DF0)(
  VOID
);

EFI_STATUS
EFIAPI
gImageHandle;                    ///< 0x3D40(
  VOID
);

EFI_STATUS
EFIAPI
DEFINITIONS  (.rdata section)(
  VOID
);

EFI_STATUS
EFIAPI
GUIDs are defined externally in the PE/COFF .rdata section:(
  VOID
);

EFI_STATUS
EFIAPI
= EFI_CPU_ARCH_PROTOCOL_GUID(
  VOID
);

EFI_STATUS
EFIAPI
= gEfiRuntimeServicesTableGuid(
  VOID
);

EFI_STATUS
EFIAPI
= HII package list GUID for VFR(
  VOID
);

EFI_STATUS
EFIAPI
= gEfiPcdProtocolGuid(
  VOID
);

EFI_STATUS
EFIAPI
= PackageListGuid for HII string packages(
  VOID
);

EFI_STATUS
EFIAPI
= gEfiHiiStringProtocolGuid(
  VOID
);

EFI_STATUS
EFIAPI
= gEfiHiiConfigRoutingProtocolGuid(
  VOID
);

EFI_STATUS
EFIAPI
= gEfiHiiPackageListProtocolGuid(
  VOID
);

EFI_STATUS
EFIAPI
= gEfiHiiDatabaseProtocolGuid(
  VOID
);

EFI_STATUS
EFIAPI
= gEfiHobListGuid(
  VOID
);

EFI_STATUS
EFIAPI
= gEfiHiiConfigAccessProtocolGuid(
  VOID
);

EFI_STATUS
EFIAPI
= CPU Info formset GUID(
  VOID
);

EFI_STATUS
EFIAPI
= CPU Info form GUID (VFR binary data)(
  VOID
);

EFI_STATUS
EFIAPI
DECLARATIONS(
  VOID
);

EFI_STATUS
EFIAPI
EFIAPI(
  VOID
);

EFI_STATUS
EFIAPI
/ MSR / I/O HELPERS (inlined wrappers)(
  VOID
);

EFI_STATUS
EFIAPI
ENTRY POINT(
  VOID
);

EFI_STATUS
EFIAPI
the actual driver entry(
  VOID
);

EFI_STATUS
EFIAPI
CpuInfoDriverEntry (ImageHandle, SystemTable);(
  VOID
);

EFI_STATUS
EFIAPI
1: Save UEFI handles(
  VOID
);

EFI_STATUS
EFIAPI
= ImageHandle;(
  VOID
);

EFI_STATUS
EFIAPI
2: Initialize HOB list(
  VOID
);

EFI_STATUS
EFIAPI
();(
  VOID
);

EFI_STATUS
EFIAPI
3: Get PCD for PCI Express base address (lazy init via PCD protocol)(
  VOID
);

EFI_STATUS
EFIAPI
4: Locate HII protocols(
  VOID
);

EFI_STATUS
EFIAPI
= gBS->LocateProtocol (&gEfiHiiDatabaseProtocolGuid, NULL, &gHiiDatabase);(
  VOID
);

EFI_STATUS
EFIAPI
5: Check and enable platform language via PCI config(
  VOID
);

EFI_STATUS
EFIAPI
= 1024068; // Offset 0xF4244 from PciExpressBaseAddress(
  VOID
);

EFI_STATUS
EFIAPI
to IO port to enable(
  VOID
);

EFI_STATUS
EFIAPI
(PcdAddress - 4);  // 0xF4240(
  VOID
);

EFI_STATUS
EFIAPI
6: Read platform type from IO port 0x80(
  VOID
);

EFI_STATUS
EFIAPI
= IoRead32 (IO_PORT_0x80);(
  VOID
);

EFI_STATUS
EFIAPI
7: Wait for IO completion by polling port 0x508(
  VOID
);

EFI_STATUS
EFIAPI
{(
  VOID
);

EFI_STATUS
EFIAPI
delay via IO port read(
  VOID
);

EFI_STATUS
EFIAPI
8: Return based on setup mode(
  VOID
);

EFI_STATUS
EFIAPI
(SetupMode) {(
  VOID
);

EFI_STATUS
EFIAPI
INFORMATION COLLECTION(
  VOID
);

EFI_STATUS
EFIAPI
1: PCD enable check(
  VOID
);

EFI_STATUS
EFIAPI
(!PcdGetBool (PcdCpuInfoDisplayEnable)) {(
  VOID
);

EFI_STATUS
EFIAPI
2: Locate CPU Architecture Protocol(
  VOID
);

EFI_STATUS
EFIAPI
= CpuInfoLocateCpuProtocol ();(
  VOID
);

EFI_STATUS
EFIAPI
3: Get number of processors from HOB(
  VOID
);

EFI_STATUS
EFIAPI
= CpuInfoGetProcessorCountFromHob ();(
  VOID
);

EFI_STATUS
EFIAPI
4: Allocate per-processor string buffers(
  VOID
);

EFI_STATUS
EFIAPI
= AllocateZeroPool (CPU_INFO_STRING_SIZE * ProcessorNumber);(
  VOID
);

EFI_STATUS
EFIAPI
5: Build header string "Total CPU Number: %d\n"(
  VOID
);

EFI_STATUS
EFIAPI
((
  VOID
);

EFI_STATUS
EFIAPI
6: Initialize per-processor label strings(
  VOID
);

EFI_STATUS
EFIAPI
(Index = 0; Index < ProcessorNumber; Index++) {(
  VOID
);

EFI_STATUS
EFIAPI
7: Collect actual CPU data from all processors(
  VOID
);

EFI_STATUS
EFIAPI
8: Register callback for form update(
  VOID
);

EFI_STATUS
EFIAPI
9: Create and display HII form(
  VOID
);

EFI_STATUS
EFIAPI
= CpuInfoRegisterPackageList ((
  VOID
);

EFI_STATUS
EFIAPI
10: Free buffers(
  VOID
);

EFI_STATUS
EFIAPI
width for number formatting(
  VOID
);

EFI_STATUS
EFIAPI
(Buffer, 0, Index, 4);(
  VOID
);

EFI_STATUS
EFIAPI
(CPUID_VERSION_INFO, &Eax, &Ebx, &Ecx, &Edx);(
  VOID
);

EFI_STATUS
EFIAPI
(EAX[3:0])(
  VOID
);

EFI_STATUS
EFIAPI
(EAX full, printed as hex)(
  VOID
);

EFI_STATUS
EFIAPI
= AsmReadMsr64 (MSR_IA32_PLATFORM_ID);(
  VOID
);

EFI_STATUS
EFIAPI
read MSR 0x8B[63:32].(
  VOID
);

EFI_STATUS
EFIAPI
(MSR_IA32_BIOS_SIGN_ID, 0);(
  VOID
);

EFI_STATUS
EFIAPI
(0xCE) byte 1 is the Maximum Efficiency Ratio.(
  VOID
);

EFI_STATUS
EFIAPI
frequency = ratio * 100 MHz (bus frequency).(
  VOID
);

EFI_STATUS
EFIAPI
= AsmReadMsr64 (MSR_PLATFORM_INFO);(
  VOID
);

EFI_STATUS
EFIAPI
the MPERF (MSR 0xE7) and APERF (MSR 0xE8) ratio method:(
  VOID
);

EFI_STATUS
EFIAPI
(gMaxTurboRatio == 0) {(
  VOID
);

EFI_STATUS
EFIAPI
= (ratio * CoreFreq * 100) / 10000(
  VOID
);

EFI_STATUS
EFIAPI
= DivU64xU64 (MultU64xU64 (AperfValue, 100), gMaxTurboRatio);(
  VOID
);

EFI_STATUS
EFIAPI
MHz = (ratio * MaxEfficiencyRatio * 100) / 100(
  VOID
);

EFI_STATUS
EFIAPI
= DivU64xU64 ((
  VOID
);

EFI_STATUS
EFIAPI
and append(
  VOID
);

EFI_STATUS
EFIAPI
(Buffer, 0, ActualFrequency / 100, 8);(
  VOID
);

EFI_STATUS
EFIAPI
FUNCTIONS(
  VOID
);

EFI_STATUS
EFIAPI
magic values represent GUID comparison data(
  VOID
);

EFI_STATUS
EFIAPI
are precomputed from the CPU-info HOB GUID(
  VOID
);

EFI_STATUS
EFIAPI
through HOBs looking for CPU info(
  VOID
);

EFI_STATUS
EFIAPI
(GuidHob != NULL) {(
  VOID
);

EFI_STATUS
EFIAPI
GUID to the expected CPU-info HOB GUID(
  VOID
);

EFI_STATUS
EFIAPI
(CompareGuid (HobDataGuid, (EFI_GUID *)MagicCheck)) {(
  VOID
);

/// extract processor count
EFI_STATUS
EFIAPI
CPU info HOB(
  VOID
);

EFI_STATUS
EFIAPI
= *(UINT32 *)((UINT8 *)GuidHob + sizeof (EFI_HOB_GUID_TYPE));(
  VOID
);

EFI_STATUS
EFIAPI
to next HOB(
  VOID
);

EFI_STATUS
EFIAPI
= GetNextGuidHob ((
  VOID
);

EFI_STATUS
EFIAPI
for previous I/O to complete by polling port 0x508(
  VOID
);

EFI_STATUS
EFIAPI
(((AddressRemainder + (IoRead32 (IO_PORT_0x508) & 0xFFFFFF)(
  VOID
);

EFI_STATUS
EFIAPI
via IO read(
  VOID
);

EFI_STATUS
EFIAPI
first iteration, always use max remainder for remaining(
  VOID
);

EFI_STATUS
EFIAPI
counts(
  VOID
);

EFI_STATUS
EFIAPI
= 0x400000;(
  VOID
);

EFI_STATUS
EFIAPI
= gRT->GetVariable ((
  VOID
);

EFI_STATUS
EFIAPI
FORM DISPLAY(
  VOID
);

EFI_STATUS
EFIAPI
op-code handles(
  VOID
);

EFI_STATUS
EFIAPI
= HiiAllocateOpCodeHandle ();(
  VOID
);

EFI_STATUS
EFIAPI
form header and end markers(
  VOID
);

EFI_STATUS
EFIAPI
(StartOpCodeHandle, FORM_CPU_INFO_ID, 0);(
  VOID
);

EFI_STATUS
EFIAPI
"Total CPU Number" header text(
  VOID
);

EFI_STATUS
EFIAPI
per-processor data lines (7 fields each)(
  VOID
);

EFI_STATUS
EFIAPI
(Index = 0; Index < gNumberOfProcessors; Index++) {(
  VOID
);

EFI_STATUS
EFIAPI
the form via HII Database(
  VOID
);

EFI_STATUS
EFIAPI
= ((EFI_HII_DATABASE_PROTOCOL *)gHiiDatabase)->UpdateForm ((
  VOID
);

EFI_STATUS
EFIAPI
up(
  VOID
);

EFI_STATUS
EFIAPI
(StartOpCodeHandle);(
  VOID
);

EFI_STATUS
EFIAPI
total size of all packages(
  VOID
);

EFI_STATUS
EFIAPI
= VA_ARG (Args, VOID *);(
  VOID
);

EFI_STATUS
EFIAPI
the package list header(
  VOID
);

EFI_STATUS
EFIAPI
(&PackageListHeader->PackageListGuid, PackageListGuid);(
  VOID
);

EFI_STATUS
EFIAPI
with HII Database(
  VOID
);

EFI_STATUS
EFIAPI
= ((EFI_HII_PACKAGE_LIST_PROTOCOL *)gHiiPackageList)->NewPackageList ((
  VOID
);

#endif /* __GETCPUINFO_H__ */