Newer
Older
AMI-Aptio-BIOS-Reversed / PartitionDxe / PartitionDxe.h
@Ajax Dong Ajax Dong 2 days ago 12 KB Init
/** @file
  PartitionDxe.h -- Header for PartitionDxe

Copyright (c) HR650X BIOS Decompilation Project
**/

#ifndef __PARTITIONDXE_H__
#define __PARTITIONDXE_H__

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

//
// Function Prototypes
//

EFI_STATUS
EFIAPI
PartitionDriverEntryPoint(
  VOID
);

EFI_STATUS
EFIAPI
PartitionDriverBindingSupported(
  VOID
);

EFI_STATUS
EFIAPI
PartitionDriverBindingStart(
  VOID
);

EFI_STATUS
EFIAPI
PartitionDriverBindingStop(
  VOID
);

EFI_STATUS
EFIAPI
PartitionBlockIoReset(
  VOID
);

EFI_STATUS
EFIAPI
PartitionReturnChildError(
  VOID
);

EFI_STATUS
EFIAPI
PartitionBlockIoReadBlocks(
  VOID
);

EFI_STATUS
EFIAPI
PartitionBlockIoWriteBlocks(
  VOID
);

EFI_STATUS
EFIAPI
PartitionBlockIoFlushBlocks(
  VOID
);

EFI_STATUS
EFIAPI
PartitionBlockIo2Reset(
  VOID
);

EFI_STATUS
EFIAPI
PartitionBlockIo2ReadWriteCommon(
  VOID
);

EFI_STATUS
EFIAPI
PartitionCreateMediaDevicePathNode(
  VOID
);

EFI_STATUS
EFIAPI
PartitionBlockIo2ReadBlocks(
  VOID
);

EFI_STATUS
EFIAPI
PartitionBlockIo2WriteBlocks(
  VOID
);

EFI_STATUS
EFIAPI
PartitionBlockIo2FlushBlocks(
  VOID
);

EFI_STATUS
EFIAPI
PartitionCreateChildHandles(
  VOID
);

EFI_STATUS
EFIAPI
PartitionComponentNameUnsupported(
  VOID
);

EFI_STATUS
EFIAPI
PartitionCheckOverlap(
  VOID
);

EFI_STATUS
EFIAPI
PartitionRegisterOverlap(
  VOID
);

EFI_STATUS
EFIAPI
PartitionUnregisterOverlap(
  VOID
);

EFI_STATUS
EFIAPI
PartitionValidMbr(
  VOID
);

EFI_STATUS
EFIAPI
PartitionInstallMbrChildHandles(
  VOID
);

EFI_STATUS
EFIAPI
PartitionInstallGptChildHandles(
  VOID
);

EFI_STATUS
EFIAPI
PartitionCheckGptTable(
  VOID
);

EFI_STATUS
EFIAPI
PartitionCheckGptEntryArrayCrc(
  VOID
);

EFI_STATUS
EFIAPI
PartitionWriteGptTable(
  VOID
);

EFI_STATUS
EFIAPI
PartitionCheckGptEntries(
  VOID
);

EFI_STATUS
EFIAPI
PartitionInstallEltChildHandles(
  VOID
);

EFI_STATUS
EFIAPI
GetSupportedLanguages(
  VOID
);

EFI_STATUS
EFIAPI
variable definitions(
  VOID
);

EFI_STATUS
EFIAPI
ImageHandle_0    = 0;  // 0x4E40(
  VOID
);

EFI_STATUS
EFIAPI
EFI_HANDLE                ImageHandle      = 0;  // 0x4EC8(
  VOID
);

EFI_STATUS
EFIAPI
EFI_BOOT_SERVICES        *BootServices     = NULL; // 0x4EC0(
  VOID
);

EFI_STATUS
EFIAPI
UINT16                    i                = 0;   // 0x4EB0 - Index for overlap entries(
  VOID
);

EFI_STATUS
EFIAPI
detection table (0x32 entries x 32 bytes = 0xA00 bytes at 0x4F00)(
  VOID
);

EFI_STATUS
EFIAPI
byte_4F00[0xA00] = {0};(
  VOID
);

EFI_STATUS
EFIAPI
GUIDs(
  VOID
);

EFI_STATUS
EFIAPI
CLSID_PARTITION_SYSTEM_GUID = { 0xc12a7328, 0xf81f, 0x11d2, { 0xba, 0x4b, 0x00, 0xa0, 0xc9, 0x3e, 0xc9, 0x3b } };  // 0x4DA0(
  VOID
);

EFI_STATUS
EFIAPI
EFI_GUID                  Guid2                       = { 0x00000000, 0x0000, 0x0000, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } };  // 0x4EA0 (zero GUID)(
  VOID
);

EFI_STATUS
EFIAPI
detection function table(
  VOID
);

EFI_STATUS
EFIAPI
in order: GPT first, then El Torito, then MBR(
  VOID
);

EFI_STATUS
EFIAPI
gPartitionDetectionTable[] = {(
  VOID
);

EFI_STATUS
EFIAPI
partitions(
  VOID
);

EFI_STATUS
EFIAPI
Torito (CD-ROM)(
  VOID
);

EFI_STATUS
EFIAPI
};(
  VOID
);

EFI_STATUS
EFIAPI
Binding protocol instance(
  VOID
);

EFI_STATUS
EFIAPI
gPartitionDriverBinding = {(
  VOID
);

EFI_STATUS
EFIAPI
NULL,           // ImageHandle(
  VOID
);

EFI_STATUS
EFIAPI
Name 2 protocol instance(
  VOID
);

EFI_STATUS
EFIAPI
gPartitionComponentName2 = {(
  VOID
);

EFI_STATUS
EFIAPI
(driver-specific)(
  VOID
);

EFI_STATUS
EFIAPI
languages table(
  VOID
);

EFI_STATUS
EFIAPI
gSupportedLanguages[] = {(
  VOID
);

EFI_STATUS
EFIAPI
{ NULL, NULL }         // Terminator(
  VOID
);

EFI_STATUS
EFIAPI
used for Component Name protocols(
  VOID
);

EFI_STATUS
EFIAPI
*gComponentNameDriverName[] = { "eng", "en" };  // 0x3F50, 0x3F54(
  VOID
);

EFI_STATUS
EFIAPI
Entry Point(
  VOID
);

EFI_STATUS
EFIAPI
(not supported)(
  VOID
);

EFI_STATUS
EFIAPI
status(
  VOID
);

EFI_STATUS
EFIAPI
Binding Protocol(
  VOID
);

EFI_STATUS
EFIAPI
a remaining device path is provided, validate it(
  VOID
);

EFI_STATUS
EFIAPI
be NULL, end instance, or a valid hard drive media device path(
  VOID
);

EFI_STATUS
EFIAPI
(RemainingDevicePath != NULL &&(
  VOID
);

EFI_STATUS
EFIAPI
if controller has DevicePath protocol(
  VOID
);

EFI_STATUS
EFIAPI
= gBS->OpenProtocol((
  VOID
);

EFI_STATUS
EFIAPI
if controller has Block IO protocol (the primary requirement)(
  VOID
);

EFI_STATUS
EFIAPI
check for Component Name 2 to verify it's a full disk controller(
  VOID
);

EFI_STATUS
EFIAPI
previous TPL and raise to TPL_CALLBACK(
  VOID
);

EFI_STATUS
EFIAPI
= RemainingDevicePath;(
  VOID
);

EFI_STATUS
EFIAPI
remaining device path is an end instance, nothing to do(
  VOID
);

EFI_STATUS
EFIAPI
(RemainingDevicePath != NULL && IsDevicePathEndInstance(RemainingDevicePath)) {(
  VOID
);

EFI_STATUS
EFIAPI
Block IO protocol(
  VOID
);

EFI_STATUS
EFIAPI
Disk IO protocol (optional - needed for GPT backup restore)(
  VOID
);

EFI_STATUS
EFIAPI
Device Path protocol(
  VOID
);

EFI_STATUS
EFIAPI
Block IO2 protocol (optional)(
  VOID
);

EFI_STATUS
EFIAPI
= NULL;(
  VOID
);

EFI_STATUS
EFIAPI
media info(
  VOID
);

EFI_STATUS
EFIAPI
= BlockIo;(
  VOID
);

EFI_STATUS
EFIAPI
each partition detection method(
  VOID
);

EFI_STATUS
EFIAPI
(Index = 0; gPartitionDetectionTable[Index] != NULL; Index++) {(
  VOID
);

EFI_STATUS
EFIAPI
no partitions found, clean up protocols(
  VOID
);

EFI_STATUS
EFIAPI
(DevicePath != NULL || BlockIo2 != NULL) {(
  VOID
);

EFI_STATUS
EFIAPI
all protocols opened by Start()(
  VOID
);

EFI_STATUS
EFIAPI
if any children still exist(
  VOID
);

EFI_STATUS
EFIAPI
(NumberOfChildren != 0) {(
  VOID
);

EFI_STATUS
EFIAPI
individual children(
  VOID
);

EFI_STATUS
EFIAPI
= gBS->RaiseTPL(TPL_CALLBACK);(
  VOID
);

EFI_STATUS
EFIAPI
the Block IO protocol from child handle(
  VOID
);

EFI_STATUS
EFIAPI
private data signature(
  VOID
);

EFI_STATUS
EFIAPI
= CR(BlockIo, PARTITION_PRIVATE_DATA, BlockIo, PARTITION_PRIVATE_DATA_SIGNATURE);(
  VOID
);

EFI_STATUS
EFIAPI
and close Block IO(
  VOID
);

EFI_STATUS
EFIAPI
= BlockIo->FlushBlocks(BlockIo);(
  VOID
);

EFI_STATUS
EFIAPI
Block IO2 if available(
  VOID
);

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

EFI_STATUS
EFIAPI
protocols from child handle(
  VOID
);

EFI_STATUS
EFIAPI
Block IO, Block IO2, Device Path, and Partition Info(
  VOID
);

EFI_STATUS
EFIAPI
= gBS->UninstallMultipleProtocolInterfaces((
  VOID
);

EFI_STATUS
EFIAPI
overlap and free private data(
  VOID
);

EFI_STATUS
EFIAPI
IO Protocol Implementation(
  VOID
);

EFI_STATUS
EFIAPI
buffer size is a multiple of block size(
  VOID
);

EFI_STATUS
EFIAPI
(BufferSize % Private->BlockSize != 0) {(
  VOID
);

EFI_STATUS
EFIAPI
offset on parent device(
  VOID
);

EFI_STATUS
EFIAPI
= Private->CachedDiskOffset + Lba * Private->BlockSize;(
  VOID
);

EFI_STATUS
EFIAPI
the read is within partition bounds(
  VOID
);

EFI_STATUS
EFIAPI
(OffsetLba + BufferSize > Private->CachedDiskSize) {(
  VOID
);

EFI_STATUS
EFIAPI
the write is within partition bounds(
  VOID
);

EFI_STATUS
EFIAPI
IO2 Protocol Implementation(
  VOID
);

EFI_STATUS
EFIAPI
no token (synchronous) or no buffer to map, call parent directly(
  VOID
);

EFI_STATUS
EFIAPI
(Token == NULL || *Token == NULL) {(
  VOID
);

EFI_STATUS
EFIAPI
a wrapped device path for tracking(
  VOID
);

EFI_STATUS
EFIAPI
*MediaDevicePath = PartitionCreateMediaDevicePathNode(Token);(
  VOID
);

EFI_STATUS
EFIAPI
no token, call parent directly(
  VOID
);

EFI_STATUS
EFIAPI
Handle Creation(
  VOID
);

EFI_STATUS
EFIAPI
private data structure (0x1A0 bytes)(
  VOID
);

EFI_STATUS
EFIAPI
= AllocateCopyPool(sizeof(PARTITION_PRIVATE_DATA));(
  VOID
);

EFI_STATUS
EFIAPI
revision(
  VOID
);

EFI_STATUS
EFIAPI
Block IO2 protocol if parent supports it(
  VOID
);

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

EFI_STATUS
EFIAPI
media parameters(
  VOID
);

EFI_STATUS
EFIAPI
Block IO2 media parameters(
  VOID
);

EFI_STATUS
EFIAPI
LastBlock for floppy detection(
  VOID
);

EFI_STATUS
EFIAPI
(Private->BlockIo.Media->LastBlock >= 0x20000) {(
  VOID
);

EFI_STATUS
EFIAPI
a floppy(
  VOID
);

EFI_STATUS
EFIAPI
full device path(
  VOID
);

EFI_STATUS
EFIAPI
= AppendDevicePathInstance(DevicePath, DevicePathInstance);(
  VOID
);

EFI_STATUS
EFIAPI
partition info(
  VOID
);

EFI_STATUS
EFIAPI
partition type GUID pointer(
  VOID
);

EFI_STATUS
EFIAPI
(PartitionInfo->Type == PARTITION_TYPE_MBR) {(
  VOID
);

EFI_STATUS
EFIAPI
protocols on new child handle(
  VOID
);

EFI_STATUS
EFIAPI
Device Path protocol on the child handle(
  VOID
);

EFI_STATUS
EFIAPI
Name Protocol(
  VOID
);

EFI_STATUS
EFIAPI
Detection(
  VOID
);

EFI_STATUS
EFIAPI
first free entry(
  VOID
);

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

EFI_STATUS
EFIAPI
full(
  VOID
);

EFI_STATUS
EFIAPI
against all registered entries(
  VOID
);

EFI_STATUS
EFIAPI
detected(
  VOID
);

EFI_STATUS
EFIAPI
overlap(
  VOID
);

EFI_STATUS
EFIAPI
first free slot(
  VOID
);

EFI_STATUS
EFIAPI
the entry(
  VOID
);

EFI_STATUS
EFIAPI
flag(
  VOID
);

EFI_STATUS
EFIAPI
for matching entry(
  VOID
);

EFI_STATUS
EFIAPI
entry(
  VOID
);

EFI_STATUS
EFIAPI
Partition Support(
  VOID
);

EFI_STATUS
EFIAPI
MBR signature(
  VOID
);

EFI_STATUS
EFIAPI
(*(UINT16*)((UINT8*)MbrBuffer + MBR_OFFSET_SIGNATURE) != MBR_SIGNATURE) {(
  VOID
);

EFI_STATUS
EFIAPI
of first partition entry(
  VOID
);

EFI_STATUS
EFIAPI
start LBA and size (24-bit CHS/LBA hybrid encoding)(
  VOID
);

EFI_STATUS
EFIAPI
= PartitionEntry->StartLBA;(
  VOID
);

EFI_STATUS
EFIAPI
for overlap with other partitions(
  VOID
);

EFI_STATUS
EFIAPI
(SubIndex = Index + 1; SubIndex < 4; SubIndex++) {(
  VOID
);

EFI_STATUS
EFIAPI
MBR (512 bytes), validates it, then iterates 4 primary partition entries.(
  VOID
);

EFI_STATUS
EFIAPI
each valid entry, creates a HARDDRIVE_DEVICE_PATH media node and calls(
  VOID
);

EFI_STATUS
EFIAPI
partitions (EBR) are recursively followed.(
  VOID
);

EFI_STATUS
EFIAPI
details from disassembly (0x1CC0):(
  VOID
);

EFI_STATUS
EFIAPI
EFI_UNSUPPORTED;  // Placeholder - full implementation in decompiled output(
  VOID
);

EFI_STATUS
EFIAPI
primary and backup GPT headers, validates CRC, and creates(
  VOID
);

EFI_STATUS
EFIAPI
handles for each valid GPT partition entry.(
  VOID
);

EFI_STATUS
EFIAPI
details from disassembly (0x227C):(
  VOID
);

EFI_STATUS
EFIAPI
GPT signature ("EFI PART")(
  VOID
);

EFI_STATUS
EFIAPI
(Header->Signature == GPT_HEADER_SIGNATURE) {(
  VOID
);

EFI_STATUS
EFIAPI
CRC (clear CRC field, recalculate, compare)(
  VOID
);

EFI_STATUS
EFIAPI
(Header->HeaderSize != 0 &&(
  VOID
);

EFI_STATUS
EFIAPI
write location (primary or backup)(
  VOID
);

EFI_STATUS
EFIAPI
(GptHeader->MyLBA == 1) {(
  VOID
);

EFI_STATUS
EFIAPI
header fields(
  VOID
);

EFI_STATUS
EFIAPI
new CRC(
  VOID
);

EFI_STATUS
EFIAPI
header(
  VOID
);

EFI_STATUS
EFIAPI
= HeaderCopy->PartitionEntryLBA * ParentBlockIoMedia->Media->BlockSize;(
  VOID
);

EFI_STATUS
EFIAPI
partition entries(
  VOID
);

EFI_STATUS
EFIAPI
= AllocatePool(GptHeader->SizeOfPartitionEntry * GptHeader->NumberOfPartitionEntries);(
  VOID
);

EFI_STATUS
EFIAPI
existing entries, then write to new location(
  VOID
);

EFI_STATUS
EFIAPI
= ParentBlockIo->ReadBlocks((
  VOID
);

EFI_STATUS
EFIAPI
unused entries(
  VOID
);

EFI_STATUS
EFIAPI
(!CompareGuid(&Entry->PartitionTypeGUID, &Guid2)) {(
  VOID
);

EFI_STATUS
EFIAPI
of range(
  VOID
);

EFI_STATUS
EFIAPI
for required partition attribute(
  VOID
);

EFI_STATUS
EFIAPI
((Entry->Attributes & 2) != 0) {(
  VOID
);

EFI_STATUS
EFIAPI
partition(
  VOID
);

EFI_STATUS
EFIAPI
for overlap with subsequent entries(
  VOID
);

EFI_STATUS
EFIAPI
(SubIndex = Index + 1; SubIndex < GptHeader->NumberOfPartitionEntries; SubIndex++) {(
  VOID
);

EFI_STATUS
EFIAPI
by prev(
  VOID
);

EFI_STATUS
EFIAPI
Torito (CD-ROM) Partition Support(
  VOID
);

EFI_STATUS
EFIAPI
details from disassembly (0x2D84):(
  VOID
);

EFI_STATUS
EFIAPI
through supported languages(
  VOID
);

EFI_STATUS
EFIAPI
(This->SupportedLanguages != NULL) {(
  VOID
);

EFI_STATUS
EFIAPI
with requested language(
  VOID
);

EFI_STATUS
EFIAPI
(CompareLangCodes(Language, (CHAR8*)This->SupportedLanguages + Index)) {(
  VOID
);

EFI_STATUS
EFIAPI
to next language in the list(
  VOID
);

EFI_STATUS
EFIAPI
(((CHAR8*)This->SupportedLanguages)[Index] != '\0' &&(
  VOID
);

EFI_STATUS
EFIAPI
matching language entry in the table(
  VOID
);

EFI_STATUS
EFIAPI
(Index = 0; gSupportedLanguages[Index].LanguageString != NULL; Index += 2) {(
  VOID
);

#endif /* __PARTITIONDXE_H__ */