/** @file
UefiConfigManager.h -- Header for UefiConfigManager
Copyright (c) HR650X BIOS Decompilation Project
**/
#ifndef __UEFICONFIGMANAGER_H__
#define __UEFICONFIGMANAGER_H__
#include "../uefi_headers/Uefi.h"
//
// Function Prototypes
//
EFI_STATUS
EFIAPI
StrLen(
VOID
);
EFI_STATUS
EFIAPI
AsciiStrLen(
VOID
);
EFI_STATUS
EFIAPI
StrnLenS(
VOID
);
EFI_STATUS
EFIAPI
AsciiStrnLenS(
VOID
);
EFI_STATUS
EFIAPI
UnicodeVSPrint(
VOID
);
EFI_STATUS
EFIAPI
UnicodeSPrint(
VOID
);
EFI_STATUS
EFIAPI
SPrint(
VOID
);
EFI_STATUS
EFIAPI
GetHiiDatabase(
VOID
);
EFI_STATUS
EFIAPI
DebugAssert(
VOID
);
EFI_STATUS
EFIAPI
DebugLog(
VOID
);
EFI_STATUS
EFIAPI
GetDebugLevel(
VOID
);
EFI_STATUS
EFIAPI
FreePool(
VOID
);
EFI_STATUS
EFIAPI
ReadUnaligned16(
VOID
);
EFI_STATUS
EFIAPI
ReadUnaligned64(
VOID
);
EFI_STATUS
EFIAPI
ConfigNodeFree(
VOID
);
EFI_STATUS
EFIAPI
HexParse4(
VOID
);
EFI_STATUS
EFIAPI
JsonObjectAdd(
VOID
);
EFI_STATUS
EFIAPI
GetHiiPackageListSize(
VOID
);
EFI_STATUS
EFIAPI
RegisterVarStoreNodeMapping(
VOID
);
EFI_STATUS
EFIAPI
RegisterVarStoreNode(
VOID
);
EFI_STATUS
EFIAPI
CompareVarStoreGuid(
VOID
);
EFI_STATUS
EFIAPI
CleanupVarStore(
VOID
);
EFI_STATUS
EFIAPI
ProcessIfrOpcode(
VOID
);
EFI_STATUS
EFIAPI
ParseIfrGuidOp(
VOID
);
EFI_STATUS
EFIAPI
ParseIfrOpcodes(
VOID
);
EFI_STATUS
EFIAPI
ProcessVarStore(
VOID
);
EFI_STATUS
EFIAPI
InitSetupStoreList(
VOID
);
EFI_STATUS
EFIAPI
FindVarStoreProtocol(
VOID
);
EFI_STATUS
EFIAPI
WriteBackSetupStore(
VOID
);
EFI_STATUS
EFIAPI
InitAttributesNode(
VOID
);
EFI_STATUS
EFIAPI
UefiConfigManagerEntry(
VOID
);
EFI_STATUS
EFIAPI
ModuleEntryPoint(
VOID
);
EFI_STATUS
EFIAPI
memset call (compiler intrinsic or inline assembly)(
VOID
);
EFI_STATUS
EFIAPI
aligned 8-byte chunks from end(
VOID
);
EFI_STATUS
EFIAPI
remainder bytes(
VOID
);
EFI_STATUS
EFIAPI
overlap: copy forward, 8 bytes at a time(
VOID
);
EFI_STATUS
EFIAPI
qmemcpy for aligned chunks(
VOID
);
EFI_STATUS
EFIAPI
remaining bytes(
VOID
);
EFI_STATUS
EFIAPI
}(
VOID
);
EFI_STATUS
EFIAPI
checks on buffer, format, sizes(
VOID
);
EFI_STATUS
EFIAPI
literal character(
VOID
);
EFI_STATUS
EFIAPI
format specifier(
VOID
);
EFI_STATUS
EFIAPI
'%'(
VOID
);
EFI_STATUS
EFIAPI
for flags (only '-' is minimally supported)(
VOID
);
EFI_STATUS
EFIAPI
if (*FormatChar == L'*') {(
VOID
);
EFI_STATUS
EFIAPI
if (*FormatChar == L'.') {(
VOID
);
EFI_STATUS
EFIAPI
modifiers(
VOID
);
EFI_STATUS
EFIAPI
specifier(
VOID
);
EFI_STATUS
EFIAPI
to decimal(
VOID
);
EFI_STATUS
EFIAPI
digits(
VOID
);
EFI_STATUS
EFIAPI
status string or output hex code(
VOID
);
EFI_STATUS
EFIAPI
printing - simplified representation(
VOID
);
EFI_STATUS
EFIAPI
UnicodeVSPrint with BufferSize/2 (CHAR16 half)(
VOID
);
EFI_STATUS
EFIAPI
if we're at TPL level that allows protocol lookup(
VOID
);
EFI_STATUS
EFIAPI
the HII Database protocol (GUID at unk_6C00)(
VOID
);
EFI_STATUS
EFIAPI
the debug protocol GUID(
VOID
);
EFI_STATUS
EFIAPI
the debug protocol's assertion handler (at offset +8)(
VOID
);
EFI_STATUS
EFIAPI
if this error level is enabled(
VOID
);
EFI_STATUS
EFIAPI
the protocol's debug print function at offset +0(
VOID
);
EFI_STATUS
EFIAPI
CMOS(
VOID
);
EFI_STATUS
EFIAPI
physical memory at 0xFDAF0490(
VOID
);
EFI_STATUS
EFIAPI
only(
VOID
);
EFI_STATUS
EFIAPI
| EFI_D_INIT(
VOID
);
EFI_STATUS
EFIAPI
caller expects the variable to be set even if NULL(
VOID
);
EFI_STATUS
EFIAPI
SetMem to zero it(
VOID
);
EFI_STATUS
EFIAPI
this is not a reference (flag 0x100 not set), free children(
VOID
);
EFI_STATUS
EFIAPI
flag 0x200 not set, free StringValue(
VOID
);
EFI_STATUS
EFIAPI
for "null"(
VOID
);
EFI_STATUS
EFIAPI
for "false"(
VOID
);
EFI_STATUS
EFIAPI
for "true"(
VOID
);
EFI_STATUS
EFIAPI
string(
VOID
);
EFI_STATUS
EFIAPI
(negative sign or digit)(
VOID
);
EFI_STATUS
EFIAPI
if (*Input == '[') {(
VOID
);
EFI_STATUS
EFIAPI
if (*Input == '{') {(
VOID
);
EFI_STATUS
EFIAPI
integer initially(
VOID
);
EFI_STATUS
EFIAPI
negative sign(
VOID
);
EFI_STATUS
EFIAPI
for leading zero (octal/hex prefix ignored per JSON spec, but parsed anyway)(
VOID
);
EFI_STATUS
EFIAPI
integer part(
VOID
);
EFI_STATUS
EFIAPI
fractional part(
VOID
);
EFI_STATUS
EFIAPI
EndPtr++;(
VOID
);
EFI_STATUS
EFIAPI
exponent(
VOID
);
EFI_STATUS
EFIAPI
check 'e' or 'E'(
VOID
);
EFI_STATUS
EFIAPI
parsed values in the node(
VOID
);
EFI_STATUS
EFIAPI
the type flags (int vs float) in the pad field(
VOID
);
EFI_STATUS
EFIAPI
the length of the string (after escape processing)(
VOID
);
EFI_STATUS
EFIAPI
actual characters (escape sequences count as 1)(
VOID
);
EFI_STATUS
EFIAPI
buffer for the decoded string(
VOID
);
EFI_STATUS
EFIAPI
escape sequences(
VOID
);
EFI_STATUS
EFIAPI
escape \uXXXX(
VOID
);
EFI_STATUS
EFIAPI
surrogate pairs(
VOID
);
EFI_STATUS
EFIAPI
surrogate, expect \uXXXX low surrogate(
VOID
);
EFI_STATUS
EFIAPI
the decoded string in the node(
VOID
);
EFI_STATUS
EFIAPI
pointer after closing quote(
VOID
);
EFI_STATUS
EFIAPI
whitespace(
VOID
);
EFI_STATUS
EFIAPI
array(
VOID
);
EFI_STATUS
EFIAPI
first element(
VOID
);
EFI_STATUS
EFIAPI
remaining elements(
VOID
);
EFI_STATUS
EFIAPI
next element(
VOID
);
EFI_STATUS
EFIAPI
object(
VOID
);
EFI_STATUS
EFIAPI
first member(
VOID
);
EFI_STATUS
EFIAPI
key string(
VOID
);
EFI_STATUS
EFIAPI
string value to name, mark as key(
VOID
);
EFI_STATUS
EFIAPI
original decompiled code swaps Name and StringValue pointers(
VOID
);
EFI_STATUS
EFIAPI
value(
VOID
);
EFI_STATUS
EFIAPI
remaining members(
VOID
);
EFI_STATUS
EFIAPI
key(
VOID
);
EFI_STATUS
EFIAPI
searching(
VOID
);
EFI_STATUS
EFIAPI
any existing key name on the value(
VOID
);
EFI_STATUS
EFIAPI
the key name(
VOID
);
EFI_STATUS
EFIAPI
into parent's child list(
VOID
);
EFI_STATUS
EFIAPI
the last sibling(
VOID
);
EFI_STATUS
EFIAPI
attempt with 512-byte buffer(
VOID
);
EFI_STATUS
EFIAPI
and retry with correct size(
VOID
);
EFI_STATUS
EFIAPI
call: get required buffer size(
VOID
);
EFI_STATUS
EFIAPI
and re-export(
VOID
);
EFI_STATUS
EFIAPI
with full buffer(
VOID
);
EFI_STATUS
EFIAPI
bytes to UINT16 units(
VOID
);
EFI_STATUS
EFIAPI
buffer pointer as status(
VOID
);
EFI_STATUS
EFIAPI
to linked list(
VOID
);
EFI_STATUS
EFIAPI
leading spaces(
VOID
);
EFI_STATUS
EFIAPI
the string left(
VOID
);
EFI_STATUS
EFIAPI
trailing spaces(
VOID
);
EFI_STATUS
EFIAPI
NULL if all spaces were stripped(
VOID
);
EFI_STATUS
EFIAPI
count(
VOID
);
EFI_STATUS
EFIAPI
at end of linked list at gIfrNvStoreMapHandle + 26(
VOID
);
EFI_STATUS
EFIAPI
VarId = OpcodeData[9]; // VarStoreId(
VOID
);
EFI_STATUS
EFIAPI
variable name follows(
VOID
);
EFI_STATUS
EFIAPI
VarGuid = OpcodeData + 11; // GUID(
VOID
);
EFI_STATUS
EFIAPI
VarId = OpcodeData[1]; // VarStoreId(
VOID
);
EFI_STATUS
EFIAPI
VarStoreName = (CHAR8 *)(OpcodeData + 2);(
VOID
);
EFI_STATUS
EFIAPI
or create the varstore mapping in the linked list(
VOID
);
EFI_STATUS
EFIAPI
for matching config section name(
VOID
);
EFI_STATUS
EFIAPI
variable from RuntimeServices(
VOID
);
EFI_STATUS
EFIAPI
the original: RuntimeServices->GetVariable(varName, &guid, &attribs, &size, buffer)(
VOID
);
EFI_STATUS
EFIAPI
check for section name matching "Setup" etc.(
VOID
);
EFI_STATUS
EFIAPI
and store the variable data(
VOID
);
EFI_STATUS
EFIAPI
data into entry(
VOID
);
EFI_STATUS
EFIAPI
the config name reference(
VOID
);
EFI_STATUS
EFIAPI
+ 17 stores the config name pointer for the section(
VOID
);
EFI_STATUS
EFIAPI
if debug enabled(
VOID
);
EFI_STATUS
EFIAPI
the mapping(
VOID
);
EFI_STATUS
EFIAPI
opcode processing(
VOID
);
EFI_STATUS
EFIAPI
the variable ID and data, registers mappings(
VOID
);
EFI_STATUS
EFIAPI
opcode length at offset +2(
VOID
);
EFI_STATUS
EFIAPI
based on opcode type(
VOID
);
EFI_STATUS
EFIAPI
case 0x02: // EFI_IFR_SUBTITLE(
VOID
);
EFI_STATUS
EFIAPI
case 0x05: // EFI_IFR_ONE_OF(
VOID
);
EFI_STATUS
EFIAPI
case 0x07: // EFI_IFR_NUMERIC(
VOID
);
EFI_STATUS
EFIAPI
case 0x09: // EFI_IFR_PASSWORD(
VOID
);
EFI_STATUS
EFIAPI
// Questions with varstore - parse variable info(
VOID
);
EFI_STATUS
EFIAPI
the linked list tracking varstore IDs(
VOID
);
EFI_STATUS
EFIAPI
case 0x25: // EFI_IFR_VARSTORE_NAME_VALUE(
VOID
);
EFI_STATUS
EFIAPI
ProcessIfrOpcode(ConfigAddr, (UINT16 *)Current, IfrEnd, DummyParam);(
VOID
);
EFI_STATUS
EFIAPI
ParseIfrGuidOp(ConfigAddr, (UINT16 *)Current, DummyParam);(
VOID
);
EFI_STATUS
EFIAPI
case 0x2D: // EFI_IFR_DEFAULTSTORE(
VOID
);
EFI_STATUS
EFIAPI
package list size(
VOID
);
EFI_STATUS
EFIAPI
buffer(
VOID
);
EFI_STATUS
EFIAPI
the package list(
VOID
);
EFI_STATUS
EFIAPI
IFR opcodes from the package list(
VOID
);
EFI_STATUS
EFIAPI
package list header(
VOID
);
EFI_STATUS
EFIAPI
package list length(
VOID
);
EFI_STATUS
EFIAPI
= end marker(
VOID
);
EFI_STATUS
EFIAPI
package type 2(
VOID
);
EFI_STATUS
EFIAPI
any pending varstore mapping items from the queue(
VOID
);
EFI_STATUS
EFIAPI
and process(
VOID
);
EFI_STATUS
EFIAPI
list of HII handles (RegisteredHandles)(
VOID
);
EFI_STATUS
EFIAPI
temporary array for varstore entries (each 53 bytes)(
VOID
);
EFI_STATUS
EFIAPI
raw 8-byte pointer arithmetic as in original(
VOID
);
EFI_STATUS
EFIAPI
varstore array(
VOID
);
EFI_STATUS
EFIAPI
each handle(
VOID
);
EFI_STATUS
EFIAPI
on error(
VOID
);
EFI_STATUS
EFIAPI
back phase(
VOID
);
EFI_STATUS
EFIAPI
byte comparison that tries 8-byte aligned reads(
VOID
);
EFI_STATUS
EFIAPI
misalignment(
VOID
);
EFI_STATUS
EFIAPI
aligned 8-byte chunks(
VOID
);
EFI_STATUS
EFIAPI
all handles supporting the form map protocol(
VOID
);
EFI_STATUS
EFIAPI
GetData(Handle, 0x19, 0, ConfigData, ConfigSize, ...)(
VOID
);
EFI_STATUS
EFIAPI
phase: try ResetData(
VOID
);
EFI_STATUS
EFIAPI
handles again, call ResetData(
VOID
);
EFI_STATUS
EFIAPI
to fixed TPL(
VOID
);
EFI_STATUS
EFIAPI
the actual variable store protocol(
VOID
);
EFI_STATUS
EFIAPI
variable data(
VOID
);
EFI_STATUS
EFIAPI
ReadFunction(
VOID
);
EFI_STATUS
EFIAPI
BootServices->FreePool(*ConfigData);(
VOID
);
EFI_STATUS
EFIAPI
TPL again(
VOID
);
EFI_STATUS
EFIAPI
is valid(
VOID
);
EFI_STATUS
EFIAPI
system access variable(
VOID
);
EFI_STATUS
EFIAPI
variable name(
VOID
);
EFI_STATUS
EFIAPI
the variable(
VOID
);
EFI_STATUS
EFIAPI
at offset +25(
VOID
);
EFI_STATUS
EFIAPI
at offset +49(
VOID
);
EFI_STATUS
EFIAPI
at offset +41(
VOID
);
EFI_STATUS
EFIAPI
at offset +9(
VOID
);
EFI_STATUS
EFIAPI
as written(
VOID
);
EFI_STATUS
EFIAPI
the backup variable(
VOID
);
EFI_STATUS
EFIAPI
system reset via I/O port 0xCF9(
VOID
);
EFI_STATUS
EFIAPI
reset(
VOID
);
EFI_STATUS
EFIAPI
HII Database Protocol(
VOID
);
EFI_STATUS
EFIAPI
HII String Protocol(
VOID
);
EFI_STATUS
EFIAPI
number of HII handles(
VOID
);
EFI_STATUS
EFIAPI
handle buffer(
VOID
);
EFI_STATUS
EFIAPI
setup store list(
VOID
);
EFI_STATUS
EFIAPI
back and cleanup(
VOID
);
EFI_STATUS
EFIAPI
root "BIOS Setup Information Store" node(
VOID
);
EFI_STATUS
EFIAPI
type(
VOID
);
EFI_STATUS
EFIAPI
"Modified" timestamp string(
VOID
);
EFI_STATUS
EFIAPI
current date/time from RuntimeServices(
VOID
);
EFI_STATUS
EFIAPI
timestamp(
VOID
);
EFI_STATUS
EFIAPI
as ASCII via AsciiToUnicode/UnicodeToAscii(
VOID
);
EFI_STATUS
EFIAPI
Attributes node(
VOID
);
EFI_STATUS
EFIAPI
protocols and varstore(
VOID
);
EFI_STATUS
EFIAPI
is built; clean up(
VOID
);
EFI_STATUS
EFIAPI
HOB list(
VOID
);
EFI_STATUS
EFIAPI
the actual entry point(
VOID
);
#endif /* __UEFICONFIGMANAGER_H__ */