#include "ACPI.h"
//
// ACPI - UEFI Module
// Total functions: 81
//
// Function: _ModuleEntryPoint @ 0x370 (0x1c bytes)
EFI_STATUS ModuleEntryPoint(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
{
__int64 ImageHandle_1; // rcx
InitUefiServices((__int64)ImageHandle, (__int64)SystemTable); /*0x379*/
return AcpiCoreEntryPoint(ImageHandle_1, SystemTable); /*0x386*/
}
// Function: InitUefiServices @ 0x38c (0xcb bytes)
__int64 __fastcall InitUefiServices(__int64 ImageHandle, __int64 SystemTable)
{
__int64 RuntimeServices; // rax
::ImageHandle = ImageHandle; /*0x392*/
if ( !ImageHandle ) /*0x39f*/
AssertWithProtocol( /*0x3b2*/
(__int64)"e:\\hs\\MdePkg\\Library\\UefiBootServicesTableLib\\UefiBootServicesTableLib.c",
51,
(__int64)"gImageHandle != ((void *) 0)");
SystemTable_0 = SystemTable; /*0x3b7*/
if ( !SystemTable ) /*0x3c1*/
AssertWithProtocol( /*0x3d4*/
(__int64)"e:\\hs\\MdePkg\\Library\\UefiBootServicesTableLib\\UefiBootServicesTableLib.c",
57,
(__int64)"gST != ((void *) 0)");
qword_8768 = *(_QWORD *)(SystemTable + 96); /*0x3dd*/
if ( !qword_8768 ) /*0x3e7*/
AssertWithProtocol( /*0x3fa*/
(__int64)"e:\\hs\\MdePkg\\Library\\UefiBootServicesTableLib\\UefiBootServicesTableLib.c",
63,
(__int64)"gBS != ((void *) 0)");
qword_8778 = *(_QWORD *)(SystemTable + 88); /*0x403*/
if ( !qword_8778 ) /*0x40d*/
AssertWithProtocol( /*0x420*/
(__int64)"e:\\hs\\MdePkg\\Library\\UefiRuntimeServicesTableLib\\UefiRuntimeServicesTableLib.c",
47,
(__int64)"gRT != ((void *) 0)");
RuntimeServices = AssertCpuDeadLoop_1(ImageHandle); /*0x425*/
if ( !::SystemTable ) /*0x432*/
{
::SystemTable = SystemTable; /*0x434*/
BootServices = *(_QWORD *)(SystemTable + 96); /*0x43f*/
RuntimeServices = *(_QWORD *)(SystemTable + 88); /*0x446*/
RuntimeServices = RuntimeServices; /*0x44a*/
}
return RuntimeServices; /*0x451*/
}
// Function: AcpiProcessRsdtHandlers @ 0x458 (0x4b bytes)
__int64 __fastcall AcpiProcessRsdtHandlers(unsigned __int64 RsdtBase)
{
__int64 (__fastcall *v1)(unsigned __int64); // rax
__int64 v3; // rdx
__int64 v4; // rbx
v1 = (__int64 (__fastcall *)(unsigned __int64))AcpiRsdtHandlerTable[0]; /*0x462*/
v3 = 0x8000000000000003uLL; /*0x46c*/
v4 = 0; /*0x476*/
while ( v1 ) /*0x493*/
{
v3 = v1(RsdtBase); /*0x47f*/
v1 = (__int64 (__fastcall *)(unsigned __int64))AcpiRsdtHandlerTable[++v4]; /*0x48c*/
}
return v3; /*0x49d*/
}
// Function: AcpiGetTable @ 0x4a4 (0x107 bytes)
unsigned __int64 __fastcall AcpiGetTable(__int64 *p_psub_4A4, __int64 a2, __int64 *a3, _DWORD *a4, _QWORD *a5)
{
__int64 v10; // rdi
__int64 v11; // rax
__int64 v12; // rsi
if ( !AcpiDeprecatedWarningFlag ) /*0x4d0*/
DebugPrint( /*0x4de*/
0x80000000LL,
"!!!WARNING!!! Deprecated AcpiSupport protocol is used. Use AcpiSdt/AcpiTable protocols instead. \n");
if ( p_psub_4A4 != &psub_4A4 ) /*0x4ed*/
return 0x8000000000000002uLL; /*0x4ef*/
if ( a2 > j_0 - 1 ) /*0x50b*/
return 0x800000000000000EuLL; /*0x50d*/
v10 = **(_QWORD **)(AcpiTableList + 8 * a2); /*0x524*/
v11 = AllocatePool(*(unsigned int *)(v10 + 4)); /*0x52a*/
v12 = v11; /*0x52f*/
if ( v11 ) /*0x535*/
{
*a4 = *(_DWORD *)(*(_QWORD *)(AcpiTableList + 8 * a2) + 8LL); /*0x56f*/
*a5 = v10; /*0x577*/
(*(void (__fastcall **)(__int64, __int64, _QWORD))(BootServices + 352))(v11, v10, *(unsigned int *)(v10 + 4)); /*0x585*/
*a3 = v12; /*0x58d*/
return 0; /*0x58b*/
}
else
{
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiCore.c", 208, (__int64)"Ptr"); /*0x54a*/
return 0x8000000000000009uLL; /*0x54f*/
}
}
// Function: AcpiProcessTable @ 0x5ac (0x6c7 bytes)
unsigned __int64 __fastcall AcpiProcessTable(
__int64 *p_psub_4A4,
unsigned __int8 *TableAddr,
char a3,
int n2,
__int64 *p_TableSize)
{
__int64 Status; // r12
__int64 TableResult; // rbx
bool IsRootTable; // r14
_DWORD *TableHeader; // rax
__int64 TableSize; // r9
int TableType; // r8d
__int64 AllocStatus; // rax
__int64 ErrLine304; // rdx
const char *_EFI_ERROR_(Status); // r8
unsigned int SigValue; // ecx
__int64 ProcessStatus; // rax
unsigned __int64 RsdtBase_1; // rax
__int64 Status_1; // rax
unsigned __int64 i_1; // r8
char CheckByteAcpi; // dl
unsigned __int64 i; // rax
bool IsRootTable_1; // di
signed __int64 TableResult_1; // rax
unsigned __int64 ByteIdx; // rcx
unsigned __int64 ByteIdx_1; // r8
char CheckByte; // al
_DWORD *DataPtr; // r14
unsigned __int64 DataSize; // rdi
unsigned __int64 j; // rdi
__int64 TableResult_2; // rax
__int64 ErrLine267; // rdx
__int64 DynTableSize; // [rsp... [11106 chars total]
// Function: AcpiCoreNotify @ 0xc74 (0xc6 bytes)
unsigned __int64 __fastcall AcpiCoreNotify(__int64 *p_psub_4A4, unsigned int n2)
{
bool v3; // cc
unsigned __int8 v5; // cl
signed __int64 v6; // rax
if ( n2 - 2 > 0x1C || p_psub_4A4 != &psub_4A4 ) /*0xc8e*/
return 0x8000000000000003uLL; /*0xc8e*/
v3 = n2 <= 2; /*0xc90*/
if ( n2 == 2 ) /*0xc93*/
{
if ( MemPages && *(_QWORD *)(MemPages + 24) ) /*0xca1*/
{
AcpiPublishTables(1u, 1u); /*0xcac*/
return 0x8000000000000003uLL; /*0xcc0*/
}
AcpiPublishTables(1u, 0); /*0xcc5*/
v3 = n2 <= 2; /*0xcca*/
}
if ( v3 || AcpiTablesPublished ) /*0xcd6*/
return 0x8000000000000003uLL; /*0xcd6*/
v5 = MemPages && *(_DWORD *)(MemPages + 16); /*0xcec*/
v6 = AcpiPublishTables(v5, 1u); /*0xcf4*/
if ( v6 >= 0 ) /*0xcfc*/
return 0; /*0xd36*/
DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", v6); /*0xd0d*/
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiCore.c", 500, (__int64)"!EFI_ERROR (Status)"); /*0xd25*/
return 0x8000000000000015uLL; /*0xcbb*/
}
// Function: AcpiInstallTable @ 0xd3c (0xfe bytes)
__int64 __fastcall AcpiInstallTable(__int64 *p_psub_D3C, unsigned __int64 *p_RsdtBase, __int64 n40, _QWORD *a4)
{
__int64 v5; // rax
__int64 v6; // rbx
__int64 result; // rax
bool v8; // zf
__int64 TableSize; // [rsp+48h] [rbp+10h] BYREF
TableSize = 0; /*0xd48*/
if ( !p_RsdtBase || n40 != *((_DWORD *)p_RsdtBase + 1) || !a4 ) /*0xd68*/
return 0x8000000000000002uLL; /*0xe25*/
AcpiDeprecatedWarningFlag = 1; /*0xd72*/
v5 = AcpiProcessTable(&psub_4A4, (unsigned __int8 *)p_RsdtBase, 1, -2, &TableSize); /*0xd8d*/
v6 = v5; /*0xd92*/
if ( v5 < 0 ) /*0xd98*/
{
DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", v5); /*0xda9*/
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiCore.c", 542, (__int64)"!EFI_ERROR (Status)"); /*0xdc1*/
}
AcpiDeprecatedWarningFlag = 0; /*0xdc6*/
if ( v6 >= 0 ) /*0xdd0*/
{
v8 = AcpiTableInstalled == 0; /*0xdef*/
*a4 = TableSize; /*0xdfb*/
if ( v8 ) /*0xdfe*/
{
if ( AcpiTablesPublished ) /*0xe07*/
AcpiPublishTables(1u, 0); /*0xe1b*/
else
return AcpiPublishTables(1u, 1u); /*0xe12*/
}
return v6; /*0xe20*/
}
else
{
result = 0x8000000000000009uLL; /*0xddc*/
if ( v6 == 0x800000000000000FuLL ) /*0xde9*/
return 0x800000000000000FuLL; /*0xde9*/
}
return result; /*0xe34*/
}
// Function: AcpiRemoveTable @ 0xe3c (0x4e bytes)
__int64 __fastcall AcpiRemoveTable(__int64 *p_psub_D3C, __int64 a2)
{
__int64 result; // rax
__int64 v3; // [rsp+48h] [rbp+10h] BYREF
v3 = a2; /*0xe3c*/
AcpiDeprecatedWarningFlag = 1; /*0xe4a*/
result = AcpiProcessTable(&psub_4A4, 0, 0, -2, &v3); /*0xe68*/
AcpiDeprecatedWarningFlag = 0; /*0xe70*/
if ( result < 0 ) /*0xe81*/
return 0x800000000000000EuLL; /*0xe81*/
return result; /*0xe85*/
}
// Function: AcpiGetTableEx @ 0xe8c (0x31 bytes)
unsigned __int64 __fastcall AcpiGetTableEx(__int64 a1, __int64 *a2, _DWORD *a3, _QWORD *a4)
{
unsigned __int64 result; // rax
AcpiDeprecatedWarningFlag = 1; /*0xe9b*/
result = AcpiGetTable(&psub_4A4, a1, a2, a3, a4); /*0xeac*/
AcpiDeprecatedWarningFlag = 0; /*0xeb1*/
return result; /*0xeb8*/
}
// Function: AcpiFindTableInList @ 0xec0 (0x58 bytes)
unsigned __int64 __fastcall AcpiFindTableInList(char a1, __int64 a2)
{
unsigned __int64 DataSize; // rdx
DataSize = 0; /*0xec3*/
if ( !a2 ) /*0xec8*/
return 0x8000000000000002uLL; /*0xec8*/
if ( a1 ) /*0xecc*/
return TableHandleListAppend((__int64)&AcpiTableHandleList, a2); /*0xed8*/
if ( !j ) /*0xee7*/
return 0x8000000000000002uLL; /*0xefe*/
while ( *(_QWORD *)(AcpiTableHandleArray + 8 * DataSize) != a2 ) /*0xef4*/
{
if ( ++DataSize >= j ) /*0xefc*/
return 0x8000000000000002uLL; /*0xefc*/
}
return SataGetInfo(&AcpiTableHandleList, DataSize, 0); /*0xf08*/
}
// Function: AcpiFindFvTables @ 0xf18 (0x236 bytes)
__int64 AcpiFindFvTables()
{
__int64 InstanceCount; // rsi
__int64 FvStatus_1; // rax
__int64 SectionType; // r8
__int64 FvStatus; // rdi
__int64 FvIndex; // rbx
__int64 HandleStatus; // rax
__int64 FfsFile; // rbx
__int64 FvStatus_2; // rdi
unsigned __int8 *TableAddr_1; // rdx
unsigned __int8 *TableAddr; // [rsp+40h] [rbp-29h] BYREF
_DWORD SearchedSig[4]; // [rsp+48h] [rbp-21h] BYREF
_DWORD TableGuid[4]; // [rsp+58h] [rbp-11h] BYREF
unsigned __int64 NumHandles; // [rsp+68h] [rbp-1h] BYREF
__int64 FfsFile_2; // [rsp+70h] [rbp+7h] BYREF
__int64 HandleBuffer; // [rsp+78h] [rbp+Fh] BYREF
__int64 TableSize; // [rsp+80h] [rbp+17h] BYREF
unsigned __int64 BufferSize; // [rsp+88h] [rbp+1Fh] BYREF
_BYTE SectionBuffer[48]; // [rsp+90h] [rbp+27h] BYREF
__int64 FfsFile_1; // [rsp+D0h] [rbp+67h] BYREF
int AuthStatus; // [rsp+D8h] [rbp+6Fh] BYREF
char ReadFlag; // [rsp+E0h] [rbp+77h] BYREF
char AuthFlag; // [rsp+E8h] [rbp+7Fh] BYREF
InstanceCount = 0; /*0xf2b*/
TableGuid[1] = 1136466893; /*0xf2d*/
TableAddr = 0; /*0xf34*/
TableSize = 0; /*0xf3c*/
AuthStatus = 0; /*0xf44*/
TableGuid[0] = 1889428594; /*0xf62*/
SearchedSig[0] = 1889428594; /*0xf65*/
TableGuid[2] = 768437131; /*0xf6b*/
TableGuid[3] = 1740179565; /*0xf72*/
SearchedSig[1] = 1136466893; /*0xf79*/
SearchedSig[2] = 768437131; /*0xf80*/
SearchedSig[3] = 1740179565; /*0xf87*/
FvStatus_1 = (*(__int64 (__fastcall **)(__int64, void *, _QWORD, unsigned __int64 *, __int64 *))(BootServices + 312))( /*0xf8e*/
2,
&unk_7160,
0,
&NumHandles,
&HandleBuffer);
FvStatus = FvStatus_1; /*0xf94*/
if ( FvStatus_1 < 0 ) /*0xfa0*/
{
FfsFile = FfsFile_1; /*0x1060*/
}
else
{
FvIndex = 0; /*0xfa6*/
if ( NumHandles ) /*0xfac*/
{
while ( 1 ) /*0xfcc*/
{
HandleStatus = (*(__int64 (__fastcall **)(_QWORD, void *, __int64 *))(BootServices + 152))( /*0xfcc*/
*(_QWORD *)(HandleBuffer + 8 * FvIndex),
&unk_7160,
&FfsFile_2);
if ( HandleStatus < 0 ) /*0xfd5*/
{
DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", HandleStatus); /*0xfe4*/
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiCore.c", 717, (__int64)"!EFI_ERROR (Status)"); /*0xffc*/
}
FvStatus = (*(__int64 (__fastcall **)(__int64, _DWORD *, _QWORD, _BYTE *, __int64 *, char *, int *))(FfsFile_2 + 16))( /*0x1031*/
FfsFile_2,
SearchedSig,
0,
SectionBuffer,
&FfsFile_1,
&ReadFlag,
&AuthStatus);
if ( !FvStatus ) /*0x1037*/
break; /*0x1037*/
if ( ++FvIndex >= NumHandles ) /*0x1040*/
goto LABEL_7; /*0x1040*/
}
FfsFile = FfsFile_2; /*0x105a*/
}
else
{
LABEL_7:
FfsFile = FfsFile_1; /*0x1046*/
}
FvStatus_1 = (*(__int64 (__fastcall **)(__int64))(BootServices + 72))(HandleBuffer); /*0x1055*/
}
if ( FvStatus < 0 )
return DebugPrint(0x80000000LL, "ACPI: FoundFvWithAcpiTables Fails with a Status = %r\n", FvStatus);
if ( !FvStatus ) /*0x1080*/
{
do /*0x109a*/
{
LOBYTE(SectionType) = 25; /*0x109a*/
FvStatus_1 = (*(__int64 (__fastcall **)(__int64, _DWORD *, __int64, __int64, unsigned __int8 **, unsigned __int64 *, char *))(FfsFile + 24))( /*0x10ae*/
FfsFile,
TableGuid,
SectionType,
InstanceCount,
&TableAddr,
&BufferSize,
&AuthFlag);
FvStatus_2 = FvStatus_1; /*0x10b1*/
if ( FvStatus_1 >= 0 ) /*0x10b7*/
{
TableSize = 0; /*0x10b9*/
TableAddr_1 = TableAddr; /*0x10be*/
if ( BufferSize < *((unsigned int *)TableAddr + 1) ) /*0x10c9*/
{
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiCore.c", 797, (__int64)"Size >= TableSize"); /*0x10de*/
TableAddr_1 = TableAddr; /*0x10e3*/
}
FvStatus_2 = AcpiProcessTable(&psub_4A4, TableAddr_1, 1, -2, &TableSize); /*0x1109*/
FvStatus_1 = (*(__int64 (__fastcall **)(unsigned __int8 *))(BootServices + 72))(TableAddr); /*0x1113*/
if ( FvStatus_2 < 0 ) /*0x1119*/
return FvStatus_1; /*0x1119*/
FvStatus_1 = DebugPrint(64, "SubmitAcpiTablesFromFile Acpi Tbl submitted Instance = 0x%X\n ", ++InstanceCount); /*0x112d*/
TableAddr = 0; /*0x1132*/
}
}
while ( !FvStatus_2 ); /*0x109a*/
}
return FvStatus_1; /*0x1140*/
}
// Function: AssertCpuDeadLoop @ 0x1150 (0x14a bytes)
signed __int64 AssertCpuDeadLoop()
{
__int64 v0; // rdi
signed __int64 Table; // rsi
_DWORD *v2; // rbx
__int64 v3; // rax
signed __int64 result; // rax
signed __int64 v5; // rbx
_DWORD *v6; // [rsp+20h] [rbp-30h] BYREF
unsigned __int64 RsdtBase; // [rsp+28h] [rbp-28h] BYREF
char v8; // [rsp+30h] [rbp-20h]
int n65555; // [rsp+48h] [rbp-8h]
int n7; // [rsp+4Ch] [rbp-4h]
int v11; // [rsp+80h] [rbp+30h] BYREF
__int64 v12; // [rsp+88h] [rbp+38h] BYREF
v0 = 0; /*0x115f*/
while ( 1 ) /*0x1175*/
{
Table = AcpiGetTableEx(v0, (__int64 *)&v6, &v11, &v12); /*0x1175*/
if ( Table == 0x800000000000000EuLL ) /*0x1185*/
break; /*0x1185*/
v2 = v6; /*0x1187*/
if ( *v6 != 1414353751 ) /*0x1191*/
(*(void (__fastcall **)(_DWORD *))(BootServices + 72))(v6); /*0x119d*/
++v0; /*0x11a0*/
if ( *v2 == 1414353751 ) /*0x11a9*/
goto LABEL_8; /*0x11a9*/
}
DebugPrint(64, "FindAcpiTable - Table not Found!!!\n"); /*0x11b9*/
LABEL_8:
DebugPrint(64, "WSMT table search. Status = %r\n", Table); /*0x11be*/
if ( Table >= 0 ) /*0x11da*/
{
v3 = AcpiRemoveTable(&psub_D3C, v12); /*0x11e7*/
if ( v3 < 0 ) /*0x11ef*/
DebugPrint(0x80000000LL, "Can not uninstall WSMT table. Status = %r\n", v3); /*0x11fd*/
}
AcpiConfig_4(1414353751, (unsigned __int64)&RsdtBase, 4u); /*0x1211*/
v8 = 1; /*0x121c*/
HIDWORD(RsdtBase) = 40; /*0x1224*/
n65555 = 65555; /*0x122c*/
n7 = 7; /*0x123a*/
result = AcpiInstallTable(&psub_D3C, &RsdtBase, 40, &v12); /*0x1241*/
v5 = result; /*0x1246*/
if ( result < 0 ) /*0x124c*/
{
DebugPrint(0x80000000LL, "Can not not install WSMT table. Status = %r\n", result); /*0x125b*/
DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", v5); /*0x126d*/
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiCore.c", 945, (__int64)"!EFI_ERROR (Status)"); /*0x1285*/
return v5; /*0x128a*/
}
return result; /*0x1292*/
}
// Function: AcpiCoreEntryPoint @ 0x129c (0x321 bytes)
__int64 __fastcall AcpiCoreEntryPoint(__int64 ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
{
__int64 StartStatus; // rbx
__int64 result; // rax
__int64 ContextPtr; // rax
__int64 NotifyStatus; // rbx
__int64 ErrLine1054; // rdx
__int64 InstallStatus; // rax
__int64 PublishStatus; // rax
__int64 NotifyStatus_1; // rax
__int64 ImageHandle_1; // [rsp+60h] [rbp+8h] BYREF
char NotifyTag; // [rsp+70h] [rbp+18h] BYREF
ImageHandle_1 = ImageHandle; /*0x129c*/
if ( !::SystemTable ) /*0x12b1*/
{
::SystemTable = (__int64)SystemTable; /*0x12b3*/
BootServices = (__int64)SystemTable->BootServices; /*0x12be*/
RuntimeServices = (__int64)SystemTable->RuntimeServices; /*0x12c9*/
}
DriverEntryPoint_0(ImageHandle, SystemTable); /*0x12d0*/
StartStatus = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(BootServices + 320))( /*0x12ff*/
&unk_71E0,
0,
&ImageHandle_1);
DebugPrint(64, "IN ACPI Start: %r\n", StartStatus);
if ( StartStatus >= 0 ) /*0x130a*/
return 0x8000000000000014uLL; /*0x1316*/
result = AcpiCoreInitialize(); /*0x131b*/
if ( result >= 0 ) /*0x1323*/
{
ContextPtr = AllocateZeroPool(80); /*0x132e*/
::ContextPtr = ContextPtr; /*0x1333*/
if ( ContextPtr ) /*0x133d*/
{
NotifyStatus = (*(__int64 (__fastcall **)(__int64, __int64, signed __int64 (__fastcall *)(__int64, __int64), __int64, void *, char *))(BootServices + 368))( /*0x1382*/
512,
8,
AcpiCollectAmlInfo,
ContextPtr,
&unk_8630,
&NotifyTag);
if ( NotifyStatus >= 0 ) /*0x1388*/
{
qword_86E4 = 0; /*0x13a8*/
psub_4A4 = (__int64)AcpiGetTable; /*0x13b7*/
psub_5AC = (__int64)AcpiProcessTable; /*0x13c5*/
psub_C74 = (__int64)AcpiCoreNotify; /*0x13d3*/
psub_D3C = (__int64)AcpiInstallTable; /*0x13e1*/
psub_E3C = (__int64)AcpiRemoveTable; /*0x13ef*/
psub_E8C = (__int64)AcpiGetTableEx; /*0x13fd*/
psub_EC0 = (__int64)AcpiFindTableInList; /*0x140b*/
psub_17D4 = (__int64)AcpiSdtOpenTable; /*0x1419*/
psub_16CC = (__int64)AcpiCreateSdtHandle; /*0x1427*/
psub_1814 = (__int64)AcpiFreeAmlNode; /*0x1435*/
psub_1A88 = (__int64)AcpiConfig_13; /*0x1443*/
psub_1888 = (__int64)AcpiConfig_7; /*0x1451*/
psub_1994 = (__int64)AcpiConfig_8; /*0x145f*/
psub_1C48 = (__int64)AcpiConfig_6; /*0x146d*/
n126 = 126; /*0x1474*/
AcpiFindFvTables(); /*0x147e*/
InstallStatus = (*(__int64 (__fastcall **)(__int64 *, void *, __int64 *, void *, __int64 *, void *, int *, _QWORD))(BootServices + 328))( /*0x14d0*/
&qword_86E4,
&unk_71E0,
&psub_4A4,
&unk_71A0,
&psub_D3C,
&unk_71B0,
&n126,
0);
if ( InstallStatus < 0 ) /*0x14de*/
{
DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", InstallStatus); /*0x14ec*/
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiCore.c", 1043, (__int64)"!EFI_ERROR (Status)"); /*0x1504*/
}
PublishStatus = AcpiPublishTables(1u, AcpiTablesPublished == 0); /*0x151c*/
if ( PublishStatus < 0 ) /*0x1524*/
{
DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", PublishStatus); /*0x1533*/
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiCore.c", 1046, (__int64)"!EFI_ERROR (Status)"); /*0x154b*/
}
NotifyStatus_1 = (*(__int64 (__fastcall **)(__int64, __int64, signed __int64 (*)()))(BootServices + 368))( /*0x1579*/
512,
8,
AssertCpuDeadLoop);
NotifyStatus = NotifyStatus_1; /*0x157f*/
if ( NotifyStatus_1 >= 0 ) /*0x1585*/
return NotifyStatus; /*0x1585*/
DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", NotifyStatus_1); /*0x1594*/
ErrLine1054 = 1054; /*0x1599*/
LABEL_16:
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiCore.c", ErrLine1054, (__int64)"!EFI_ERROR (Status)"); /*0x159e*/
return NotifyStatus; /*0x15b1*/
}
}
else
{
NotifyStatus = 0x8000000000000009uLL; /*0x133f*/
}
DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", NotifyStatus); /*0x1399*/
ErrLine1054 = 1007; /*0x139e*/
goto LABEL_16; /*0x13a3*/
}
return result; /*0x15b4*/
}
// Function: AcpiConfig_20 @ 0x15c0 (0x3c bytes)
__int64 __fastcall AcpiConfig_20(unsigned __int64 a1)
{
__int64 v1; // rdx
unsigned __int64 v2; // r8
v1 = 0; /*0x15c7*/
if ( !j_0 ) /*0x15cc*/
return 0; /*0x15f5*/
while ( 1 ) /*0x15d9*/
{
v2 = **(_QWORD **)(AcpiTableList + 8 * v1); /*0x15d9*/
if ( v2 <= a1 && v2 + *(unsigned int *)(v2 + 4) > a1 ) /*0x15eb*/
break; /*0x15eb*/
if ( ++v1 >= (unsigned __int64)j_0 ) /*0x15f3*/
return 0; /*0x15f3*/
}
return **(_QWORD **)(AcpiTableList + 8 * v1); /*0x15f7*/
}
// Function: AcpiConfig_14 @ 0x15fc (0xcd bytes)
unsigned __int64 __fastcall AcpiConfig_14(__int64 a1, __int64 *a2)
{
__int64 v2; // r8
_DWORD **v5; // rax
_DWORD *v6; // rbx
__int64 v7; // rax
__int64 v8; // rcx
__int64 v9; // rax
v2 = 0; /*0x160d*/
if ( j_0 ) /*0x161d*/
{
while ( a1 != **(_QWORD **)(AcpiTableList + 8 * v2) ) /*0x1626*/
{
if ( ++v2 >= (unsigned __int64)j_0 ) /*0x162e*/
goto LABEL_4; /*0x162e*/
}
}
else
{
LABEL_4:
v2 = -1; /*0x1630*/
}
if ( v2 == -1 ) /*0x1638*/
return 0x800000000000000EuLL; /*0x1638*/
v5 = *(_DWORD ***)(AcpiTableList + 8 * v2); /*0x1646*/
v6 = *v5; /*0x164a*/
if ( **v5 != 1413763908 && *v6 != 1413763923 ) /*0x165b*/
return 0x800000000000000EuLL; /*0x163a*/
v7 = AllocateZeroPool(48); /*0x1662*/
v8 = v7; /*0x1667*/
if ( v7 ) /*0x166d*/
{
*(_DWORD *)v7 = 1213350213; /*0x1693*/
*(_QWORD *)(v7 + 8) = v6 + 9; /*0x169d*/
v9 = (unsigned int)v6[1]; /*0x16a1*/
*(_QWORD *)(v8 + 24) = 0; /*0x16a4*/
*(_QWORD *)(v8 + 16) = v9 - 36; /*0x16ad*/
*(_BYTE *)(v8 + 40) = 0; /*0x16b3*/
*(_QWORD *)(v8 + 32) = v6; /*0x16b7*/
*a2 = v8; /*0x16bb*/
return 0; /*0x16b1*/
}
else
{
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiSdt.c", 135, (__int64)"AmlHandle != ((void *) 0)"); /*0x1682*/
return 0x8000000000000009uLL; /*0x1687*/
}
}
// Function: AcpiCreateSdtHandle @ 0x16cc (0x15 bytes)
unsigned __int64 __fastcall AcpiCreateSdtHandle(__int64 a1, __int64 *a2)
{
if ( a2 ) /*0x16cf*/
return AcpiConfig_14(a1, a2); /*0x16dc*/
else
return 0x8000000000000002uLL; /*0x16d1*/
}
// Function: AcpiConfig_9 @ 0x16e4 (0xed bytes)
unsigned __int64 __fastcall AcpiConfig_9(char *n6, unsigned __int64 a2, __int64 *a3)
{
char *v6; // rax
__int64 v7; // rdi
__int64 v9; // rbx
__int64 v10; // rax
unsigned __int64 v11; // rcx
unsigned __int64 v12; // [rsp+78h] [rbp+20h] BYREF
v6 = AmlGetOpcodeInfo(n6); /*0x1705*/
v7 = (__int64)v6; /*0x170d*/
if ( !v6 || (v6[32] & 2) != 0 ) /*0x1728*/
return 0x8000000000000002uLL; /*0x1728*/
v9 = AllocatePool(48); /*0x1734*/
if ( !v9 ) /*0x173a*/
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiSdt.c", 217, (__int64)"AmlHandle != ((void *) 0)"); /*0x174f*/
*(_DWORD *)v9 = 1397244229; /*0x1759*/
*(_QWORD *)(v9 + 8) = n6; /*0x177b*/
*(_QWORD *)(v9 + 24) = v7; /*0x177f*/
*(_BYTE *)(v9 + 40) = 0; /*0x1783*/
v10 = AcpiConfig(v7, n6, a2, 0xFFFFFFFF, 0, 0, &v12); /*0x1787*/
v11 = v12; /*0x178c*/
if ( v10 < 0 ) /*0x1794*/
v11 = 0; /*0x1794*/
*(_QWORD *)(v9 + 16) = v11; /*0x1798*/
if ( !v11 ) /*0x179f*/
{
(*(void (__fastcall **)(__int64))(BootServices + 72))(v9); /*0x17ab*/
return 0x8000000000000002uLL; /*0x171f*/
}
*a3 = v9; /*0x17b3*/
return 0; /*0x17c7*/
}
// Function: AcpiSdtOpenTable @ 0x17d4 (0x3f bytes)
unsigned __int64 __fastcall AcpiSdtOpenTable(unsigned __int64 a1, __int64 a2)
{
__int64 v2; // rax
_BYTE *v3; // rcx
__int64 *v4; // r11
if ( a1 && a2 && (v2 = AcpiConfig_20(a1)) != 0 ) /*0x17ed*/
return AcpiConfig_9(v3, v2 + *(unsigned int *)(v2 + 4) - (_QWORD)v3, v4); /*0x17ff*/
else
return 0x8000000000000002uLL; /*0x1804*/
}
// Function: AcpiFreeAmlNode @ 0x1814 (0x74 bytes)
unsigned __int64 __fastcall AcpiFreeAmlNode(__int64 a1)
{
__int64 v1; // r11
__int64 v3; // rax
char v4; // cl
unsigned __int64 v5; // rdx
v1 = a1; /*0x1818*/
if ( !a1 || *(_DWORD *)a1 != 1213350213 && *(_DWORD *)a1 != 1397244229 ) /*0x183a*/
return 0x8000000000000002uLL; /*0x183a*/
if ( *(_BYTE *)(a1 + 40) ) /*0x183c*/
{
v3 = AcpiConfig_20(*(_QWORD *)(a1 + 8)); /*0x1846*/
if ( v3 ) /*0x184e*/
{
v4 = *(_BYTE *)v3; /*0x1850*/
v5 = 1; /*0x1852*/
*(_BYTE *)(v3 + 9) = 0; /*0x1857*/
if ( *(_DWORD *)(v3 + 4) > 1u ) /*0x185e*/
{
do /*0x186d*/
{
v4 += *(_BYTE *)(v5 + v3); /*0x1864*/
++v5; /*0x1867*/
}
while ( v5 < *(unsigned int *)(v3 + 4) ); /*0x186d*/
}
*(_BYTE *)(v3 + 9) = -v4; /*0x1871*/
goto LABEL_10; /*0x1871*/
}
return 0x8000000000000002uLL; /*0x182a*/
}
LABEL_10:
(*(void (__fastcall **)(__int64))(BootServices + 72))(v1); /*0x1874*/
return 0; /*0x1883*/
}
// Function: AcpiConfig_7 @ 0x1888 (0x10a bytes)
__int64 __fastcall AcpiConfig_7(__int64 a1, unsigned __int64 i, _DWORD *a3, char **a4, unsigned __int64 *a5)
{
__int64 v5; // rbx
__int64 v11; // rcx
v5 = 0; /*0x18a0*/
if ( !a3 ) /*0x18b1*/
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiSdt.c", 350, (__int64)"DataType != ((void *) 0)"); /*0x18c6*/
if ( !a4 ) /*0x18ce*/
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiSdt.c", 351, (__int64)"Data != ((void *) 0)"); /*0x18e3*/
if ( !a5 ) /*0x18f3*/
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiSdt.c", 352, (__int64)"DataSize != ((void *) 0)"); /*0x1908*/
if ( !a1 || *(_DWORD *)a1 != 1397244229 || !AcpiConfig_20(*(_QWORD *)(a1 + 8)) ) /*0x192a*/
return 0x8000000000000002uLL; /*0x1912*/
v11 = *(_QWORD *)(a1 + 24); /*0x1934*/
if ( i <= *(unsigned int *)(v11 + 4) ) /*0x193e*/
{
if ( (AcpiConfig(v11, *(char **)(a1 + 8), *(_QWORD *)(a1 + 16), i, a3, a4, a5) & 0x8000000000000000uLL) != 0LL ) /*0x1972*/
return 0x8000000000000002uLL; /*0x1972*/
return v5; /*0x1976*/
}
else
{
*a3 = 0; /*0x1940*/
return 0; /*0x1942*/
}
}
// Function: AcpiConfig_8 @ 0x1994 (0xf3 bytes)
unsigned __int64 __fastcall AcpiConfig_8(__int64 a1, unsigned __int64 i, __int64 a3, unsigned __int64 a4)
{
__int64 v9; // rcx
unsigned __int64 v10; // [rsp+40h] [rbp-18h] BYREF
char *v11; // [rsp+48h] [rbp-10h] BYREF
int v12; // [rsp+60h] [rbp+8h] BYREF
if ( !a3 ) /*0x19b7*/
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiSdt.c", 420, (__int64)"Data != ((void *) 0)"); /*0x19cc*/
if ( !a1 ) /*0x19d4*/
return 0x8000000000000002uLL; /*0x19d4*/
if ( *(_DWORD *)a1 != 1397244229 ) /*0x19eb*/
return 0x8000000000000002uLL; /*0x19eb*/
if ( !AcpiConfig_20(*(_QWORD *)(a1 + 8)) ) /*0x19f1*/
return 0x8000000000000002uLL; /*0x19f1*/
v9 = *(_QWORD *)(a1 + 24); /*0x19fb*/
if ( i > *(unsigned int *)(v9 + 4) /*0x1a3f*/
|| (AcpiConfig(v9, *(char **)(a1 + 8), *(_QWORD *)(a1 + 16), i, &v12, &v11, &v10) & 0x8000000000000000uLL) != 0LL
|| !v12 )
{
return 0x8000000000000002uLL; /*0x19d6*/
}
if ( a4 > v10 ) /*0x1a46*/
return 0x8000000000000004uLL; /*0x1a48*/
(*(void (__fastcall **)(char *, __int64, unsigned __int64))(BootServices + 352))(v11, a3, a4); /*0x1a66*/
*(_BYTE *)(a1 + 40) = 1; /*0x1a6e*/
return 0; /*0x1a81*/
}
// Function: AcpiConfig_13 @ 0x1a88 (0xd4 bytes)
unsigned __int64 __fastcall AcpiConfig_13(_QWORD *a1, __int64 *a2)
{
char *n6_1; // rcx
_QWORD *v5; // r11
__int64 v6; // rax
char *n6; // [rsp+30h] [rbp+8h] BYREF
if ( !a2 ) /*0x1a9b*/
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiSdt.c", 495, (__int64)"Handle != ((void *) 0)"); /*0x1ab0*/
if ( !a1 || *a2 && *(_DWORD *)*a2 != 1397244229 || !AcpiConfig_20(a1[1]) ) /*0x1ad3*/
return 0x8000000000000002uLL; /*0x1adb*/
if ( *(_DWORD *)a1 == 1213350213 ) /*0x1ae3*/
{
if ( v5 ) /*0x1ae8*/
n6_1 = (char *)(v5[1] + v5[2]); /*0x1aee*/
v6 = AmlGetFirstChild((__int64)a1, n6_1, &n6); /*0x1afd*/
}
else
{
if ( *(_DWORD *)a1 != 1397244229 ) /*0x1b0a*/
return 0x8000000000000002uLL; /*0x1b47*/
v6 = AmlFindNextChild(a1, v5, &n6); /*0x1b17*/
}
if ( v6 < 0 ) /*0x1b1f*/
return 0x8000000000000002uLL; /*0x1b1f*/
if ( n6 ) /*0x1b29*/
return AcpiConfig_9(n6, a1[1] + a1[2] - (_QWORD)n6, a2); /*0x1b40*/
*a2 = 0; /*0x1b2b*/
return 0; /*0x1b56*/
}
// Function: AcpiConfig_10 @ 0x1b5c (0xeb bytes)
unsigned __int64 __fastcall AcpiConfig_10(_QWORD *a1, _BYTE *j, __int64 *a3)
{
_QWORD *v5; // rbp
__int64 v6; // rbx
__int64 v8; // rbx
__int64 v9; // [rsp+40h] [rbp+8h] BYREF
char *n6; // [rsp+48h] [rbp+10h] BYREF
n6 = 0; /*0x1b68*/
v5 = a1; /*0x1b77*/
if ( *(_WORD *)j == 92 ) /*0x1b7a*/
{
v6 = AllocatePool(48); /*0x1b8e*/
if ( !v6 ) /*0x1b94*/
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiSdt.c", 599, (__int64)"DstAmlHandle != ((void *) 0)"); /*0x1ba9*/
(*(void (__fastcall **)(__int64, _QWORD *, __int64))(BootServices + 352))(v6, v5, 48); /*0x1bbe*/
*a3 = v6; /*0x1bc5*/
return 0; /*0x1bc8*/
}
else
{
v9 = 0; /*0x1bcc*/
while ( (AcpiConfig_13(a1, &v9) & 0x8000000000000000uLL) == 0LL ) /*0x1bd7*/
{
v8 = v9; /*0x1be1*/
if ( !v9 ) /*0x1be9*/
{
*a3 = 0; /*0x1c2a*/
return 0; /*0x1c2e*/
}
if ( (AcpiConfig_3(v9, j, (__int64 *)&n6, 1) & 0x8000000000000000uLL) != 0LL ) /*0x1c01*/
break; /*0x1c01*/
if ( n6 /*0x1c23*/
&& (AcpiConfig_9(n6, *(_QWORD *)(v8 + 8) + *(_QWORD *)(v8 + 16) - (_QWORD)n6, a3) & 0x8000000000000000uLL) == 0LL )
{
return 0; /*0x1c23*/
}
a1 = v5; /*0x1c25*/
}
return 0x8000000000000002uLL; /*0x1c30*/
}
}
// Function: AcpiConfig_6 @ 0x1c48 (0x110 bytes)
unsigned __int64 __fastcall AcpiConfig_6(_QWORD *a1, __int64 a2, __int64 *a3)
{
unsigned __int64 v3; // rbx
char *v7; // r11
int *j; // rsi
unsigned __int64 v9; // rax
char *n6; // [rsp+30h] [rbp+8h] BYREF
v3 = 0; /*0x1c5d*/
if ( !a1 ) /*0x1c6b*/
return 0x8000000000000002uLL; /*0x1c6b*/
if ( !AcpiConfig_20(a1[1]) ) /*0x1c80*/
return 0x8000000000000002uLL; /*0x1c80*/
j = AcpiConfig_1(v7); /*0x1c92*/
if ( !j ) /*0x1c98*/
return 0x8000000000000002uLL; /*0x1c77*/
DebugPrint(64, "AcpiSdt: FindPath - ");
AmlDebugPrintPath((unsigned __int8 *)j); /*0x1cae*/
DebugPrint(64, "\n"); /*0x1cbf*/
if ( *(_DWORD *)a1 == 1213350213 ) /*0x1cca*/
{
v9 = AcpiConfig_10(a1, j, a3); /*0x1cd5*/
LABEL_12:
v3 = v9; /*0x1d23*/
goto LABEL_14; /*0x1d26*/
}
if ( *(_DWORD *)a1 != 1397244229 /*0x1cff*/
|| (n6 = 0, (AcpiConfig_3((__int64)a1, j, (__int64 *)&n6, 0) & 0x8000000000000000uLL) != 0LL) )
{
v3 = 0x8000000000000002uLL; /*0x1d28*/
goto LABEL_14; /*0x1d28*/
}
if ( n6 ) /*0x1d09*/
{
v9 = AcpiConfig_9(n6, a1[1] + a1[2] - (_QWORD)n6, a3); /*0x1d1e*/
goto LABEL_12; /*0x1d1e*/
}
*a3 = 0; /*0x1d0b*/
LABEL_14:
(*(void (__fastcall **)(int *))(BootServices + 72))(j); /*0x1d32*/
return v3; /*0x1d51*/
}
// Function: AmlGetFirstChild @ 0x1d58 (0xa9 bytes)
unsigned __int64 __fastcall AmlGetFirstChild(__int64 a1, char *n6, char **p_n6)
{
char *n6_1; // rbx
bool i; // cf
char *v7; // rax
__int64 v8; // r10
unsigned __int64 v10; // [rsp+50h] [rbp+8h] BYREF
n6_1 = n6; /*0x1d72*/
for ( i = (unsigned __int64)n6 < *(_QWORD *)(a1 + 16) + *(_QWORD *)(a1 + 8); /*0x1d75*/
i;
i = (unsigned __int64)n6_1 < *(_QWORD *)(a1 + 16) + *(_QWORD *)(a1 + 8) )
{
v7 = AmlGetOpcodeInfo(n6_1); /*0x1d80*/
if ( !v7 ) /*0x1d88*/
return 0x8000000000000002uLL; /*0x1d88*/
if ( (v7[32] & 2) == 0 ) /*0x1d8e*/
{
*p_n6 = n6_1; /*0x1dda*/
return 0; /*0x1ddd*/
}
if ( (AcpiConfig((__int64)v7, n6_1, v8 - (_QWORD)n6_1, 0xFFFFFFFF, 0, 0, &v10) & 0x8000000000000000uLL) != 0LL /*0x1dc8*/
|| !v10 )
{
return 0x8000000000000002uLL; /*0x1de9*/
}
n6_1 += v10; /*0x1dce*/
}
*p_n6 = 0; /*0x1deb*/
return 0; /*0x1dfb*/
}
// Function: AmlFindNextChild @ 0x1e04 (0x121 bytes)
__int64 __fastcall AmlFindNextChild(_QWORD *a1, _QWORD *a2, char **p_n6)
{
__int64 v3; // rbx
_QWORD *v4; // rbp
unsigned int v7; // r15d
unsigned int i; // r14d
char *v9; // rax
__int64 v10; // rax
unsigned __int64 p_n6a_2; // rcx
char *p_n6a_1; // rdx
char *p_n6a; // [rsp+70h] [rbp+8h] BYREF
char *v15; // [rsp+78h] [rbp+10h] BYREF
unsigned __int64 v16; // [rsp+88h] [rbp+20h] BYREF
v3 = 0; /*0x1e18*/
v4 = a1; /*0x1e1d*/
if ( a2 ) /*0x1e26*/
v4 = a2; /*0x1e26*/
v7 = *(_DWORD *)(a1[3] + 4LL); /*0x1e2a*/
i = 1; /*0x1e2e*/
if ( !v7 ) /*0x1e35*/
{
LABEL_9:
*p_n6 = 0; /*0x1e91*/
LABEL_10:
v10 = a1[3]; /*0x1e94*/
p_n6a = 0; /*0x1e98*/
if ( (*(_BYTE *)(v10 + 32) & 4) != 0 ) /*0x1ea1*/
{
if ( AmlGetSiblingTail((__int64)a1, &p_n6a) < 0 ) /*0x1ed0*/
return 0x8000000000000002uLL; /*0x1edc*/
p_n6a_2 = v4[1]; /*0x1ede*/
p_n6a_1 = p_n6a; /*0x1ee2*/
if ( p_n6a_2 < (unsigned __int64)p_n6a ) /*0x1eea*/
return AmlGetFirstChild((__int64)a1, p_n6a_1, p_n6); /*0x1eea*/
p_n6a_1 = (char *)(p_n6a_2 + v4[2]); /*0x1ef4*/
if ( (unsigned __int64)p_n6a_1 < a1[1] + a1[2] ) /*0x1efe*/
return AmlGetFirstChild((__int64)a1, p_n6a_1, p_n6); /*0x1f0b*/
}
*p_n6 = 0; /*0x1ea3*/
return v3; /*0x1f0e*/
}
while ( 1 ) /*0x1e37*/
{
if ( (AcpiConfig(a1[3], (char *)a1[1], a1[2], i, &p_n6a, &v15, &v16) & 0x8000000000000000uLL) != 0LL ) /*0x1e6f*/
return 0x8000000000000002uLL; /*0x1ebe*/
if ( !(_DWORD)p_n6a ) /*0x1e75*/
goto LABEL_9; /*0x1e75*/
if ( (_DWORD)p_n6a == 6 ) /*0x1e7c*/
{
v9 = v15; /*0x1e7e*/
if ( v4[1] < (unsigned __int64)v15 ) /*0x1e87*/
break; /*0x1e87*/
}
if ( ++i > v7 ) /*0x1e8f*/
goto LABEL_9; /*0x1e8f*/
}
*p_n6 = v15; /*0x1ea8*/
if ( !v9 ) /*0x1eae*/
goto LABEL_10; /*0x1eae*/
return 0; /*0x1f19*/
}
// Function: AmlGetOpcodeInfo @ 0x1f28 (0x45 bytes)
char *__fastcall AmlGetOpcodeInfo(char *n6)
{
char v1; // r8
__int64 v2; // rax
char v3; // dl
unsigned __int64 n0x141C; // rcx
v1 = *n6; /*0x1f28*/
v2 = 0; /*0x1f2b*/
if ( *n6 == 91 ) /*0x1f31*/
v3 = n6[1]; /*0x1f33*/
else
v3 = 0; /*0x1f38*/
n0x141C = 0; /*0x1f3a*/
while ( byte_71F0[n0x141C] != v1 || byte_71F0[n0x141C + 1] != v3 ) /*0x1f4f*/
{
++v2; /*0x1f51*/
n0x141C += 36LL; /*0x1f54*/
if ( n0x141C >= 0x141C ) /*0x1f5f*/
return 0; /*0x1f63*/
}
return &byte_71F0[36 * v2]; /*0x1f63*/
}
// Function: AmlDecodeLength @ 0x1f70 (0x69 bytes)
__int64 __fastcall AmlDecodeLength(unsigned __int8 *a1, unsigned __int64 *a2)
{
unsigned __int64 v2; // r8
int v3; // r9d
__int64 v4; // r10
int v5; // r9d
int v6; // r9d
__int64 v7; // r8
unsigned __int64 v8; // r8
v2 = 0; /*0x1f74*/
v3 = *a1 >> 6; /*0x1f77*/
v4 = (unsigned int)(v3 + 1); /*0x1f7b*/
if ( !v3 ) /*0x1f82*/
{
v2 = *a1; /*0x1fce*/
goto LABEL_11; /*0x1fce*/
}
v5 = v3 - 1; /*0x1f84*/
if ( !v5 ) /*0x1f88*/
{
v8 = a1[1]; /*0x1fba*/
goto LABEL_9; /*0x1fba*/
}
v6 = v5 - 1; /*0x1f8a*/
if ( !v6 ) /*0x1f8e*/
{
v7 = a1[2]; /*0x1fa8*/
goto LABEL_7; /*0x1fa8*/
}
if ( v6 == 1 ) /*0x1f94*/
{
v7 = *((unsigned __int16 *)a1 + 1); /*0x1fa3*/
LABEL_7:
v8 = a1[1] | (unsigned __int64)(v7 << 8); /*0x1fad*/
LABEL_9:
v2 = *a1 & 0xF | (16 * v8); /*0x1fbf*/
}
LABEL_11:
*a2 = v2; /*0x1fd2*/
return v4; /*0x1fd8*/
}
// Function: AmlParseNamespacePath @ 0x1fdc (0xd4 bytes)
unsigned __int64 __fastcall AmlParseNamespacePath(_BYTE *n6, __int64 *a2)
{
__int64 v2; // r9
__int64 v4; // r8
unsigned __int64 n2; // r10
unsigned __int8 *v6; // rcx
__int64 v7; // rdx
unsigned __int8 n0x2F; // al
__int64 v9; // rbx
v2 = 0; /*0x1fe6*/
v4 = 0; /*0x1fef*/
switch ( *n6 ) /*0x1ff6*/
{
case '\\': /*0x1ff6*/
++n6; /*0x1ff8*/
v4 = 1; /*0x1ffb*/
break;
case '.': /*0x1ff6*/
++n6; /*0x2010*/
n2 = 2; /*0x2013*/
++v4; /*0x2019*/
LABEL_14:
if ( *n6 == 95 || (unsigned __int8)(*n6 - 65) <= 0x19u ) /*0x2059*/
{
v7 = 1; /*0x205b*/
while ( 1 ) /*0x2061*/
{
n0x2F = n6[v7] - 48; /*0x2061*/
if ( n0x2F > 0x2Fu ) /*0x2065*/
break; /*0x2065*/
v9 = 0x87FFFFFE03FFLL; /*0x206b*/
if ( !_bittest64(&v9, (char)n0x2F) ) /*0x2075*/
break; /*0x2075*/
if ( (unsigned __int64)++v7 >= 4 ) /*0x2082*/
{
n6 += 4; /*0x2084*/
v4 += 4; /*0x2088*/
if ( ++v2 < n2 ) /*0x2092*/
goto LABEL_14; /*0x2092*/
*a2 = v4; /*0x2094*/
return 0; /*0x2094*/
}
}
}
return 0x8000000000000002uLL; /*0x2079*/
case '/': /*0x1ff6*/
v6 = n6 + 1; /*0x2023*/
n2 = *v6; /*0x2026*/
n6 = v6 + 1; /*0x202a*/
v4 += 2; /*0x202d*/
goto LABEL_14; /*0x2031*/
default:
while ( *n6 == 94 ) /*0x2009*/
{
++n6; /*0x2000*/
++v4; /*0x2003*/
}
break;
}
if ( *n6 ) /*0x2033*/
{
n2 = 1; /*0x204c*/
goto LABEL_14; /*0x204c*/
}
if ( v4 != 1 || *(n6 - 1) != 92 ) /*0x2041*/
return 0x8000000000000002uLL; /*0x209b*/
*a2 = 2; /*0x2043*/
return 0; /*0x20af*/
}
// Function: AmlParseNameSegment @ 0x20b0 (0x87 bytes)
__int64 __fastcall AmlParseNameSegment(_BYTE *a1)
{
__int64 v2; // rdx
unsigned __int8 n0x39; // al
__int64 v4; // r8
__int64 v5; // r9
_BYTE *v6; // rcx
char v7; // r8
__int64 v8; // r10
char n46; // al
if ( !*a1 ) /*0x20b0*/
return 0; /*0x20b5*/
v2 = 0; /*0x20ba*/
n0x39 = *a1 - 65; /*0x20bc*/
if ( n0x39 <= 0x39u ) /*0x20c4*/
{
v4 = 0x3FFFFFF43FFFFFFLL; /*0x20ca*/
if ( _bittest64(&v4, (char)n0x39) ) /*0x20d4*/
{
v2 = 1; /*0x20da*/
++a1; /*0x20dd*/
}
}
if ( *a1 && *a1 != 46 ) /*0x20e8*/
{
v5 = 0; /*0x20ea*/
v6 = &a1[-v2]; /*0x20ed*/
while ( 1 ) /*0x20f0*/
{
v7 = v6[v2]; /*0x20f0*/
if ( (unsigned __int8)(v7 - 48) <= 0x2Fu && (v8 = 0x87FFFFFE03FFLL, _bittest64(&v8, (char)(v7 - 48))) /*0x2118*/
|| (unsigned __int8)(v7 - 97) <= 0x19u )
{
++v2; /*0x211a*/
}
n46 = v6[v2]; /*0x211d*/
if ( !n46 || n46 == 46 ) /*0x2126*/
break; /*0x2126*/
if ( (unsigned __int64)++v5 >= 3 ) /*0x212f*/
return 0; /*0x212f*/
}
}
return v2; /*0x20b7*/
}
// Function: AcpiConfig_1 @ 0x2138 (0x1cb bytes)
int *__fastcall AcpiConfig_1(char *a1)
{
unsigned __int64 n0xFF; // rsi
__int64 v2; // r12
unsigned __int64 n4_1; // r15
char *v4; // rdi
char *v5; // rbx
unsigned __int64 n4; // rax
char *v7; // rbx
unsigned __int64 v8; // rax
unsigned __int64 v9; // rbp
int value; // r8d
int *buf; // r14
int *buf_1; // rbx
__int64 v14; // rsi
signed __int64 value_1; // r8
char *v16; // rcx
__int64 v17; // r9
char v18; // dl
char *v19; // rdi
n0xFF = 0; /*0x2155*/
v2 = 0; /*0x2157*/
n4_1 = 0; /*0x215a*/
v4 = a1; /*0x215d*/
v5 = a1; /*0x2163*/
if ( *a1 == 92 ) /*0x2169*/
{
v2 = 1; /*0x216b*/
v5 = a1 + 1; /*0x216e*/
}
else if ( *a1 == 94 ) /*0x2177*/
{
do /*0x2182*/
{
++v5; /*0x2179*/
++n4_1; /*0x217c*/
}
while ( *v5 == 94 ); /*0x2182*/
}
if ( *v5 ) /*0x2184*/
{
while ( 1 ) /*0x218c*/
{
n4 = AmlParseNameSegment(v5); /*0x218c*/
if ( !n4 || n4 > 4 ) /*0x219a*/
return 0; /*0x219a*/
v7 = &v5[n4]; /*0x219c*/
++n0xFF; /*0x219f*/
if ( *v7 ) /*0x21a2*/
{
v5 = v7 + 1; /*0x21a7*/
if ( *v5 ) /*0x21aa*/
continue; /*0x21aa*/
}
if ( n0xFF > 0xFF ) /*0x21b6*/
return 0; /*0x21b6*/
break; /*0x21b6*/
}
}
v8 = n4_1 + v2 + 4 * n0xFF; /*0x21b8*/
if ( n0xFF <= 2 ) /*0x21c3*/
{
if ( n0xFF == 2 ) /*0x21cb*/
++v8; /*0x21cd*/
}
else
{
v8 += 2LL; /*0x21c5*/
}
v9 = v8 + 1; /*0x21d0*/
if ( v8 == -1 ) /*0x21d7*/
return 0; /*0x21db*/
buf = (int *)AllocatePool(v8 + 1); /*0x21e8*/
if ( !buf ) /*0x21ee*/
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AmlString.c", 422, (__int64)"AmlPath != ((void *) 0)"); /*0x2203*/
buf_1 = buf; /*0x2208*/
if ( v2 == 1 ) /*0x220f*/
{
*(_BYTE *)buf = 92; /*0x2211*/
buf_1 = (int *)((char *)buf + 1); /*0x2215*/
++v4; /*0x2219*/
}
else if ( n4_1 ) /*0x2221*/
{
LOBYTE(value) = 94; /*0x2223*/
SetMem(buf, n4_1, value); /*0x222c*/
v4 += n4_1; /*0x2231*/
buf_1 = (int *)((char *)buf + n4_1); /*0x2234*/
}
if ( n0xFF <= 2 ) /*0x223c*/
{
if ( n0xFF == 2 ) /*0x224e*/
{
*(_BYTE *)buf_1 = 46; /*0x2254*/
buf_1 = (int *)((char *)buf_1 + 1); /*0x2257*/
}
}
else
{
*(_BYTE *)buf_1 = 47; /*0x223e*/
*((_BYTE *)buf_1 + 1) = n0xFF; /*0x2241*/
buf_1 = (int *)((char *)buf_1 + 2); /*0x2245*/
}
while ( *v4 ) /*0x22d6*/
{
v14 = AmlParseNameSegment(v4); /*0x2264*/
if ( (unsigned __int64)(v14 - 1) > 3 ) /*0x226f*/
AssertWithProtocol( /*0x2284*/
(__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AmlString.c",
458,
(__int64)"(NameLength != 0) && (NameLength <= 4)");
if ( v14 ) /*0x228c*/
{
v16 = v4; /*0x2291*/
value_1 = (char *)buf_1 - v4; /*0x2294*/
v17 = v14; /*0x2297*/
do /*0x22b1*/
{
v18 = *v16; /*0x229a*/
if ( (unsigned __int8)(*v16 - 97) <= 0x19u ) /*0x22a1*/
v18 -= 32; /*0x22a3*/
(v16++)[value_1] = v18; /*0x22a6*/
--v17; /*0x22ad*/
}
while ( v17 ); /*0x22b1*/
}
LOBYTE(value_1) = 95; /*0x22bf*/
SetMem((int *)((char *)buf_1 + v14), 4 - v14, value_1); /*0x22c2*/
v19 = &v4[v14]; /*0x22c7*/
++buf_1; /*0x22ca*/
if ( !*v19 ) /*0x22ce*/
break; /*0x22ce*/
v4 = v19 + 1; /*0x22d3*/
}
*((_BYTE *)buf + v9 - 1) = 0; /*0x22db*/
return buf; /*0x22f8*/
}
// Function: AmlDebugPrintNameSeg @ 0x2304 (0x8f bytes)
__int64 __fastcall AmlDebugPrintNameSeg(unsigned __int8 *j)
{
__int64 result; // rax
result = DebugPrint(64, "%c", *j); /*0x2323*/
if ( *(_WORD *)(j + 1) != 24415 || j[3] != 95 ) /*0x2338*/
{
result = DebugPrint(64, "%c", j[1]); /*0x2349*/
if ( j[2] != 95 || j[3] != 95 ) /*0x2358*/
{
result = DebugPrint(64, "%c", j[2]); /*0x2369*/
if ( j[3] != 95 ) /*0x2372*/
return DebugPrint(64, "%c", j[3]); /*0x2383*/
}
}
return result; /*0x238d*/
}
// Function: AmlDebugPrintPath @ 0x2394 (0xc7 bytes)
__int64 __fastcall AmlDebugPrintPath(unsigned __int8 *j)
{
unsigned __int8 *j_1; // rbx
__int64 result; // rax
unsigned __int8 v3; // si
unsigned __int8 n2; // di
unsigned __int8 *j_2; // rbx
int v6; // edi
j_1 = j; /*0x23ab*/
if ( *j == 92 ) /*0x23b3*/
{
j_1 = j + 1; /*0x23b5*/
result = DebugPrint(64, "\\"); /*0x23c1*/
}
else if ( *j == 94 ) /*0x23cb*/
{
do /*0x23e2*/
{
++j_1; /*0x23d7*/
result = DebugPrint(64, "^"); /*0x23da*/
}
while ( *j_1 == 94 ); /*0x23e2*/
}
v3 = 0; /*0x23e4*/
switch ( *j_1 ) /*0x23e9*/
{
case 0x2Eu: /*0x23e9*/
++j_1; /*0x23eb*/
n2 = 2; /*0x23ee*/
break;
case 0x2Fu: /*0x23e9*/
n2 = j_1[1]; /*0x23f8*/
j_1 += 2; /*0x23fc*/
break;
case 0u: /*0x23e9*/
return result; /*0x2405*/
default:
n2 = 1; /*0x2407*/
break;
}
result = AmlDebugPrintNameSeg(j_1); /*0x240d*/
j_2 = j_1 + 4; /*0x2416*/
v6 = n2 - 1; /*0x241a*/
if ( v6 > 0 ) /*0x241e*/
{
do /*0x2444*/
{
DebugPrint(64, "."); /*0x242a*/
AmlDebugPrintNameSeg(j_2); /*0x2432*/
++v3; /*0x2437*/
j_2 += 4; /*0x243a*/
result = v3; /*0x243e*/
}
while ( v3 < v6 ); /*0x2444*/
}
return result; /*0x2455*/
}
// Function: AcpiConfig_0 @ 0x245c (0x1f3 bytes)
__int64 __fastcall AcpiConfig_0(
__int64 a1,
char *n6,
unsigned __int64 a3,
unsigned int i,
_DWORD *a5,
char **a6,
__int64 *a7)
{
_DWORD *v7; // rbx
__int64 n9; // rax
int v13; // eax
char *v14; // rax
int v15; // r10d
__int64 *v16; // rbx
__int64 v18; // rax
_DWORD *v19; // rcx
__int64 v20; // rax
v7 = a5; /*0x2474*/
if ( a5 ) /*0x248e*/
{
n9 = *(unsigned int *)(a1 + 4LL * (i - 1) + 8); /*0x2494*/
if ( (unsigned int)n9 < 9 ) /*0x249b*/
{
v13 = dword_6460[n9]; /*0x24c1*/
}
else
{
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\Aml.c", 250, (__int64)"((BOOLEAN)(0==1))"); /*0x24b0*/
v13 = 0; /*0x24b5*/
}
*v7 = v13; /*0x24c4*/
}
if ( a6 ) /*0x24d1*/
*a6 = n6; /*0x24d3*/
switch ( *(_DWORD *)(a1 + 4LL * (i - 1) + 8) ) /*0x24e6*/
{
case 2: /*0x24e6*/
v16 = a7; /*0x2614*/
*a7 = 1; /*0x261c*/
return -(__int64)(a3 < *v16) & 0x8000000000000002uLL; /*0x261c*/
case 3: /*0x24e6*/
v16 = a7; /*0x2607*/
*a7 = 2; /*0x260f*/
return -(__int64)(a3 < *v16) & 0x8000000000000002uLL; /*0x2612*/
case 4: /*0x24e6*/
v16 = a7; /*0x25f6*/
*a7 = 4; /*0x25fe*/
return -(__int64)(a3 < *v16) & 0x8000000000000002uLL; /*0x2605*/
case 5: /*0x24e6*/
v16 = a7; /*0x25e5*/
*a7 = 8; /*0x25ed*/
return -(__int64)(a3 < *v16) & 0x8000000000000002uLL; /*0x25f4*/
}
if ( *(_DWORD *)(a1 + 4LL * (i - 1) + 8) != 6 ) /*0x250a*/
{
if ( *(_DWORD *)(a1 + 4LL * (i - 1) + 8) == 7 ) /*0x250f*/
{
v20 = 0; /*0x25c4*/
if ( *n6 ) /*0x25c7*/
{
do /*0x25cf*/
++v20; /*0x25cc*/
while ( n6[v20] ); /*0x25cf*/
}
v16 = a7; /*0x25d5*/
*a7 = v20 + 1; /*0x25e0*/
return -(__int64)(a3 < *v16) & 0x8000000000000002uLL; /*0x25e3*/
}
if ( *(_DWORD *)(a1 + 4LL * (i - 1) + 8) != 8 ) /*0x2518*/
{
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AmlOption.c", 137, (__int64)"((BOOLEAN)(0==1))"); /*0x252d*/
return 0x8000000000000002uLL; /*0x2575*/
}
v14 = AmlGetOpcodeInfo(n6); /*0x2537*/
if ( !v14 ) /*0x253f*/
return 0x8000000000000002uLL; /*0x253f*/
if ( ((unsigned __int8)v15 & (unsigned __int8)v14[32]) == 0 ) /*0x2545*/
{
v18 = AcpiConfig((__int64)v14, n6, a3, 0xFFFFFFFF, 0, 0, (unsigned __int64 *)&a5); /*0x259e*/
v19 = a5; /*0x25a3*/
v16 = a7; /*0x25ae*/
if ( v18 < 0 ) /*0x25b6*/
v19 = 0; /*0x25b6*/
*a7 = (__int64)v19; /*0x25ba*/
if ( !v19 ) /*0x25c0*/
return 0x8000000000000002uLL; /*0x25c0*/
return -(__int64)(a3 < *v16) & 0x8000000000000002uLL; /*0x25c0*/
}
if ( v7 ) /*0x254a*/
*v7 = v15; /*0x254c*/
}
v16 = a7; /*0x254f*/
if ( (AmlParseNamespacePath(n6, a7) & 0x8000000000000000uLL) != 0LL ) /*0x2565*/
return 0x8000000000000002uLL; /*0x2565*/
return -(__int64)(a3 < *v16) & 0x8000000000000002uLL; /*0x2645*/
}
// Function: AcpiConfig @ 0x2650 (0x1f9 bytes)
unsigned __int64 __fastcall AcpiConfig(
__int64 a1,
char *n6,
unsigned __int64 a3,
unsigned int i,
_DWORD *a5,
char **a6,
unsigned __int64 *a7)
{
unsigned __int64 *v12; // rbx
char **v13; // r11
__int64 *v14; // r13
unsigned __int64 v15; // r14
__int64 v16; // rax
char *n6_1; // rbx
unsigned int j; // r12d
unsigned __int64 v19; // [rsp+70h] [rbp+8h] BYREF
if ( i > *(_DWORD *)(a1 + 4) && i != -1 ) /*0x2684*/
AssertWithProtocol( /*0x2699*/
(__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AmlOption.c",
180,
(__int64)"(Index <= AmlByteEncoding->MaxIndex) || (Index == (AML_OP_PARSE_INDEX)-1)");
if ( (*(_BYTE *)(a1 + 32) & 2) != 0 ) /*0x26a6*/
{
if ( i == -1 ) /*0x26aa*/
{
v12 = a7; /*0x26bb*/
if ( (AmlParseNamespacePath(n6, (__int64 *)a7) & 0x8000000000000000uLL) == 0LL ) /*0x26d1*/
return -(__int64)(a3 < *v12) & 0x8000000000000002uLL; /*0x26e6*/
}
return 0x8000000000000002uLL; /*0x26b6*/
}
v13 = a6; /*0x26eb*/
if ( i != -1 ) /*0x26f5*/
{
*a5 = 1; /*0x26ff*/
*v13 = n6; /*0x2705*/
}
v14 = (__int64 *)a7; /*0x2708*/
v15 = (*n6 == 91) + 1LL; /*0x271a*/
*a7 = v15; /*0x271d*/
if ( i ) /*0x2723*/
{
if ( v15 > a3 ) /*0x272c*/
return 0x8000000000000002uLL; /*0x272c*/
if ( (*(_BYTE *)(a1 + 32) & 1) != 0 ) /*0x273b*/
{
v16 = AmlDecodeLength((unsigned __int8 *)&n6[v15], &v19); /*0x2745*/
if ( v15 + v19 > a3 ) /*0x275b*/
return 0x8000000000000002uLL; /*0x275b*/
a3 = v15 + v19; /*0x2761*/
}
else
{
v16 = 0; /*0x2766*/
v19 = 0; /*0x2768*/
}
n6_1 = &n6[v15 + v16]; /*0x276d*/
for ( j = 1; i >= j && j <= *(_DWORD *)(a1 + 4) && n6_1 < &n6[a3]; ++j ) /*0x2770*/
{
if ( AcpiConfig_0(a1, n6_1, a3 + n6 - n6_1, j, a5, v13, v14) < 0 ) /*0x27b8*/
return 0x8000000000000002uLL; /*0x27b8*/
if ( i == j ) /*0x27c1*/
return 0; /*0x27c1*/
n6_1 += *v14; /*0x27c3*/
v13 = a6; /*0x27c7*/
}
if ( n6_1 > &n6[a3] ) /*0x27de*/
return 0x8000000000000002uLL; /*0x27de*/
if ( n6_1 == &n6[a3] ) /*0x27e4*/
{
if ( i != -1 ) /*0x27e9*/
return 0x8000000000000002uLL; /*0x27e9*/
}
else if ( i != -1 ) /*0x27f3*/
{
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AmlOption.c", 297, (__int64)"Index == (AML_OP_PARSE_INDEX)-1"); /*0x2808*/
}
if ( (*(_BYTE *)(a1 + 32) & 1) != 0 ) /*0x2812*/
*v14 = v15 + v19; /*0x281c*/
else
*v14 = n6_1 - n6; /*0x2825*/
}
return 0; /*0x283c*/
}
// Function: AcpiConfig_16 @ 0x284c (0xca bytes)
char *__fastcall AcpiConfig_16(__int64 a1)
{
__int64 v1; // rdi
unsigned int i; // ebx
__int64 v4; // rcx
int n2; // [rsp+60h] [rbp+8h] BYREF
char *v7; // [rsp+68h] [rbp+10h] BYREF
unsigned __int64 v8; // [rsp+70h] [rbp+18h] BYREF
v1 = *(_QWORD *)(a1 + 24); /*0x2854*/
if ( (*(_DWORD *)(v1 + 32) & 0x10000) == 0 ) /*0x2862*/
AssertWithProtocol( /*0x2877*/
(__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AmlOption.c",
363,
(__int64)"(AmlByteEncoding->Attribute & 0x10000) != 0");
i = *(_DWORD *)(v1 + 4); /*0x287c*/
if ( !i ) /*0x2881*/
goto LABEL_7; /*0x2881*/
do /*0x2891*/
{
v4 = i - 1; /*0x2883*/
if ( *(_DWORD *)(v1 + 4 * v4 + 8) == 6 ) /*0x288b*/
break; /*0x288b*/
--i; /*0x288d*/
}
while ( (_DWORD)v4 ); /*0x2891*/
if ( !i ) /*0x2895*/
LABEL_7:
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AmlOption.c", 375, (__int64)"TermIndex != 0"); /*0x28aa*/
if ( (AcpiConfig(*(_QWORD *)(a1 + 24), *(char **)(a1 + 8), *(_QWORD *)(a1 + 16), i, &n2, &v7, &v8) /*0x28e4*/
& 0x8000000000000000uLL) != 0LL )
return 0; /*0x28e6*/
if ( n2 != 2 ) /*0x28ef*/
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AmlOption.c", 390, (__int64)"DataType == 2"); /*0x2904*/
return v7; /*0x290e*/
}
// Function: AmlGetSiblingTail @ 0x2918 (0x75 bytes)
__int64 __fastcall AmlGetSiblingTail(__int64 a1, char **p_n6)
{
unsigned __int8 *v4; // rcx
bool v5; // zf
int v6; // [rsp+50h] [rbp+8h] BYREF
unsigned __int64 v7; // [rsp+60h] [rbp+18h] BYREF
char *v8; // [rsp+68h] [rbp+20h] BYREF
if ( (AcpiConfig( /*0x2956*/
*(_QWORD *)(a1 + 24),
*(char **)(a1 + 8),
*(_QWORD *)(a1 + 16),
*(_DWORD *)(*(_QWORD *)(a1 + 24) + 4LL),
&v6,
&v8,
&v7)
& 0x8000000000000000uLL) != 0LL )
return 0x8000000000000002uLL; /*0x2958*/
v4 = (unsigned __int8 *)&v8[v7]; /*0x2969*/
v5 = v6 == 1; /*0x296e*/
*p_n6 = &v8[v7]; /*0x2973*/
if ( v5 ) /*0x2976*/
*p_n6 += AmlDecodeLength(v4, &v7); /*0x2982*/
return 0; /*0x2987*/
}
// Function: AcpiConfig_11 @ 0x2990 (0xdf bytes)
__int64 __fastcall AcpiConfig_11(__int16 *p_n92, __int64 i, __int64 a3)
{
__int64 v6; // rbx
__int64 BootServices; // rax
v6 = AllocatePool(72); /*0x29b7*/
if ( !v6 ) /*0x29bd*/
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AmlNamespace.c", 73, (__int64)"AmlNodeList != ((void *) 0)"); /*0x29d0*/
BootServices = BootServices; /*0x29d5*/
*(_DWORD *)v6 = 1280131397; /*0x29e6*/
(*(void (__fastcall **)(__int64, __int16 *, __int64))(BootServices + 352))(v6 + 4, p_n92, 4); /*0x29ef*/
*(_QWORD *)(v6 + 8) = 0; /*0x29f5*/
*(_QWORD *)(v6 + 16) = 0; /*0x29fe*/
if ( v6 == -24 ) /*0x2a06*/
AssertWithProtocol((__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\LinkedList.c", 193, (__int64)"ListHead != ((void *) 0)"); /*0x2a1b*/
*(_QWORD *)(v6 + 24) = v6 + 24; /*0x2a20*/
*(_QWORD *)(v6 + 32) = v6 + 24; /*0x2a23*/
if ( v6 == -40 ) /*0x2a2e*/
AssertWithProtocol((__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\LinkedList.c", 193, (__int64)"ListHead != ((void *) 0)"); /*0x2a43*/
*(_QWORD *)(v6 + 40) = v6 + 40; /*0x2a48*/
*(_QWORD *)(v6 + 48) = v6 + 40; /*0x2a4e*/
*(_QWORD *)(v6 + 56) = i; /*0x2a52*/
*(_QWORD *)(v6 + 64) = a3; /*0x2a5b*/
return v6; /*0x2a69*/
}
// Function: AcpiConfig_2 @ 0x2a70 (0x187 bytes)
__int64 __fastcall AcpiConfig_2(_BYTE *j, __int64 i, __int64 i_1, char a4)
{
_BYTE *j_1; // rbx
char n47; // al
unsigned __int8 n2; // bp
char v11; // r15
_QWORD *k; // rsi
__int64 k_1; // rdx
_BYTE *v14; // rcx
_BYTE *m; // r8
__int64 v16; // rax
__int64 i_2; // rax
_QWORD *v18; // rcx
j_1 = j; /*0x2a99*/
if ( *j == 92 ) /*0x2a9c*/
{
i_1 = i; /*0x2a9e*/
j_1 = j + 1; /*0x2aa1*/
}
else if ( *j == 94 ) /*0x2aa9*/
{
do /*0x2adc*/
{
if ( *(_QWORD *)(i_1 + 56) ) /*0x2aab*/
{
i_1 = *(_QWORD *)(i_1 + 56); /*0x2ab4*/
}
else if ( i_1 != i ) /*0x2abc*/
{
AssertWithProtocol( /*0x2ad1*/
(__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AmlNamespace.c",
182,
(__int64)"AmlCurrentNodeList == AmlRootNodeList");
}
++j_1; /*0x2ad6*/
}
while ( *j_1 == 94 ); /*0x2adc*/
}
n47 = *j_1; /*0x2ade*/
if ( *j_1 == 46 ) /*0x2ae2*/
{
++j_1; /*0x2ae4*/
n2 = 2; /*0x2ae7*/
goto LABEL_18; /*0x2aea*/
}
if ( n47 == 47 ) /*0x2aee*/
{
n2 = j_1[1]; /*0x2af0*/
j_1 += 2; /*0x2af4*/
goto LABEL_18; /*0x2af8*/
}
if ( n47 ) /*0x2afc*/
{
n2 = 1; /*0x2b23*/
LABEL_18:
v11 = 0; /*0x2b26*/
LABEL_19:
for ( k = *(_QWORD **)(i_1 + 40); k != (_QWORD *)(i_1 + 40); k = (_QWORD *)*k ) /*0x2b2d*/
{
k_1 = (__int64)(k - 3); /*0x2b32*/
if ( *((_DWORD *)k - 6) != 1280131397 ) /*0x2b3c*/
{
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AmlNamespace.c", 112, (__int64)"CR has Bad Signature"); /*0x2b51*/
k_1 = (__int64)k; /*0x2b56*/
}
v14 = (_BYTE *)(k_1 + 4); /*0x2b59*/
for ( m = j_1; ; ++m ) /*0x2b5d*/
{
if ( (unsigned __int64)v14 >= k_1 + 8 ) /*0x2b76*/
{
v16 = 0; /*0x2b78*/
goto LABEL_27; /*0x2b78*/
}
if ( *v14 != *m ) /*0x2b6b*/
break; /*0x2b6b*/
++v14; /*0x2b6d*/
}
v16 = (char)*v14 - (char)*m; /*0x2bcc*/
LABEL_27:
if ( !v16 ) /*0x2b7d*/
{
i_1 = k_1; /*0x2bd1*/
LABEL_32:
if ( i_1 ) /*0x2bac*/
{
j_1 += 4; /*0x2bae*/
if ( (unsigned __int8)++v11 < n2 ) /*0x2bb8*/
goto LABEL_19; /*0x2bb8*/
return i_1; /*0x2bb8*/
}
return 0; /*0x2bd6*/
}
}
if ( a4 ) /*0x2b8a*/
{
i_2 = AcpiConfig_11((__int16 *)j_1, i_1, 0); /*0x2b95*/
v18 = (_QWORD *)(i_1 + 40); /*0x2b9a*/
i_1 = i_2; /*0x2b9d*/
LinkedListInsertEntry(v18, (_QWORD *)(i_2 + 24)); /*0x2ba4*/
goto LABEL_32; /*0x2ba4*/
}
return 0; /*0x2b8a*/
}
if ( i_1 != i ) /*0x2b01*/
AssertWithProtocol( /*0x2b16*/
(__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AmlNamespace.c",
204,
(__int64)"AmlCurrentNodeList == AmlRootNodeList");
return i_1; /*0x2bec*/
}
// Function: AcpiConfig_15 @ 0x2bf8 (0xcc bytes)
_QWORD *__fastcall AcpiConfig_15(_BYTE *j, char *n6, __int64 a3, __int64 i, __int64 ia)
{
double v5; // xmm2_8
_QWORD *result; // rax
_QWORD *v9; // rbx
result = (_QWORD *)AcpiConfig_2(j, i, ia, 1); /*0x2c23*/
v9 = result; /*0x2c28*/
if ( !result ) /*0x2c2e*/
{
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AmlNamespace.c", 255, (__int64)"AmlNodeList != ((void *) 0)"); /*0x2c43*/
return 0; /*0x2cad*/
}
if ( result[1] )
{
if ( *n6 == 16 ) /*0x2c72*/
return result; /*0x2c72*/
DebugPrint(0x80000000LL, "AML: Override Happen - %a!\n", v5);
DebugPrint(0x80000000LL, "AML: Existing Node - %x\n", v9[1]);
DebugPrint(0x80000000LL, "AML: New Buffer - %x\n", (_DWORD)n6);
return 0; /*0x2ca8*/
}
if ( *n6 != 16 ) /*0x2c54*/
{
result[1] = n6; /*0x2c59*/
result[2] = a3; /*0x2c5d*/
result[8] = AmlGetOpcodeInfo(n6); /*0x2c66*/
}
return v9; /*0x2cbe*/
}
// Function: AmlProcessOverrides @ 0x2cc4 (0xbb bytes)
unsigned __int64 __fastcall AmlProcessOverrides(_QWORD *a1, __int64 i, __int64 i_1)
{
__int64 v3; // rax
__int64 v6; // rbp
__int64 v7; // r14
char *n6_1; // rbx
__int64 v10; // rdi
char *n6; // [rsp+50h] [rbp+8h] BYREF
__int64 v12; // [rsp+68h] [rbp+20h] BYREF
v3 = a1[3]; /*0x2cdb*/
n6 = 0; /*0x2ce2*/
v12 = 0; /*0x2cea*/
v6 = a1[1]; /*0x2cef*/
v7 = a1[2]; /*0x2cf7*/
if ( (*(_BYTE *)(v3 + 32) & 4) != 0 ) /*0x2cfb*/
{
if ( AmlGetSiblingTail((__int64)a1, &n6) < 0 ) /*0x2d09*/
return 0x8000000000000002uLL; /*0x2d15*/
n6_1 = n6; /*0x2d17*/
while ( (unsigned __int64)n6_1 < v7 + v6 ) /*0x2d64*/
{
if ( (AcpiConfig_9(n6_1, v6 + v7 - (_QWORD)n6_1, &v12) & 0x8000000000000000uLL) != 0LL ) /*0x2d3b*/
break; /*0x2d3b*/
v10 = v12; /*0x2d3d*/
if ( (AcpiConfig_19(v12, i, i_1) & 0x8000000000000000uLL) != 0LL ) /*0x2d53*/
break; /*0x2d53*/
n6_1 += *(_QWORD *)(v10 + 16); /*0x2d55*/
AcpiFreeAmlNode(v10); /*0x2d5c*/
}
}
return 0; /*0x2d72*/
}
// Function: AcpiConfig_19 @ 0x2d80 (0x95 bytes)
unsigned __int64 __fastcall AcpiConfig_19(__int64 a1, __int64 i, __int64 i_1)
{
char *j; // rax
_QWORD *i_2; // rsi
if ( (*(_DWORD *)(*(_QWORD *)(a1 + 24) + 32LL) & 0x10000) == 0 ) /*0x2da3*/
return 0; /*0x2da5*/
j = AcpiConfig_16(a1); /*0x2da9*/
if ( !j ) /*0x2db1*/
return 0x8000000000000002uLL; /*0x2db3*/
i_2 = AcpiConfig_15(j, *(char **)(a1 + 8), *(_QWORD *)(a1 + 16), i, i_1); /*0x2dd7*/
if ( !i_2 ) /*0x2ddd*/
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AmlNamespace.c", 433, (__int64)"AmlNodeList != ((void *) 0)"); /*0x2df2*/
return AmlProcessOverrides((_QWORD *)a1, i, (__int64)i_2); /*0x2e0f*/
}
// Function: AcpiGetInfo @ 0x2e18 (0x82 bytes)
__int64 __fastcall AcpiGetInfo(__int64 i)
{
_QWORD *i_3; // rsi
_QWORD *i_2; // rbx
__int64 i_1; // rdi
i_3 = (_QWORD *)(i + 40); /*0x2e2c*/
i_2 = *(_QWORD **)(i + 40); /*0x2e33*/
while ( i_2 != i_3 ) /*0x2e76*/
{
i_1 = (__int64)(i_2 - 3); /*0x2e38*/
if ( *((_DWORD *)i_2 - 6) != 1280131397 ) /*0x2e42*/
{
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AmlNamespace.c", 468, (__int64)"CR has Bad Signature"); /*0x2e57*/
i_1 = (__int64)i_2; /*0x2e5c*/
}
i_2 = (_QWORD *)*i_2; /*0x2e5f*/
LinkedListRemoveEntry((_QWORD *)(i_1 + 24)); /*0x2e66*/
AcpiGetInfo(i_1); /*0x2e6e*/
}
return (*(__int64 (__fastcall **)(__int64))(BootServices + 72))(i);
}
// Function: AcpiConfig_17 @ 0x2e9c (0xca bytes)
__int64 __fastcall AcpiConfig_17(__int64 i, __int64 a2)
{
_QWORD *i_3; // rbp
_QWORD *i_2; // rbx
__int64 v5; // rbp
__int64 result; // rax
__int64 i_1; // rcx
_QWORD *i_4; // [rsp+38h] [rbp+10h]
i_3 = (_QWORD *)(i + 40); /*0x2eb0*/
i_2 = *(_QWORD **)(i + 40); /*0x2eb7*/
i_4 = (_QWORD *)(i + 40); /*0x2ebe*/
if ( a2 ) /*0x2ec6*/
{
v5 = a2; /*0x2ede*/
do /*0x2ef6*/
{
DebugPrint(64, " "); /*0x2eed*/
--v5; /*0x2ef2*/
}
while ( v5 ); /*0x2ef6*/
i_3 = i_4; /*0x2ef8*/
AmlDebugPrintNameSeg((unsigned __int8 *)(i + 4)); /*0x2f06*/
}
else
{
DebugPrint(64, "\\"); /*0x2ed2*/
}
result = DebugPrint(64, "\n"); /*0x2f17*/
while ( i_2 != i_3 ) /*0x2f54*/
{
i_1 = (__int64)(i_2 - 3); /*0x2f1e*/
if ( *((_DWORD *)i_2 - 6) != 1280131397 ) /*0x2f28*/
{
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AmlNamespace.c", 515, (__int64)"CR has Bad Signature"); /*0x2f3d*/
i_1 = (__int64)i_2; /*0x2f42*/
}
result = AcpiConfig_17(i_1, a2 + 1); /*0x2f49*/
i_2 = (_QWORD *)*i_2; /*0x2f4e*/
}
return result; /*0x2f60*/
}
// Function: AcpiConfig_3 @ 0x2f68 (0x13e bytes)
unsigned __int64 __fastcall AcpiConfig_3(__int64 a1, _BYTE *j, __int64 *p_n6, char a4)
{
__int64 i; // rdi
__int64 i_1; // rbx
__int64 v11; // rcx
__int64 n6; // rax
__int16 n92; // [rsp+40h] [rbp+8h] BYREF
n92 = 92; /*0x2f83*/
i = AcpiConfig_11(&n92, 0, *(_QWORD *)(a1 + 24)); /*0x2faa*/
if ( (AcpiConfig_19(a1, i, i) & 0x8000000000000000uLL) != 0LL ) /*0x2fb5*/
return 0x8000000000000002uLL; /*0x2fb7*/
DebugPrint(64, "AcpiSdt: NameSpace:\n");
AcpiConfig_17(i, 0); /*0x2fe0*/
if ( a4 ) /*0x2fe8*/
{
i_1 = i; /*0x2fea*/
}
else
{
i_1 = *(_QWORD *)(i + 40); /*0x2ff3*/
if ( i_1 == i + 40 ) /*0x2ff9*/
{
i_1 = 0; /*0x3024*/
}
else if ( *(_DWORD *)(i_1 - 24) == 1280131397 ) /*0x3002*/
{
i_1 -= 24; /*0x301e*/
}
else
{
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AmlNamespace.c", 593, (__int64)"CR has Bad Signature"); /*0x3017*/
}
}
if ( i_1 )
{
DebugPrint(64, "AcpiSdt: Search from: \\");
AmlDebugPrintNameSeg((unsigned __int8 *)(i_1 + 4)); /*0x303e*/
DebugPrint(64, "\n"); /*0x304d*/
v11 = AcpiConfig_2(j, i, i_1, 0); /*0x3063*/
}
else
{
v11 = 0; /*0x3068*/
}
*p_n6 = 0; /*0x306a*/
if ( v11 ) /*0x3071*/
{
n6 = *p_n6; /*0x3073*/
if ( *(_QWORD *)(v11 + 8) ) /*0x3076*/
n6 = *(_QWORD *)(v11 + 8); /*0x307b*/
*p_n6 = n6; /*0x3080*/
}
AcpiGetInfo(i); /*0x3086*/
return 0; /*0x309c*/
}
// Function: LinkedListIsValid @ 0x30a8 (0x69 bytes)
char __fastcall LinkedListIsValid(_QWORD *a1)
{
if ( !a1 ) /*0x30b4*/
AssertWithProtocol((__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\LinkedList.c", 80, (__int64)"List != ((void *) 0)"); /*0x30c7*/
if ( !*a1 ) /*0x30cc*/
AssertWithProtocol( /*0x30e5*/
(__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\LinkedList.c",
81,
(__int64)"List->ForwardLink != ((void *) 0)");
if ( !a1[1] ) /*0x30ea*/
AssertWithProtocol((__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\LinkedList.c", 82, (__int64)"List->BackLink != ((void *) 0)"); /*0x3104*/
return 1; /*0x310b*/
}
// Function: LinkedListInsertEntry @ 0x3114 (0x51 bytes)
_QWORD *__fastcall LinkedListInsertEntry(_QWORD *a1, _QWORD *a2)
{
_QWORD *v4; // rax
if ( !LinkedListIsValid(a1) ) /*0x3124*/
AssertWithProtocol( /*0x3140*/
(__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\LinkedList.c",
273,
(__int64)"InternalBaseLibIsListValid (ListHead)");
*a2 = a1; /*0x3145*/
v4 = (_QWORD *)a1[1]; /*0x3148*/
a2[1] = v4; /*0x314c*/
*v4 = a2; /*0x3150*/
a1[1] = a2; /*0x3156*/
return a1; /*0x315f*/
}
// Function: LinkedListRemoveEntry @ 0x3168 (0x65 bytes)
__int64 __fastcall LinkedListRemoveEntry(_QWORD *a1)
{
if ( !LinkedListIsValid(a1) ) /*0x3171*/
AssertWithProtocol( /*0x318d*/
(__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\LinkedList.c",
416,
(__int64)"InternalBaseLibIsListValid (ListHead)");
if ( (_QWORD *)*a1 == a1 ) /*0x3195*/
AssertWithProtocol((__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\LinkedList.c", 600, (__int64)"!IsListEmpty (Entry)"); /*0x31aa*/
*(_QWORD *)(*a1 + 8LL) = a1[1]; /*0x31b6*/
*(_QWORD *)a1[1] = *a1; /*0x31c1*/
return *a1; /*0x31c7*/
}
// Function: GetReportStatusCodeProtocol @ 0x31d0 (0x7f bytes)
__int64 GetReportStatusCodeProtocol()
{
__int64 result; // rax
unsigned __int64 n0x10; // rbx
__int64 v2; // rax
__int64 v3; // rcx
result = qword_8780; /*0x31da*/
if ( !qword_8780 ) /*0x31e6*/
{
n0x10 = (*(__int64 (__fastcall **)(__int64))(qword_8768 + 24))(31); /*0x31ff*/
(*(void (__fastcall **)(unsigned __int64))(qword_8768 + 32))(n0x10); /*0x3202*/
if ( n0x10 <= 0x10 ) /*0x3209*/
{
v2 = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(qword_8768 + 320))(&unk_7140, 0, &qword_8780); /*0x3226*/
v3 = qword_8780; /*0x322c*/
if ( v2 < 0 ) /*0x3236*/
v3 = 0; /*0x3236*/
qword_8780 = v3; /*0x323a*/
return v3; /*0x3241*/
}
else
{
return 0; /*0x320b*/
}
}
return result; /*0x3249*/
}
// Function: DebugPrint @ 0x3250 (0x47 bytes)
__int64 DebugPrint(__int64 a1, const char *a2, ...)
{
__int64 result; // rax
__int64 (__fastcall **v4)(__int64, const char *, __int64 *); // r10
va_list va; // [rsp+40h] [rbp+18h] BYREF
va_start(va, a2);
result = GetReportStatusCodeProtocol(); /*0x3267*/
if ( result ) /*0x3272*/
{
result = GetDebugLevelFromCmos(); /*0x3274*/
if ( ((unsigned int)result & (unsigned int)a1) != 0 ) /*0x327f*/
return (*v4)(a1, a2, (__int64 *)va); /*0x328e*/
}
return result; /*0x3291*/
}
// Function: AssertWithProtocol @ 0x3298 (0x3e bytes)
__int64 __fastcall AssertWithProtocol(__int64 a1, __int64 a2, __int64 a3)
{
__int64 result; // rax
result = GetReportStatusCodeProtocol(); /*0x32b0*/
if ( result ) /*0x32b8*/
return (*(__int64 (__fastcall **)(__int64, __int64, __int64))(result + 8))(a1, a2, a3); /*0x32c3*/
return result; /*0x32d0*/
}
// Function: AssertCpuDeadLoop_1 @ 0x32d8 (0xd6 bytes)
__int64 __fastcall AssertCpuDeadLoop_1(__int64 ImageHandle)
{
__int64 result; // rax
__int64 SystemTable; // rdi
unsigned __int64 v3; // rbx
__int64 v4; // rsi
result = qword_8788; /*0x32e7*/
if ( !qword_8788 ) /*0x32f1*/
{
SystemTable = SystemTable_0; /*0x32f7*/
v3 = 0; /*0x32fe*/
qword_8788 = 0; /*0x3300*/
if ( *(_QWORD *)(SystemTable_0 + 104) ) /*0x3307*/
{
v4 = 0; /*0x330d*/
while ( !CompareGuid(ImageHandle, v4 + *(_QWORD *)(SystemTable + 112)) ) /*0x331d*/
{
++v3; /*0x331f*/
v4 += 24; /*0x3322*/
if ( v3 >= *(_QWORD *)(SystemTable + 104) ) /*0x332a*/
goto LABEL_6; /*0x332a*/
}
result = *(_QWORD *)(*(_QWORD *)(SystemTable + 112) + 24 * v3 + 16); /*0x33a0*/
qword_8788 = result; /*0x33a5*/
}
else
{
LABEL_6:
DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", 0x800000000000000EuLL); /*0x332c*/
AssertWithProtocol((__int64)"e:\\hs\\MdePkg\\Library\\DxeHobLib\\HobLib.c", 54, (__int64)"!EFI_ERROR (Status)"); /*0x335a*/
result = qword_8788; /*0x335f*/
}
if ( !result ) /*0x3369*/
{
AssertWithProtocol((__int64)"e:\\hs\\MdePkg\\Library\\DxeHobLib\\HobLib.c", 55, (__int64)"mHobList != ((void *) 0)"); /*0x337c*/
return qword_8788; /*0x3381*/
}
}
return result; /*0x3392*/
}
// Function: DriverEntryPoint @ 0x33b0 (0x88 bytes)
__int64 __fastcall DriverEntryPoint(__int64 ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
{
__int64 result; // rax
result = 0; /*0x33b4*/
if ( byte_8798 ) /*0x33bc*/
{
if ( qword_87A0 ) /*0x33c5*/
return result; /*0x33c5*/
if ( !byte_87A8 && qword_87C0 ) /*0x33d9*/
return (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(qword_87C0 + 208))(&unk_8620, 0, &qword_87A0); /*0x33ef*/
return 0x8000000000000003uLL; /*0x33d9*/
}
if ( !qword_87B0 ) /*0x340c*/
{
if ( byte_87A8 ) /*0x3414*/
return 0x8000000000000003uLL; /*0x3404*/
return (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(BootServices + 320))(&unk_8610, 0, &qword_87B0); /*0x342d*/
}
return result; /*0x3400*/
}
// Function: DriverEntryPoint_0 @ 0x3438 (0x72 bytes)
__int64 __fastcall DriverEntryPoint_0(__int64 ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
{
__int64 result; // rax
if ( byte_8798 ) /*0x3443*/
{
if ( qword_87A0 ) /*0x344f*/
return (*(__int64 (__fastcall **)(__int64, __int64, __int64))qword_87A0)(qword_87A0, 1, 50692096); /*0x3479*/
else
return 0x800000000000000EuLL; /*0x3451*/
}
else
{
result = DriverEntryPoint(ImageHandle, SystemTable); /*0x347d*/
if ( result >= 0 ) /*0x3485*/
return (*(__int64 (__fastcall **)(__int64, __int64, _QWORD))qword_87B0)(1, 50692096, 0); /*0x34a3*/
}
return result; /*0x34a5*/
}
// Function: AllocatePool @ 0x34ac (0x2b bytes)
__int64 __fastcall AllocatePool(__int64 a1)
{
__int64 v2; // [rsp+38h] [rbp+10h] BYREF
v2 = 0; /*0x34bc*/
(*(void (__fastcall **)(__int64, __int64, __int64 *))(BootServices + 64))(4, a1, &v2); /*0x34ca*/
return v2; /*0x34d2*/
}
// Function: AllocateZeroPool @ 0x34d8 (0x3e bytes)
__int64 __fastcall AllocateZeroPool(__int64 a1)
{
__int64 result; // rax
__int64 v3; // rbx
result = AllocatePool(a1); /*0x34e5*/
v3 = result; /*0x34ea*/
if ( result ) /*0x34f0*/
{
(*(void (__fastcall **)(__int64, __int64, _QWORD))(BootServices + 360))(result, a1, 0); /*0x3502*/
return v3; /*0x3508*/
}
return result; /*0x3510*/
}
// Function: ArrayGrow @ 0x3518 (0xa8 bytes)
unsigned __int64 __fastcall ArrayGrow(unsigned __int64 *a1)
{
__int64 v1; // rbx
unsigned __int64 n80; // rbx
__int64 v4; // rax
unsigned __int64 v5; // rsi
v1 = *a1; /*0x3527*/
if ( *a1 ) /*0x3527*/
{
if ( a1[2] ) /*0x3539*/
{
if ( (__int64)a1[1] <= v1 - 1 ) /*0x354e*/
return 0; /*0x354e*/
n80 = 8 * v1 + 80; /*0x3550*/
}
else
{
n80 = 8 * v1; /*0x3540*/
}
if ( !n80 ) /*0x355b*/
return 0; /*0x355b*/
}
else
{
n80 = 80; /*0x3532*/
}
v4 = AllocateZeroPool(n80); /*0x3560*/
v5 = v4; /*0x3565*/
if ( !v4 ) /*0x356b*/
return 0x8000000000000009uLL; /*0x3577*/
(*(void (__fastcall **)(__int64, unsigned __int64, unsigned __int64))(BootServices + 352))(v4, a1[2], 8 * a1[1]); /*0x358f*/
(*(void (__fastcall **)(unsigned __int64))(BootServices + 72))(a1[2]); /*0x35a0*/
*a1 = n80 >> 3; /*0x35a7*/
a1[2] = v5; /*0x35aa*/
return 0; /*0x35ba*/
}
// Function: SataGetInfo @ 0x35c0 (0x6f bytes)
unsigned __int64 __fastcall SataGetInfo(__int64 *p_AcpiTableHandleList, unsigned __int64 DataSize, char a3)
{
unsigned __int64 DataSize_1; // rdi
DataSize_1 = DataSize; /*0x35cf*/
if ( !p_AcpiTableHandleList[1] || p_AcpiTableHandleList[1] <= DataSize ) /*0x35db*/
return 0x8000000000000002uLL; /*0x361a*/
if ( a3 ) /*0x35e0*/
(*(void (__fastcall **)(_QWORD))(BootServices + 72))(*(_QWORD *)(p_AcpiTableHandleList[2] + 8 * DataSize)); /*0x35f1*/
while ( DataSize_1 < p_AcpiTableHandleList[1] - 1 ) /*0x3610*/
{
*(_QWORD *)(p_AcpiTableHandleList[2] + 8 * DataSize_1) = *(_QWORD *)(p_AcpiTableHandleList[2] + 8 * DataSize_1 + 8); /*0x35ff*/
++DataSize_1; /*0x3603*/
}
--p_AcpiTableHandleList[1]; /*0x3612*/
return 0; /*0x3629*/
}
// Function: TableHandleListAppend @ 0x3630 (0x43 bytes)
unsigned __int64 __fastcall TableHandleListAppend(__int64 a1, __int64 a2)
{
if ( ArrayGrow() < 0 ) /*0x3648*/
return 0x8000000000000009uLL; /*0x364a*/
*(_QWORD *)(*(_QWORD *)(a1 + 16) + 8LL * (*(_QWORD *)(a1 + 8))++) = a2; /*0x365e*/
return 0; /*0x366d*/
}
// Function: AmlHashName @ 0x3674 (0x6d bytes)
__int64 __fastcall AmlHashName(__int64 a1, const char *_S3, unsigned __int64 a3)
{
unsigned int v3; // ebx
unsigned __int64 NameCount; // r8
__int64 v7; // rcx
int p_n1600085855; // [rsp+30h] [rbp+8h] BYREF
v3 = 0; /*0x3683*/
NameCount = 0; /*0x368b*/
if ( *_S3 ) /*0x368e*/
{
do /*0x3695*/
++NameCount; /*0x3692*/
while ( _S3[NameCount] ); /*0x3695*/
}
p_n1600085855 = 1600085855; /*0x36a0*/
ComputeStringHash(&p_n1600085855, _S3, NameCount); /*0x36a8*/
if ( !a3 ) /*0x36b0*/
return 0; /*0x36ca*/
v7 = 0; /*0x36b6*/
while ( *(_DWORD *)(v7 + a1) != p_n1600085855 ) /*0x36bf*/
{
v7 = ++v3; /*0x36c3*/
if ( v3 >= a3 ) /*0x36c8*/
return 0; /*0x36c8*/
}
return v7 + a1; /*0x36d6*/
}
// Function: AmlParseNameInfo @ 0x36e4 (0x1ed bytes)
__int64 __fastcall AmlParseNameInfo(__int64 a1, unsigned __int64 a2, const char *_S3, int n3, __int64 *p_NameBuffer)
{
__int64 v9; // rax
__int64 v10; // rdi
__int64 n6; // r11
char n91; // dl
char n16; // r8
__int64 v14; // r10
__int64 v15; // rax
bool v16; // zf
__int64 *p_NameBuffer_1; // rcx
__int64 n2; // rax
_BYTE *v19; // r9
_BYTE *v20; // rcx
__int64 v21; // rax
unsigned __int8 v22; // al
__int64 v23; // rdx
__int64 v24; // rax
int v25; // eax
while ( 1 )
{
v9 = AmlHashName(a1, _S3, a2); /*0x3712*/
v10 = v9; /*0x3717*/
if ( !v9 ) /*0x371d*/
return 0x800000000000000EuLL; /*0x38ca*/
switch ( n3 ) /*0x3728*/
{
case 1: /*0x3728*/
n16 = 16; /*0x3799*/
goto LABEL_18; /*0x3799*/
case 3: /*0x3728*/
n16 = 8; /*0x3794*/
LABEL_18:
n6 = 0; /*0x379c*/
goto LABEL_19; /*0x379c*/
case 4: /*0x3728*/
n6 = 6; /*0x3787*/
n91 = 91; /*0x378d*/
n16 = -125; /*0x378f*/
break; /*0x3792*/
case 5: /*0x3728*/
n6 = 0; /*0x377d*/
n91 = 91; /*0x3780*/
n16 = -123; /*0x3782*/
break; /*0x3785*/
case 6: /*0x3728*/
n6 = 0; /*0x3773*/
n91 = 91; /*0x3776*/
n16 = -126; /*0x3778*/
break; /*0x377b*/
case 7: /*0x3728*/
n6 = 1; /*0x3768*/
n16 = 20; /*0x376e*/
LABEL_19:
n91 = 0; /*0x379f*/
break; /*0x379f*/
case 8: /*0x3728*/
n6 = 3; /*0x375b*/
n91 = 91; /*0x3761*/
n16 = -124; /*0x3763*/
break;
case 9: /*0x3728*/
n6 = 0; /*0x3751*/
n91 = 91; /*0x3754*/
n16 = 0x80; /*0x3756*/
break;
default:
return 0x800000000000000EuLL; /*0x374b*/
}
v14 = v9; /*0x37a1*/
if ( ((*(_BYTE *)(v9 - 1) - 92) & 0xFD) == 0 ) /*0x37ae*/
v14 = v9 - 1; /*0x37ae*/
if ( n16 == 8 ) /*0x37b6*/
{
if ( n91 ) /*0x37ba*/
goto LABEL_31; /*0x37ba*/
v15 = v14 - 1; /*0x37bc*/
v16 = *(_BYTE *)(v14 - 1) == 8; /*0x37c0*/
LABEL_25:
if ( v16 ) /*0x37c3*/
{
p_NameBuffer_1 = p_NameBuffer; /*0x37c5*/
*(__int64 *)((char *)p_NameBuffer + 28) = 0; /*0x37ca*/
*p_NameBuffer = v15; /*0x37cf*/
goto LABEL_53; /*0x37d2*/
}
goto LABEL_39; /*0x37c3*/
}
if ( n16 != (char)0x80 || !n91 )
{
LABEL_31:
n2 = 2; /*0x37ef*/
v19 = (_BYTE *)(v14 - 2); /*0x37f4*/
while ( 1 )
{
v20 = n91 ? v19 - 1 : 0LL;
if ( (!v20 || *v20 == n91) && *v19 == n16 ) /*0x3810*/
break; /*0x3810*/
++n2; /*0x3812*/
--v19; /*0x3815*/
if ( n2 >= 6 ) /*0x381c*/
goto LABEL_39; /*0x381c*/
}
v21 = (__int64)v19; /*0x3834*/
if ( v20 ) /*0x3837*/
v21 = (__int64)v20; /*0x3837*/
p_NameBuffer_1 = p_NameBuffer; /*0x383b*/
*p_NameBuffer = v21; /*0x3840*/
v22 = v19[1]; /*0x3843*/
if ( (v22 & 0xC0) == 0 ) /*0x384c*/
{
v23 = v22 & 0x3F; /*0x384e*/
goto LABEL_52; /*0x3851*/
}
v23 = v22 & 0xF; /*0x3857*/
switch ( v22 >> 6 ) /*0x3862*/
{
case 1: /*0x3862*/
v25 = (unsigned __int8)v19[2]; /*0x3885*/
break;
case 2: /*0x3862*/
v25 = *((unsigned __int16 *)v19 + 1); /*0x387e*/
break;
case 3: /*0x3862*/
v24 = 16 * (*(_DWORD *)(v19 + 2) & 0xFFFFFFu); /*0x3879*/
goto LABEL_51; /*0x387c*/
default:
goto LABEL_52; /*0x386e*/
}
v24 = 16 * v25; /*0x388d*/
LABEL_51:
v23 |= v24; /*0x388f*/
LABEL_52:
*(__int64 *)((char *)p_NameBuffer + 28) = v23; /*0x3892*/
LABEL_53:
p_NameBuffer_1[1] = v14; /*0x3896*/
*((_DWORD *)p_NameBuffer_1 + 6) = n3; /*0x38a1*/
p_NameBuffer_1[2] = n6 + v10 + 4; /*0x38a4*/
return 0; /*0x38aa*/
}
v15 = v14 - 2; /*0x37e1*/
if ( *(_BYTE *)(v14 - 2) == n91 ) /*0x37e7*/
{
v16 = *(_BYTE *)(v14 - 1) == (unsigned __int8)n16; /*0x37e9*/
goto LABEL_25; /*0x37ed*/
}
LABEL_39:
a2 += a1 - v10 + 4; /*0x381e*/
a1 = v10 + 4; /*0x3828*/
}
}
// Function: AmlWriteData @ 0x38d4 (0x73 bytes)
__int64 __fastcall AmlWriteData(__int64 a1, __int64 a2, __int64 a3, unsigned __int64 n2)
{
__int64 result; // rax
__int64 v6[2]; // [rsp+30h] [rbp-38h] BYREF
_BYTE *v7; // [rsp+40h] [rbp-28h]
result = AmlParseNameInfo(a1, a2, a3, 3, v6); /*0x38ed*/
if ( result >= 0 ) /*0x38f5*/
{
if ( *v7 <= 1u ) /*0x38ff*/
{
if ( n2 < 2 ) /*0x392f*/
{
*v7 = n2; /*0x393d*/
return 0; /*0x393d*/
}
}
else
{
switch ( *v7 ) /*0x3904*/
{
case 0xA: /*0x3904*/
v7[1] = n2; /*0x3926*/
return 0; /*0x3929*/
case 0xB: /*0x3904*/
*(_WORD *)(v7 + 1) = n2; /*0x3920*/
return 0; /*0x3924*/
case 0xC: /*0x3904*/
*(_DWORD *)(v7 + 1) = n2; /*0x391b*/
return 0; /*0x391e*/
case 0xE: /*0x3904*/
*(_QWORD *)(v7 + 1) = n2; /*0x3915*/
return 0; /*0x393f*/
}
}
return 0x8000000000000002uLL; /*0x3931*/
}
return result; /*0x3941*/
}
// Function: AcpiConfig_4 @ 0x3948 (0x11d bytes)
char __fastcall AcpiConfig_4(int n1413763908, unsigned __int64 RsdtBase, unsigned __int64 n2)
{
__int64 v4; // rax
_BYTE *v5; // rcx
__int64 n8; // rdx
*(_DWORD *)RsdtBase = n1413763908; /*0x3950*/
switch ( n1413763908 ) /*0x395a*/
{
case 1128878145: /*0x395a*/
*(_BYTE *)(RsdtBase + 8) = 4; /*0x3a36*/
*(_DWORD *)(RsdtBase + 32) = 65560; /*0x3a3a*/
break;
case 1346584902: /*0x395a*/
*(_BYTE *)(RsdtBase + 8) = 3; /*0x3a11*/
*(_DWORD *)(RsdtBase + 32) = 65558; /*0x3a15*/
if ( n2 > 2 ) /*0x3a20*/
{
*(_BYTE *)(RsdtBase + 8) = 4; /*0x3a26*/
*(_DWORD *)(RsdtBase + 32) = 65559; /*0x3a2a*/
}
goto LABEL_9; /*0x3a31*/
case 1380143187: /*0x395a*/
case 1413759813: /*0x395a*/
goto LABEL_8; /*0x3977*/
case 1413763922: /*0x395a*/
*(_BYTE *)(RsdtBase + 8) = 1; /*0x3a04*/
*(_DWORD *)(RsdtBase + 32) = 65556; /*0x3a08*/
*(_DWORD *)(RsdtBase + 28) = 1413894989; /*0x3a59*/
goto LABEL_10; /*0x3a60*/
case 1413763928: /*0x395a*/
*(_BYTE *)(RsdtBase + 8) = 1; /*0x39f7*/
*(_DWORD *)(RsdtBase + 32) = 65557; /*0x39fb*/
goto LABEL_9; /*0x3a02*/
case 1414742611: /*0x395a*/
LABEL_8:
*(_BYTE *)(RsdtBase + 8) = 1; /*0x3994*/
LABEL_9:
*(_DWORD *)(RsdtBase + 28) = 541674817; /*0x3998*/
LABEL_10:
*(_DWORD *)(RsdtBase + 32) = 65555; /*0x399f*/
*(_DWORD *)(RsdtBase + 24) = 17244169; /*0x39a6*/
goto LABEL_11; /*0x39a6*/
}
if ( n1413763908 != 1413763908 ) /*0x3a47*/
goto LABEL_9; /*0x3a47*/
LABEL_11:
v4 = AcpiProcessRsdtHandlers(RsdtBase); /*0x39ad*/
if ( v4 < 0 ) /*0x39b8*/
{
*(_DWORD *)(RsdtBase + 10) = 1330529612; /*0x39c7*/
v5 = (_BYTE *)(RsdtBase + 16); /*0x39ca*/
*(_WORD *)(RsdtBase + 14) = 20310; /*0x39d8*/
n8 = 8; /*0x39dc*/
do /*0x39ef*/
{
LOBYTE(v4) = v5[(_QWORD)&TableList - RsdtBase - 16]; /*0x39e1*/
*v5++ = v4; /*0x39e6*/
--n8; /*0x39eb*/
}
while ( n8 ); /*0x39ef*/
}
return v4; /*0x39f1*/
}
// Function: AcpiConfig_12 @ 0x3a68 (0xdc bytes)
__int64 __fastcall AcpiConfig_12(__int64 a1)
{
__int64 result; // rax
__int64 v3; // [rsp+30h] [rbp-28h] BYREF
__int64 v4; // [rsp+38h] [rbp-20h] BYREF
_BYTE v5[24]; // [rsp+40h] [rbp-18h] BYREF
__int64 v6; // [rsp+70h] [rbp+18h] BYREF
__int64 v7; // [rsp+78h] [rbp+20h]
v6 = 0; /*0x3a7a*/
if ( (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(BootServices + 320))(&unk_7180, 0, &v3) >= 0 )
{
result = (*(__int64 (__fastcall **)(__int64, _QWORD, _BYTE *, __int64 *))(v3 + 48))(v3, 0, v5, &v4); /*0x3b08*/
if ( result >= 0 )
{
*(_QWORD *)(FacsSize + 16) = v4; /*0x3b23*/
DebugPrint(64, "Acpi BuildFPDT: Cpu Protocol was found.\n");
return (*(__int64 (__fastcall **)(__int64))(BootServices + 112))(a1); /*0x3b3b*/
}
}
else
{
DebugPrint(0x80000000LL, "Acpi BuildFPDT: No Cpu Protocol was found.\n");
result = (*(__int64 (__fastcall **)(__int64, __int64, __int64 (__fastcall *)(_QWORD, _QWORD)))(BootServices + 80))( /*0x3acc*/
512,
8,
AcpiConfig_12);
if ( result >= 0 ) /*0x3ad2*/
return (*(__int64 (__fastcall **)(void *, __int64, __int64 *))(BootServices + 168))(&unk_7180, v7, &v6); /*0x3aec*/
}
return result; /*0x3b3e*/
}
// Function: AcpiCreateFacsTable @ 0x3b44 (0x2c9 bytes)
__int64 __fastcall AcpiCreateFacsTable(__int64 FacsSize, unsigned __int64 *FacsAllocResult)
{
__int64 FacsSize_2; // rcx
__int64 FreeStatus; // rax
__int64 AllocStatus; // rax
const char *_EFI_ERROR_(Status); // r8
__int64 ErrLine445; // rdx
__int64 TablePtr; // rax
_DWORD *FacsEntry; // rdi
_DWORD *FpdtEntry; // rsi
_DWORD *FacsEntry2; // rax
_DWORD *FacsSize_4; // rcx
unsigned __int64 TableBase; // rbx
char Checksum; // cl
unsigned __int64 ByteIdx; // rax
__int64 FpdtStatus; // rbx
__int64 FpdtStatus_1; // rax
__int64 VarSize4; // [rsp+30h] [rbp-10h] BYREF
__int64 FacsSize_1; // [rsp+80h] [rbp+40h] BYREF
__int64 FacsSize_3; // [rsp+90h] [rbp+50h] BYREF
__int64 FacsSize_5; // [rsp+98h] [rbp+58h] BYREF
FacsSize_1 = FacsSize; /*0x3b44*/
FacsSize_5 = 0; /*0x3b6b*/
VarSize4 = 4; /*0x3b7c*/
if ( (*(__int64 (__fastcall **)(__int64, __int64, __int64 *))(BootServices + 64))(6, 112, &FacsSize_1) < 0 ) /*0x3b86*/
return 0x8000000000000009uLL; /*0x3b86*/
FacsSize_2 = FacsSize_1; /*0x3b97*/
if ( (FacsSize_1 & 0xFFFFFFFF00000000uLL) != 0 ) /*0x3bb3*/
{
FacsSize_3 = 0xFFFFFFFFLL; /*0x3bbe*/
FreeStatus = (*(__int64 (**)(void))(BootServices + 72))(); /*0x3bc9*/
if ( FreeStatus < 0 ) /*0x3bcf*/
{
DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", FreeStatus); /*0x3bdd*/
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiBaseLib.c", 443, (__int64)"!EFI_ERROR (Status)"); /*0x3bf5*/
}
AllocStatus = (*(__int64 (__fastcall **)(__int64, __int64, __int64, __int64 *))(BootServices + 40))( /*0x3c10*/
1,
6,
1,
&FacsSize_3);
if ( AllocStatus < 0 ) /*0x3c16*/
{
DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", AllocStatus); /*0x3c25*/
_EFI_ERROR_(Status) = "!EFI_ERROR (Status)"; /*0x3c2a*/
ErrLine445 = 445; /*0x3c31*/
LABEL_8:
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiBaseLib.c", ErrLine445, (__int64)_EFI_ERROR_(Status)); /*0x3c36*/
return 0x8000000000000009uLL; /*0x3b92*/
}
FacsSize_2 = FacsSize_3; /*0x3c47*/
FacsSize_1 = FacsSize_3; /*0x3c4b*/
}
(*(void (__fastcall **)(__int64, __int64, _QWORD))(BootServices + 360))(FacsSize_2, 112, 0); /*0x3c5c*/
TablePtr = AllocateZeroPool(68); /*0x3c67*/
*FacsAllocResult = TablePtr; /*0x3c6c*/
if ( !TablePtr ) /*0x3c72*/
{
_EFI_ERROR_(Status) = "*TablPtr"; /*0x3c74*/
ErrLine445 = 457; /*0x3c7b*/
goto LABEL_8; /*0x3c80*/
}
::FacsSize = FacsSize_1; /*0x3c86*/
FacsEntry = (_DWORD *)(FacsSize_1 + 24); /*0x3c8d*/
FpdtEntry = (_DWORD *)(FacsSize_1 + 56); /*0x3c91*/
FacsEntry2 = (_DWORD *)(FacsSize_1 + 32); /*0x3c95*/
FacsSize_1 += 64; /*0x3c9d*/
FacsSize_4 = (_DWORD *)FacsSize_1; /*0x3c99*/
*FacsEntry = 1414542163; /*0x3ca1*/
FacsEntry[1] = 32; /*0x3ca7*/
*FacsEntry2 = 18350080; /*0x3cae*/
*FpdtEntry = 1414545990; /*0x3cb4*/
FpdtEntry[1] = 56; /*0x3cba*/
*FacsSize_4 = 36700162; /*0x3cc1*/
TableBase = *FacsAllocResult; /*0x3cc7*/
if ( TableBase ) /*0x3ccd*/
AcpiConfig_4(1413763142, TableBase, 4u); /*0x3cda*/
Checksum = *(_BYTE *)TableBase; /*0x3cdf*/
ByteIdx = 1; /*0x3ce1*/
*(_DWORD *)(TableBase + 4) = 68; /*0x3ce4*/
*(_BYTE *)(TableBase + 8) = 1; /*0x3ceb*/
*(_DWORD *)(TableBase + 36) = 17825793; /*0x3cef*/
*(_QWORD *)(TableBase + 44) = FacsEntry; /*0x3cf6*/
*(_DWORD *)(TableBase + 52) = 17825792; /*0x3cfa*/
*(_QWORD *)(TableBase + 60) = FpdtEntry; /*0x3d01*/
do /*0x3d0f*/
{
Checksum += *(_BYTE *)(ByteIdx + TableBase); /*0x3d05*/
++ByteIdx; /*0x3d08*/
}
while ( ByteIdx < 0x44 ); /*0x3d0f*/
*(_BYTE *)(TableBase + 9) = -Checksum; /*0x3d15*/
AcpiConfig_12(0); /*0x3d1a*/
*(_QWORD *)::FacsSize = *(_QWORD *)(TableBase + 44); /*0x3d49*/
*(_QWORD *)(::FacsSize + 8) = *(_QWORD *)(TableBase + 60); /*0x3d57*/
(*(void (__fastcall **)(const __int16 *, void *, __int64, __int64, __int64 *))(RuntimeServices + 88))( /*0x3d69*/
L"FPDT_Volatile",
&unk_71D0,
6,
4,
&::FacsSize);
FpdtStatus = (*(__int64 (__fastcall **)(const __int16 *, void *, _QWORD, __int64 *, __int64 *))(RuntimeServices + 72))( /*0x3d90*/
L"FPDT_Variable_NV",
&unk_71D0,
0,
&VarSize4,
&FacsSize_5);
if ( FpdtStatus < 0 || ::FacsSize != FacsSize_5 ) /*0x3da3*/
{
FpdtStatus_1 = (*(__int64 (__fastcall **)(const __int16 *, void *, __int64, __int64, __int64 *))(RuntimeServices + 88))( /*0x3dc4*/
L"FPDT_Variable_NV",
&unk_71D0,
3,
4,
&::FacsSize);
FpdtStatus = FpdtStatus_1; /*0x3dc7*/
if ( FpdtStatus_1 < 0 ) /*0x3dcd*/
{
DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", FpdtStatus_1); /*0x3dde*/
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiBaseLib.c", 527, (__int64)"!EFI_ERROR (Status)"); /*0x3df6*/
}
}
return FpdtStatus; /*0x3dfe*/
}
// Function: AcpiCreateTable @ 0x3e10 (0x23c bytes)
__int64 __fastcall AcpiCreateTable(unsigned __int64 TableType, unsigned __int64 *DsdtResult)
{
unsigned int TableSize; // esi
unsigned __int64 AllocPtr; // rax
unsigned __int64 AllocPtr_1; // rdi
char *TableBase; // rax
char Checksum; // cl
unsigned __int64 ByteIdx84; // rdx
unsigned __int64 TableSize_1; // rdx
if ( TableType > 4 ) /*0x3e36*/
return 0x8000000000000002uLL; /*0x3e38*/
TableSize = 276; /*0x3e4d*/
if ( TableType == 1 ) /*0x3e5b*/
TableSize = 132; /*0x3e5b*/
AllocPtr = AllocateZeroPool(TableSize); /*0x3e63*/
*DsdtResult = AllocPtr; /*0x3e6b*/
AllocPtr_1 = AllocPtr; /*0x3e6e*/
if ( AllocPtr ) /*0x3e74*/
{
if ( TableType == 1 ) /*0x3ea8*/
{
AcpiConfig_4(1346584902, AllocPtr, 2u); /*0x3eb0*/
*(_BYTE *)(AllocPtr_1 + 8) = 2; /*0x3eb5*/
}
else
{
AcpiConfig_4(1346584902, AllocPtr, TableType); /*0x3ebe*/
}
TableBase = (char *)*DsdtResult; /*0x3ec3*/
*((_DWORD *)TableBase + 11) = 590848; /*0x3ed0*/
*((_DWORD *)TableBase + 12) = 178; /*0x3edb*/
Checksum = *TableBase; /*0x3ee5*/
*((_QWORD *)TableBase + 10) = 1408; /*0x3eeb*/
*((_DWORD *)TableBase + 13) = 41376; /*0x3ef3*/
*((_QWORD *)TableBase + 7) = 1280; /*0x3efe*/
*((_QWORD *)TableBase + 8) = 1284; /*0x3f02*/
*((_DWORD *)TableBase + 18) = 1360; /*0x3f06*/
*((_DWORD *)TableBase + 19) = 1288; /*0x3f0a*/
*(_DWORD *)(TableBase + 90) = 2098177; /*0x3f0e*/
*(_DWORD *)(TableBase + 94) = 6619136; /*0x3f15*/
*((_WORD *)TableBase + 44) = 516; /*0x3f1c*/
*(_DWORD *)(TableBase + 98) = 67109865; /*0x3f22*/
*(_DWORD *)(TableBase + 102) = 65552; /*0x3f29*/
*((_WORD *)TableBase + 53) = 13; /*0x3f30*/
TableBase[108] = 50; /*0x3f36*/
*(_WORD *)(TableBase + 109) = 3; /*0x3f3a*/
*((_WORD *)TableBase + 58) = 2049; /*0x3f3e*/
TableBase[118] = 0; /*0x3f44*/
*((_QWORD *)TableBase + 15) = 3321; /*0x3f48*/
TableBase[128] = 6; /*0x3f50*/
*((_DWORD *)TableBase + 28) = 33957; /*0x3f57*/
if ( TableType == 1 ) /*0x3f61*/
{
*((_DWORD *)TableBase + 1) = 132; /*0x3f63*/
ByteIdx84 = 1; /*0x3f67*/
TableBase[9] = 0; /*0x3f6a*/
do /*0x3f77*/
Checksum += TableBase[ByteIdx84++]; /*0x3f6e*/
while ( ByteIdx84 < 0x84 ); /*0x3f77*/
}
else
{
*((_QWORD *)TableBase + 19) = 1280; /*0x3f7e*/
TableSize_1 = 1; /*0x3f85*/
*((_DWORD *)TableBase + 37) = 33562625; /*0x3f88*/
*((_DWORD *)TableBase + 43) = 33558529; /*0x3f92*/
*((_QWORD *)TableBase + 22) = 1284; /*0x3f9c*/
*((_DWORD *)TableBase + 40) = 0; /*0x3fa3*/
*(_QWORD *)(TableBase + 164) = 0; /*0x3faa*/
*((_DWORD *)TableBase + 46) = 0; /*0x3fb1*/
*(_QWORD *)(TableBase + 188) = 0; /*0x3fb8*/
*((_DWORD *)TableBase + 49) = 16779265; /*0x3fbf*/
*((_QWORD *)TableBase + 25) = 1360; /*0x3fc9*/
*((_DWORD *)TableBase + 52) = 50339841; /*0x3fd0*/
*(_QWORD *)(TableBase + 212) = 1288; /*0x3fda*/
*((_DWORD *)TableBase + 55) = 16842497; /*0x3fe1*/
*((_QWORD *)TableBase + 28) = 1408; /*0x3feb*/
*((_DWORD *)TableBase + 58) = 0; /*0x3ff2*/
*(_QWORD *)(TableBase + 236) = 0; /*0x3ff9*/
*(_WORD *)(TableBase + 129) = 0; /*0x4000*/
TableBase[131] = 2; /*0x4008*/
*((_WORD *)TableBase + 4) = 6; /*0x400f*/
for ( *((_DWORD *)TableBase + 1) = TableSize; TableSize_1 < TableSize; ++TableSize_1 ) /*0x401b*/
Checksum += TableBase[TableSize_1]; /*0x401d*/
}
TableBase[9] = -Checksum; /*0x402a*/
return 0; /*0x402d*/
}
else
{
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiBaseLib.c", 562, (__int64)"*TablPtr"); /*0x3e89*/
return 0x8000000000000009uLL; /*0x3e8e*/
}
}
// Function: AssertCpuDeadLoop_0 @ 0x404c (0x125 bytes)
__int64 __fastcall AssertCpuDeadLoop_0(char **p_DsdtData)
{
__int64 v2; // rax
__int64 v4; // rax
__int64 v5; // rcx
__int64 v6; // [rsp+38h] [rbp+10h] BYREF
v6 = 0xFFFFFFFFLL; /*0x405a*/
v2 = Assert(); /*0x405f*/
if ( v2 < 0 )
{
DebugPrint(0x80000000LL, "AcpiCore: No AmiBoardInfo Found: Status=%r\n", v2);
return 0x800000000000000EuLL; /*0x4087*/
}
AcpiData = (*(_DWORD *)(*(_QWORD *)(qword_8800 + 40) + 4LL) >> 12) /*0x40c0*/
+ (unsigned int)((*(_DWORD *)(*(_QWORD *)(qword_8800 + 40) + 4LL) & 0xFFF) != 0);
v4 = (*(__int64 (__fastcall **)(__int64, __int64, __int64, __int64 *))(BootServices + 40))(1, 4, AcpiData, &v6); /*0x40ca*/
if ( v4 < 0 ) /*0x40d0*/
{
DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", v4); /*0x40e1*/
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiBaseLib.c", 1417, (__int64)"!EFI_ERROR (Status)"); /*0x40f9*/
AcpiData = 0; /*0x40fe*/
return 0x8000000000000009uLL; /*0x4110*/
}
v5 = v6; /*0x4112*/
*p_DsdtData = (char *)v6; /*0x4117*/
if ( !v5 ) /*0x411d*/
return 0x8000000000000009uLL; /*0x411d*/
(*(void (__fastcall **)(__int64, _QWORD, _QWORD))(BootServices + 352))( /*0x4135*/
v5,
*(_QWORD *)(qword_8800 + 40),
*(unsigned int *)(*(_QWORD *)(qword_8800 + 40) + 4LL));
if ( !*p_DsdtData )
{
DebugPrint(0x80000000LL, "Acpi: No DSDT was FOUND: Status=EFI_NOT_FOUND\n");
return 0x800000000000000EuLL; /*0x4154*/
}
AcpiConfig_4(1413763908, (__int64)*p_DsdtData, 2u); /*0x4164*/
return 0; /*0x416b*/
}
// Function: AcpiConfig_5 @ 0x4174 (0x11a bytes)
__int64 AcpiConfig_5()
{
_DWORD *v0; // rdx
_DWORD *v1; // r9
_DWORD *v2; // r8
_DWORD *v3; // r10
unsigned __int64 j; // rcx
__int64 v5; // r11
char v6; // al
unsigned __int64 v7; // rcx
bool v8; // zf
char v9; // al
unsigned __int64 v10; // rcx
v0 = 0; /*0x417e*/
v1 = 0; /*0x4180*/
v2 = 0; /*0x4183*/
v3 = 0; /*0x4186*/
j = 0; /*0x4189*/
if ( !j_0 ) /*0x4195*/
goto LABEL_12; /*0x4195*/
do /*0x41dd*/
{
v5 = *(_QWORD *)(AcpiTableList + 8 * j); /*0x419e*/
if ( **(_DWORD **)v5 == 1346584902 ) /*0x41ab*/
{
if ( *(_DWORD *)(v5 + 8) == 2 ) /*0x41b2*/
v1 = *(_DWORD **)v5; /*0x41b4*/
else
v0 = *(_DWORD **)v5; /*0x41b9*/
}
if ( **(_DWORD **)v5 == 1413763908 ) /*0x41c2*/
{
if ( *(_DWORD *)(v5 + 8) == 2 ) /*0x41c9*/
v2 = *(_DWORD **)v5; /*0x41cb*/
else
v3 = *(_DWORD **)v5; /*0x41d0*/
}
++j; /*0x41d3*/
}
while ( j < j_0 ); /*0x41dd*/
if ( !v2 ) /*0x41e2*/
LABEL_12:
v2 = v3; /*0x41e4*/
if ( !v3 ) /*0x41ea*/
v3 = v2; /*0x41ea*/
if ( !v1 ) /*0x41f1*/
goto LABEL_19; /*0x41f1*/
v1[9] = BufferAddr; /*0x41f9*/
*((_BYTE *)v1 + 9) = 0; /*0x4203*/
v6 = *(_BYTE *)v1; /*0x4208*/
v1[10] = v2 != 0 ? (unsigned int)v2 : 0;
v7 = 1; /*0x4214*/
if ( v1[1] > 1u ) /*0x421b*/
{
do /*0x422b*/
v6 += *((_BYTE *)v1 + v7++); /*0x4221*/
while ( v7 < (unsigned int)v1[1] ); /*0x422b*/
}
v8 = AcpiTablesPublished == 0; /*0x422f*/
*((_BYTE *)v1 + 9) = -v6; /*0x4236*/
if ( v8 )
{
LABEL_19:
if ( v0 )
{
v0[9] = TableBase; /*0x4247*/
*(_QWORD *)(v0 + 35) = v3; /*0x4250*/
v9 = *(_BYTE *)v0; /*0x4257*/
*((_BYTE *)v0 + 9) = 0; /*0x425b*/
v0[10] = v2 != 0 ? (unsigned int)v2 : 0;
v10 = 1; /*0x4265*/
if ( v0[1] > 1u ) /*0x426b*/
{
do /*0x427a*/
v9 += *((_BYTE *)v0 + v10++); /*0x4271*/
while ( v10 < (unsigned int)v0[1] ); /*0x427a*/
}
*((_BYTE *)v0 + 9) = -v9; /*0x427e*/
}
}
return 0; /*0x428d*/
}
// Function: AcpiConfig_18 @ 0x4290 (0xc5 bytes)
unsigned __int64 __fastcall AcpiConfig_18(
unsigned __int64 RsdtBase,
unsigned __int64 XsdtBase,
int *FacpX,
unsigned __int64 Dsdt)
{
__int64 v7; // rcx
_DWORD *i; // rax
__int64 v9; // rcx
_QWORD *j; // rax
if ( __PAIR128__(RsdtBase, XsdtBase) == 0 ) /*0x42ae*/
return 0; /*0x42ae*/
if ( !FacpX || !Dsdt ) /*0x42c1*/
{
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiBaseLib.c", 1549, (__int64)"((BOOLEAN)(0==1))"); /*0x433e*/
return 0; /*0x4343*/
}
(*(void (__fastcall **)(unsigned __int64, int *, _QWORD))(BootServices + 352))(Dsdt, FacpX, (unsigned int)FacpX[1]); /*0x42d4*/
if ( RsdtBase ) /*0x42dd*/
{
v7 = 0; /*0x42df*/
for ( i = (_DWORD *)(RsdtBase + 36); *i; ++i ) /*0x42e5*/
++v7; /*0x42e9*/
*(_DWORD *)(RsdtBase + 4 * v7 + 36) = Dsdt; /*0x42f5*/
}
if ( XsdtBase ) /*0x42fc*/
{
v9 = 0; /*0x42fe*/
for ( j = (_QWORD *)(XsdtBase + 36); *j; ++j ) /*0x4304*/
++v9; /*0x4309*/
*(_QWORD *)(XsdtBase + 8 * v9 + 36) = Dsdt; /*0x4316*/
}
return (Dsdt + *(unsigned int *)(Dsdt + 4) + 7LL) & 0xFFFFFFFFFFFFFFF8uLL; /*0x434f*/
}
// Function: AcpiPublishTables @ 0x4358 (0x9a6 bytes)
unsigned __int64 __fastcall AcpiPublishTables(unsigned __int8 RsdtBuildFlag, unsigned __int8 XsdtBuildFlag)
{
int *FacpX; // r9
int *FacpTable; // rbp
int *Dsdt; // r13
int *DsdtXTable; // r12
__int64 XsdtBase; // r15
__int64 FacpCount; // rsi
__int64 DsdtCount; // r14
unsigned __int64 XsdtAlign; // rdi
__int64 GetVarStatus; // rax
__int64 TableCount; // r8
unsigned __int64 InnerIdx; // rdx
int **TableEntry; // rcx
bool SizeCheck; // cc
int CurSig; // r10d
unsigned __int64 InnerIdx2; // rcx
__int64 OtherEntry; // r9
unsigned __int64 RsdtBase; // rbx
unsigned __int8 RsdtBuildEnable; // al
unsigned __int8 XsdtBuildEnable; // r9
unsigned __int64 TotalSize; // r14
__int64 FreeStatus; // rax
unsigned __int64 AllocPages; // r8
__int64 MemType; // rdx
__int64 AllocStatus; // rax
__int64 AllocResult; // rsi
unsigned __int64 RsdtEntryPtr; // r12
unsigned __int64 DsdtXStack; // r14
unsigned __int64 TableLength; // rdx
char CheckByte; // a... [19712 chars total]
// Function: AcpiPatchAmlMethods @ 0x4d00 (0x32a bytes)
__int64 __fastcall AcpiPatchAmlMethods(__int64 *a1)
{
__int64 Status; // rbx
__int64 LoopIdx; // rbp
__int64 AmlData; // rdi
_BYTE *S3Ptr; // rax
_BYTE *S1Ptr; // rax
_BYTE *S4Ptr; // rax
char CheckByte; // al
unsigned __int64 ChecksumIdx; // rcx
int ChecksumByte; // ecx
__int64 TableBase; // rax
__int64 ErrLine1972; // rdx
Status = 0; /*0x4d18*/
LoopIdx = 0; /*0x4d1d*/
while ( 1 ) /*0x4d25*/
{
if ( LoopIdx ) /*0x4d28*/
AmlData = *a1; /*0x4d2a*/
else
AmlData = a1[1]; /*0x4d2f*/
if ( !AmlData ) /*0x4d36*/
goto LABEL_30; /*0x4d36*/
if ( !*((_BYTE *)a1 + 66) ) /*0x4d3c*/
{
S3Ptr = (_BYTE *)AmlHashName(AmlData + 36, "_S3", *(unsigned int *)(AmlData + 4) - 37LL); /*0x4d55*/
if ( S3Ptr ) /*0x4d5d*/
*S3Ptr = 88; /*0x4d5f*/
}
if ( !*((_BYTE *)a1 + 64) ) /*0x4d62*/
{
S1Ptr = (_BYTE *)AmlHashName(AmlData + 36, "_S1", *(unsigned int *)(AmlData + 4) - 37LL); /*0x4d7b*/
if ( S1Ptr ) /*0x4d83*/
*S1Ptr = 88; /*0x4d85*/
}
if ( !*((_BYTE *)a1 + 67) ) /*0x4d88*/
{
S4Ptr = (_BYTE *)AmlHashName(AmlData + 36, "_S4", *(unsigned int *)(AmlData + 4) - 37LL); /*0x4da1*/
if ( S4Ptr ) /*0x4da9*/
*S4Ptr = 88; /*0x4dab*/
}
if ( *(_DWORD *)AmlData != 1413763908 ) /*0x4db5*/
{
Status = 0x8000000000000002uLL; /*0x4fd8*/
LABEL_43:
DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", Status); /*0x4fe2*/
ErrLine1972 = 1972; /*0x4ff6*/
goto LABEL_44; /*0x4ff6*/
}
Status = AmlWriteData(AmlData + 36, *(unsigned int *)(AmlData + 4) - 37LL, (__int64)"TOPM", *((unsigned int *)a1 + 18)); /*0x4dd5*/
if ( Status < 0 ) /*0x4ddb*/
goto LABEL_43; /*0x4ddb*/
if ( *(_DWORD *)AmlData != 1413763908 ) /*0x4de9*/
{
Status = 0x8000000000000002uLL; /*0x4fb3*/
LABEL_41:
DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", Status); /*0x4fbd*/
ErrLine1972 = 1984; /*0x4fd1*/
goto LABEL_44; /*0x4fd6*/
}
Status = AmlWriteData( /*0x4e05*/
AmlData + 36,
*(unsigned int *)(AmlData + 4) - 37LL,
(__int64)"IOST",
*((unsigned __int16 *)a1 + 38));
if ( Status < 0 ) /*0x4e0b*/
goto LABEL_41; /*0x4e0b*/
if ( *(_DWORD *)AmlData != 1413763908 ) /*0x4e19*/
{
Status = 0x8000000000000002uLL; /*0x4f8e*/
LABEL_39:
DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", Status); /*0x4f98*/
ErrLine1972 = 1989; /*0x4fac*/
goto LABEL_44; /*0x4fb1*/
}
Status = AmlWriteData( /*0x4e35*/
AmlData + 36,
*(unsigned int *)(AmlData + 4) - 37LL,
(__int64)"SS4",
*((unsigned __int8 *)a1 + 67));
if ( Status < 0 ) /*0x4e3b*/
goto LABEL_39; /*0x4e3b*/
if ( *(_DWORD *)AmlData != 1413763908 ) /*0x4e49*/
{
Status = 0x8000000000000002uLL; /*0x4f69*/
LABEL_37:
DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", Status); /*0x4f73*/
ErrLine1972 = 1994; /*0x4f87*/
goto LABEL_44; /*0x4f8c*/
}
Status = AmlWriteData( /*0x4e65*/
AmlData + 36,
*(unsigned int *)(AmlData + 4) - 37LL,
(__int64)"SS3",
*((unsigned __int8 *)a1 + 66));
if ( Status < 0 ) /*0x4e6b*/
goto LABEL_37; /*0x4e6b*/
if ( *(_DWORD *)AmlData != 1413763908 ) /*0x4e79*/
break; /*0x4e79*/
Status = AmlWriteData( /*0x4e95*/
AmlData + 36,
*(unsigned int *)(AmlData + 4) - 37LL,
(__int64)"SS2",
*((unsigned __int8 *)a1 + 65));
if ( Status < 0 ) /*0x4e9b*/
goto LABEL_35; /*0x4e9b*/
if ( *(_DWORD *)AmlData != 1413763908 ) /*0x4ea9*/
{
Status = 0x8000000000000002uLL; /*0x4f19*/
LABEL_33:
DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", Status); /*0x4f23*/
ErrLine1972 = 2004; /*0x4f37*/
goto LABEL_44; /*0x4f3c*/
}
Status = AmlWriteData( /*0x4ec1*/
AmlData + 36,
*(unsigned int *)(AmlData + 4) - 37LL,
(__int64)"SS1",
*((unsigned __int8 *)a1 + 64));
if ( Status < 0 ) /*0x4ec7*/
goto LABEL_33; /*0x4ec7*/
CheckByte = *(_BYTE *)AmlData; /*0x4ec9*/
ChecksumIdx = 1; /*0x4ecb*/
*(_BYTE *)(AmlData + 9) = 0; /*0x4ed0*/
if ( *(_DWORD *)(AmlData + 4) > 1u ) /*0x4ed7*/
{
do /*0x4ee5*/
{
CheckByte += *(_BYTE *)(ChecksumIdx + AmlData); /*0x4edc*/
++ChecksumIdx; /*0x4edf*/
}
while ( ChecksumIdx < *(unsigned int *)(AmlData + 4) ); /*0x4ee5*/
}
ChecksumByte = (unsigned __int8)-CheckByte; /*0x4ee9*/
TableBase = ::TableBase; /*0x4eec*/
*(_BYTE *)(AmlData + 9) = ChecksumByte; /*0x4ef3*/
*(_DWORD *)(TableBase + 8) = ChecksumByte; /*0x4ef6*/
*(_DWORD *)(BufferAddr + 8) = *(unsigned __int8 *)(AmlData + 9); /*0x4f04*/
LABEL_30:
if ( (unsigned __int64)++LoopIdx >= 2 ) /*0x4f0e*/
return Status; /*0x4f0e*/
}
Status = 0x8000000000000002uLL; /*0x4f41*/
LABEL_35:
DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", Status); /*0x4f4b*/
ErrLine1972 = 1999; /*0x4f5f*/
LABEL_44:
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiBaseLib.c", ErrLine1972, (__int64)"!EFI_ERROR (Status)"); /*0x4ffb*/
return Status; /*0x5020*/
}
// Function: AcpiHideSioObjects @ 0x502c (0x235 bytes)
__int64 __fastcall AcpiHideSioObjects(char **a1)
{
__int64 result; // rax
__int64 HandleBuffer; // rcx
__int64 HandleIndex; // rsi
__int64 SioProtocol; // r13
__int64 SioDevice; // rax
unsigned __int64 i; // rdi
char *AmlDataDsdt; // rbx
__int64 FindStatus; // rax
__int64 FindStatus_1; // r12
__int64 NameOffset; // rbx
unsigned __int64 NameCount; // r8
__int64 NameIndex; // rcx
__int64 NameIndex_1; // rdx
unsigned __int64 j; // rdx
char *AmlData2; // rax
char CheckByte; // cl
unsigned __int64 ByteIdx; // r8
__int64 SioHandle; // [rsp+30h] [rbp-30h] BYREF
__int64 NameBuffer; // [rsp+38h] [rbp-28h] BYREF
__int64 NameOffset_1; // [rsp+48h] [rbp-18h]
_QWORD NameInfo[2]; // [rsp+50h] [rbp-10h] BYREF
int p_n1600085855; // [rsp+A8h] [rbp+48h] BYREF
__int64 HandleBuffer_1; // [rsp+B0h] [rbp+50h] BYREF
unsigned __int64 HandleCount; // [rsp+B8h] [rbp+58h] BYREF
HandleBuffer_1 = 0; /*0x503e*/
NameOffset_1 = 0; /*0x5050*/
memset(NameInfo, 0, 12); /*0x5057*/
result = (*(__int64 (__fastcall **)(__int64, void *, _QWORD, unsigned __int64 *, __int64 *))(BootServices + 312))( /*0x5075*/
2,
&unk_7190,
0,
&HandleCount,
&HandleBuffer_1);
HandleBuffer = HandleBuffer_1; /*0x507b*/
if ( HandleBuffer_1 )
{
HandleIndex = 0; /*0x5088*/
if ( HandleCount )
{
while ( 1 )
{
if ( (*(__int64 (__fastcall **)(_QWORD, void *, __int64 *))(BootServices + 152))(
*(_QWORD *)(HandleBuffer + 8 * HandleIndex),
&unk_7190,
&SioHandle) >= 0 )
{
SioProtocol = *(_QWORD *)(SioHandle + 40); /*0x50bd*/
SioDevice = *(_QWORD *)(SioProtocol + 136); /*0x50c1*/
if ( *(_BYTE *)(SioDevice + 11) )
DebugPrint(64, "Found SIO Protocol. Name: %s\n", (const char *)(unsigned int)(SioDevice + 11));
for ( i = 0; i < 2; ++i )
{
if ( i ) /*0x50e8*/
AmlDataDsdt = *a1; /*0x50ea*/
else
AmlDataDsdt = a1[1]; /*0x50ef*/
if ( AmlDataDsdt )
{
DebugPrint(64, "Looking DSDT for Name: %s\n", (const char *)(*(_QWORD *)(SioProtocol + 136) + 11LL));
FindStatus = AmlParseNameInfo( /*0x513d*/
(__int64)(AmlDataDsdt + 36),
*((unsigned int *)AmlDataDsdt + 1) - 37LL,
(const char *)(*(_QWORD *)(SioProtocol + 136) + 11LL),
6,
&NameBuffer);
FindStatus_1 = FindStatus; /*0x5142*/
if ( FindStatus < 0 ) /*0x5148*/
{
DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", FindStatus); /*0x5159*/
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiBaseLib.c", 2072, (__int64)"!EFI_ERROR (Status)"); /*0x5171*/
}
NameOffset = NameOffset_1; /*0x5176*/
DebugPrint(64, "Going to hide object Data statr= %x, Length= %x\n", NameOffset_1, HIDWORD(NameInfo[0])); /*0x518d*/
if ( FindStatus_1 >= 0 ) /*0x5195*/
{
NameCount = 0; /*0x5197*/
do /*0x51a4*/
++NameCount; /*0x51a1*/
while ( aPrs[NameCount] ); /*0x51a4*/
p_n1600085855 = 1600085855; /*0x51ae*/
ComputeStringHash(&p_n1600085855, "_PRS", NameCount); /*0x51b9*/
NameIndex = 0; /*0x51be*/
if ( *(_QWORD *)((char *)NameInfo + 4) ) /*0x51c4*/
{
NameIndex_1 = 0; /*0x51c9*/
while ( *(_DWORD *)(NameIndex_1 + NameOffset) != p_n1600085855 ) /*0x51ce*/
{
NameIndex = (unsigned int)(NameIndex + 1); /*0x51d0*/
NameIndex_1 = (unsigned int)NameIndex; /*0x51d2*/
if ( (unsigned __int64)(unsigned int)NameIndex >= *(_QWORD *)((char *)NameInfo + 4) ) /*0x51d8*/
goto LABEL_22; /*0x51d8*/
}
*(_BYTE *)(NameIndex + NameOffset) = 88; /*0x51dc*/
}
}
}
LABEL_22:
; /*0x51e0*/
}
}
if ( ++HandleIndex >= HandleCount ) /*0x51f4*/
break; /*0x51f4*/
HandleBuffer = HandleBuffer_1; /*0x51f6*/
}
}
for ( j = 0; j < 2; ++j ) /*0x51ff*/
{
if ( j ) /*0x5204*/
AmlData2 = *a1; /*0x5206*/
else
AmlData2 = a1[1]; /*0x520b*/
if ( AmlData2 ) /*0x5212*/
{
CheckByte = *AmlData2; /*0x5214*/
ByteIdx = 1; /*0x5216*/
AmlData2[9] = 0; /*0x521c*/
if ( *((_DWORD *)AmlData2 + 1) > 1u ) /*0x5224*/
{
do /*0x5234*/
CheckByte += AmlData2[ByteIdx++]; /*0x522a*/
while ( ByteIdx < *((unsigned int *)AmlData2 + 1) ); /*0x5234*/
}
AmlData2[9] = -CheckByte; /*0x5238*/
}
}
return (*(__int64 (__fastcall **)(__int64))(BootServices + 72))(HandleBuffer_1); /*0x524f*/
}
return result; /*0x5252*/
}
// Function: AcpiCollectAmlInfo @ 0x5264 (0x3fc bytes)
signed __int64 __fastcall AcpiCollectAmlInfo(__int64 a1, __int64 a2)
{
_DWORD *FacpTable; // rdi
_DWORD *FacpXTable; // rsi
__int64 SetupData; // r15
unsigned __int64 i_1; // rcx
__int64 TableEntry; // rdx
_DWORD *TableData; // rax
__int64 GetVarStatus; // rax
__int64 SetupData_1; // rax
_WORD *DevStatus; // r14
__int64 SioStatus; // r12
__int16 FlagsVal; // cx
unsigned __int64 ChecksumIdx; // rdx
char CheckByte; // al
unsigned __int8 ResetAccessSize; // al
unsigned __int64 ChecksumIdx2; // rcx
char CheckByte2; // al
__int64 PatchStatus; // rax
signed __int64 result; // rax
__int64 *ResetInfo; // [rsp+20h] [rbp-30h]
__int64 ResetAddr; // [rsp+30h] [rbp-20h] BYREF
__int16 ResetWidth; // [rsp+38h] [rbp-18h]
_DWORD SioUuid[4]; // [rsp+40h] [rbp-10h] BYREF
unsigned __int64 i; // [rsp+98h] [rbp+48h] BYREF
__int64 VarSize2; // [rsp+A0h] [rbp+50h] BYREF
SioUuid[0] = 1478549144; /*0x527e*/
SioUuid[1] = 1259076750; /*0x5288*/
SioUuid[2] = -1811236444; /*0x5296*/
FacpTable = 0; /*0x529d*/
SioUuid[3] = 2116687373; /*0x52a0*/
ResetAddr = 0; /*0x52ab*/
VarSize2 = 2; /*0x52b3*/
FacpXTable = 0; /*0x52b7*/
ResetWidth = 255; /*0x52ba*/
SetupData = 0; /*0x52c0*/
DebugPrint(64, "IN Collect AML Info.\n"); /*0x52c3*/
i_1 = 0; /*0x52d3*/
for ( i = 0; i_1 < j_0; i = i_1 ) /*0x52da*/
{
TableEntry = *(_QWORD *)(AcpiTableList + 8 * i_1); /*0x52e3*/
TableData = *(_DWORD **)TableEntry; /*0x52e7*/
if ( **(_DWORD **)TableEntry == 1346584902 ) /*0x52f0*/
{
if ( *(_DWORD *)(TableEntry + 8) == 2 ) /*0x52f6*/
FacpXTable = *(_DWORD **)TableEntry; /*0x52f8*/
else
FacpTable = *(_DWORD **)TableEntry; /*0x52fd*/
}
if ( *TableData == 1413763908 ) /*0x5306*/
{
if ( *(_DWORD *)(TableEntry + 8) == 2 ) /*0x530c*/
*(_QWORD *)a2 = TableData; /*0x530e*/
else
*(_QWORD *)(a2 + 8) = TableData; /*0x5313*/
}
++i_1; /*0x5317*/
}
DebugPrint(64, "IN Collect AML Info after PT: %x\n", 0);
*(_DWORD *)(a2 + 64) = 0; /*0x533a*/
i = 0; /*0x5353*/
GetVarStatus = (*(__int64 (__fastcall **)(const __int16 *, void *, _QWORD, unsigned __int64 *, _QWORD))(RuntimeServices + 72))( /*0x5363*/
L"Setup",
&unk_8668,
0,
&i,
0);
if ( GetVarStatus >= 0 ) /*0x5369*/
goto LABEL_62; /*0x5369*/
if ( GetVarStatus == 0x8000000000000005uLL ) /*0x5378*/
{
SetupData_1 = AllocatePool(i); /*0x537e*/
SetupData = SetupData_1; /*0x5383*/
if ( !SetupData_1 ) /*0x5389*/
goto LABEL_24; /*0x5389*/
GetVarStatus = (*(__int64 (__fastcall **)(const __int16 *, void *, _QWORD, unsigned __int64 *, __int64))(RuntimeServices + 72))( /*0x53ac*/
L"Setup",
&unk_8668,
0,
&i,
SetupData_1);
}
if ( GetVarStatus >= 0 ) /*0x53b3*/
{
LABEL_62:
if ( !*(_BYTE *)(SetupData + 45) ) /*0x53b5*/
{
*(_BYTE *)(a2 + 67) = *(_BYTE *)(SetupData + 49); /*0x53bf*/
if ( *(_WORD *)(SetupData + 46) ) /*0x53c2*/
{
if ( *(_WORD *)(SetupData + 46) == 1 ) /*0x53ce*/
{
*(_BYTE *)(a2 + 64) = 1; /*0x53db*/
*(_BYTE *)(a2 + 66) = 0; /*0x53df*/
goto LABEL_24; /*0x53e3*/
}
if ( *(_WORD *)(SetupData + 46) != 2 ) /*0x53d3*/
goto LABEL_24; /*0x53d3*/
*(_BYTE *)(a2 + 66) = 1; /*0x53d5*/
}
else
{
*(_BYTE *)(a2 + 66) = 0; /*0x53e5*/
}
*(_BYTE *)(a2 + 64) = 0; /*0x53e9*/
}
}
LABEL_24:
DevStatus = (_WORD *)(a2 + 76); /*0x53ed*/
::FlagsVal &= 0xFFFCu; /*0x53f6*/
SioStatus = (*(__int64 (__fastcall **)(const __int16 *, _DWORD *, _QWORD, __int64 *, __int64))(RuntimeServices + 72))( /*0x541e*/
L"SIO_DEV_STATUS_VAR",
SioUuid,
0,
&VarSize2,
a2 + 76);
if ( SioStatus < 0 ) /*0x5424*/
*DevStatus = 0; /*0x5426*/
FlagsVal = ::FlagsVal; /*0x542a*/
if ( (*DevStatus & 0x30F) != 0 ) /*0x543a*/
{
FlagsVal = ::FlagsVal | 1; /*0x543c*/
::FlagsVal |= 1u; /*0x5440*/
}
if ( (*DevStatus & 0x4C00) != 0 ) /*0x5456*/
{
FlagsVal |= 2u; /*0x5458*/
::FlagsVal = FlagsVal; /*0x545c*/
}
if ( FacpTable ) /*0x546c*/
{
*(_WORD *)((char *)FacpTable + 109) &= FlagsVal; /*0x546e*/
ChecksumIdx = 1; /*0x5472*/
*((_BYTE *)FacpTable + 9) = 0; /*0x5475*/
CheckByte = *(_BYTE *)FacpTable; /*0x5479*/
if ( FacpTable[1] > 1u ) /*0x547f*/
{
do /*0x548e*/
CheckByte += *((_BYTE *)FacpTable + ChecksumIdx++); /*0x5485*/
while ( ChecksumIdx < (unsigned int)FacpTable[1] ); /*0x548e*/
}
*((_BYTE *)FacpTable + 9) = -CheckByte; /*0x5492*/
if ( *((_QWORD *)FacpTable + 22) ) /*0x5495*/
{
ResetAddr = *((_QWORD *)FacpTable + 22); /*0x54a1*/
HIBYTE(ResetWidth) = *((_BYTE *)FacpTable + 175); /*0x54ab*/
ResetAccessSize = *((_BYTE *)FacpTable + 172); /*0x54ae*/
LABEL_35:
LOBYTE(ResetWidth) = ResetAccessSize; /*0x54b4*/
goto LABEL_39; /*0x54b7*/
}
if ( FacpTable[16] ) /*0x54b9*/
{
ResetAddr = (unsigned int)FacpTable[16]; /*0x54c2*/
ResetAccessSize = 1; /*0x54c6*/
HIBYTE(ResetWidth) = 2; /*0x54c9*/
goto LABEL_35; /*0x54cd*/
}
}
ResetAccessSize = ResetWidth; /*0x54cf*/
LABEL_39:
if ( !FacpXTable ) /*0x54d5*/
goto LABEL_48; /*0x54d5*/
if ( *((_BYTE *)FacpXTable + 8) > 1u ) /*0x54db*/
{
*(_WORD *)((char *)FacpXTable + 109) &= FlagsVal; /*0x54dd*/
ChecksumIdx2 = 1; /*0x54e1*/
*((_BYTE *)FacpXTable + 9) = 0; /*0x54e4*/
CheckByte2 = *(_BYTE *)FacpXTable; /*0x54e8*/
if ( FacpXTable[1] > 1u ) /*0x54ee*/
{
do /*0x54fc*/
CheckByte2 += *((_BYTE *)FacpXTable + ChecksumIdx2++); /*0x54f3*/
while ( ChecksumIdx2 < (unsigned int)FacpXTable[1] ); /*0x54fc*/
}
*((_BYTE *)FacpXTable + 9) = -CheckByte2; /*0x5500*/
ResetAccessSize = ResetWidth; /*0x5503*/
}
if ( !FacpTable || ResetAccessSize == 0xFF ) /*0x550d*/
{
if ( FacpXTable[16] ) /*0x550f*/
{
ResetAddr = (unsigned int)FacpXTable[16]; /*0x5518*/
ResetAccessSize = 1; /*0x551c*/
ResetWidth = 513; /*0x551f*/
}
LABEL_48:
if ( ResetAccessSize == 0xFF ) /*0x5528*/
goto LABEL_50; /*0x5528*/
}
ResetInfo = &ResetAddr; /*0x552a*/
SioStatus = (*(__int64 (__fastcall **)(const __int16 *, void *, __int64))(RuntimeServices + 88))( /*0x5555*/
L"AcpiResetVar",
&unk_71D0,
3);
ResetAccessSize = ResetWidth; /*0x5558*/
LABEL_50:
LODWORD(ResetInfo) = HIBYTE(ResetWidth); /*0x555b*/
DebugPrint(
64,
"AcpiResetVar: Status=%r Addess=%lx AccessSize=%x Type=%x \n",
SioStatus,
ResetAddr,
ResetInfo,
ResetAccessSize);
if ( SioStatus < 0 ) /*0x5591*/
{
DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", SioStatus); /*0x559b*/
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiBaseLib.c", 2301, (__int64)"!EFI_ERROR (Status)"); /*0x55b3*/
}
PatchStatus = AcpiPatchAmlMethods((__int64 *)a2); /*0x55bb*/
if ( PatchStatus < 0 ) /*0x55c3*/
{
DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", PatchStatus); /*0x55ce*/
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiBaseLib.c", 2303, (__int64)"!EFI_ERROR (Status)"); /*0x55e6*/
}
if ( SetupData && *(_BYTE *)(SetupData + 48) ) /*0x55f0*/
AcpiHideSioObjects((char **)a2); /*0x55f9*/
result = AcpiPublishTables(1u, AcpiTablesPublished == 0); /*0x5611*/
if ( result < 0 ) /*0x5619*/
{
DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", result); /*0x5624*/
result = AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\ACPI\\AcpiBaseLib.c", 2311, (__int64)"!EFI_ERROR (Status)"); /*0x563c*/
}
AcpiTableInstalled = 1; /*0x5641*/
return result; /*0x5650*/
}
// Function: AcpiCoreInitialize @ 0x5660 (0x50a bytes)
unsigned __int64 AcpiCoreInitialize()
{
__int64 TableList; // rbx
__int64 ProtocolPtr; // rax
unsigned __int64 AlignSize; // rbx
__int64 AllocStatus; // rax
__int64 ErrLine1332; // rdx
__int64 BufferAddr; // rcx
__int64 FreeStatus; // rax
__int64 ReallocStatus; // rax
__int64 RsdtBuffer; // rax
unsigned __int64 *DsdtResult; // rax
__int64 DsdtResult_1; // rbx
__int64 ErrLine2401; // rdx
const char *AcpiTable; // r8
__int64 Table; // rax
signed __int64 AddStatus; // r8
unsigned __int64 *DsdtResult_2; // rax
__int64 DsdtResult_3; // rbx
__int64 SsdtStatus; // rax
__int64 FacsStatus; // rax
__int64 ErrLine2444; // rdx
char *DsdtData; // rbx
unsigned __int64 ByteIdx; // rcx
unsigned __int64 ByteIdx_1; // rdx
char CheckByte; // al
__int64 DsdtWrapEntry; // rax
signed __int64 AddWrapStatus; // rax
__int64 AddStatus2; // rax
unsigned __int64 *FacsAllocResult; // rax
__int64 FacsSize; // rcx
__int64 FacsAllocResult_1; // rbx
signed ... [8951 chars total]
// Function: GetDebugLevelFromCmos @ 0x5b6c (0x4e bytes)
__int64 GetDebugLevelFromCmos()
{
unsigned __int8 v0; // al
char n3_1; // al
char n3; // cl
__int64 result; // rax
v0 = __inbyte(0x70u); /*0x5b71*/
__outbyte(0x70u, v0 & 0x80 | 0x4B); /*0x5b76*/
n3_1 = __inbyte(0x71u); /*0x5b7c*/
n3 = n3_1; /*0x5b7d*/
if ( (unsigned __int8)n3_1 > 3u ) /*0x5b84*/
{
n3 = n3; /*0x5b86*/
if ( !n3 ) /*0x5b8e*/
n3 = MEMORY[0xFDAF0490] & 2 | 1; /*0x5b9a*/
}
if ( (unsigned __int8)(n3 - 1) > 0xFDu ) /*0x5ba4*/
return 0; /*0x5bb7*/
result = 2147483718LL; /*0x5ba9*/
if ( n3 == 1 ) /*0x5bb3*/
return 2147483652LL; /*0x5bb3*/
return result; /*0x5bb6*/
}
// Function: ReadUnaligned64 @ 0x5bbc (0x2f bytes)
__int64 __fastcall ReadUnaligned64(__int64 a1)
{
if ( !a1 ) /*0x5bc8*/
AssertWithProtocol((__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\Unaligned.c", 192, (__int64)"Buffer != ((void *) 0)"); /*0x5bdd*/
return *(_QWORD *)a1; /*0x5be5*/
}
// Function: CompareGuid @ 0x5bec (0x6e bytes)
bool __fastcall CompareGuid(__int64 ImageHandle, __int64 a2)
{
__int64 v3; // rdi
__int64 v4; // rbx
__int64 v5; // rbp
__int64 v6; // rax
v3 = ReadUnaligned64((__int64)&unk_71C0); /*0x5c12*/
v4 = ReadUnaligned64(a2); /*0x5c21*/
v5 = ReadUnaligned64((__int64)&unk_71C8); /*0x5c2d*/
v6 = ReadUnaligned64(a2 + 8); /*0x5c30*/
return v3 == v4 && v5 == v6; /*0x5c54*/
}
// Function: AssertCpuDeadLoop_2 @ 0x5c5c (0x8c bytes)
__int64 AssertCpuDeadLoop_2()
{
__int64 result; // rax
__int64 v1; // rax
result = qword_87F8; /*0x5c60*/
if ( !qword_87F8 ) /*0x5c6a*/
{
v1 = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(qword_8768 + 320))(&unk_7150, 0, &qword_87F8); /*0x5c83*/
if ( v1 < 0 ) /*0x5c8c*/
{
DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", v1); /*0x5c9d*/
AssertWithProtocol((__int64)"e:\\hs\\MdePkg\\Library\\DxePcdLib\\DxePcdLib.c", 78, (__int64)"!EFI_ERROR (Status)"); /*0x5cb5*/
}
result = qword_87F8; /*0x5cba*/
if ( !qword_87F8 ) /*0x5cc4*/
{
AssertWithProtocol((__int64)"e:\\hs\\MdePkg\\Library\\DxePcdLib\\DxePcdLib.c", 79, (__int64)"mPcd != ((void *) 0)"); /*0x5cd7*/
return qword_87F8; /*0x5cdc*/
}
}
return result; /*0x5ce3*/
}
// Function: Assert @ 0x5ce8 (0x87 bytes)
__int64 Assert()
{
__int64 v0; // rbx
__int64 v1; // rax
v0 = 0; /*0x5cf2*/
if ( !qword_8800 )
{
v1 = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(BootServices + 320))(&unk_7170, 0, &qword_8800); /*0x5d14*/
v0 = v1; /*0x5d1a*/
if ( v1 < 0 )
{
DebugPrint(0x80000000LL, "ERROR: Failed to locate AMI_BOARD_INFO2_PROTOCOL. Status=%r\n", v1);
DebugPrint(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", v0); /*0x5d44*/
AssertWithProtocol((__int64)"e:\\hs\\AmiModulePkg\\Library\\AmiSdlLib\\AmiSdlLib.c", 66, (__int64)"!EFI_ERROR (Status)"); /*0x5d5c*/
}
}
return v0; /*0x5d69*/
}
// Function: SetMem @ 0x5dce (0x4f bytes)
int *__fastcall SetMem(int *buf, unsigned __int64 n4, int value)
{
int *buf_1; // rdi
unsigned __int64 n4_1; // rcx
int value_1; // eax
__int16 value_2; // bx
int v7; // eax
__int64 v8; // rdx
char n4_2; // dl
unsigned __int64 i; // rcx
buf_1 = buf; /*0x5dd1*/
n4_1 = n4; /*0x5dd4*/
value_1 = value; /*0x5dd7*/
BYTE1(value_1) = value; /*0x5dda*/
value_2 = value_1; /*0x5ddc*/
v7 = value_1 << 16; /*0x5ddf*/
LOWORD(v7) = value_2; /*0x5de3*/
if ( n4 >= 4 ) /*0x5dea*/
{
v8 = (unsigned __int8)buf_1 & 3; /*0x5def*/
if ( ((unsigned __int8)buf_1 & 3) != 0 ) /*0x5df3*/
{
memset(buf_1, value_2, 4 - v8); /*0x5e02*/
buf_1 = (int *)((char *)buf_1 + 4 - v8); /*0x5e02*/
n4_1 -= 4 - v8; /*0x5e04*/
}
n4_2 = n4_1; /*0x5e07*/
for ( i = n4_1 >> 2; i; --i ) /*0x5e0a*/
*buf_1++ = v7; /*0x5e0e*/
n4_1 = n4_2 & 3; /*0x5e14*/
}
memset(buf_1, value_2, n4_1); /*0x5e17*/
return buf; /*0x5e1a*/
}
// Function: ComputeStringHash @ 0x5e20 (0xb0 bytes)
int *__fastcall ComputeStringHash(int *p_n1600085855, const char *_PRS, unsigned __int64 NameCount)
{
unsigned __int64 p_n1600085855_1; // rdi
unsigned __int64 NameCount_1; // rcx
char v10; // dl
const char *n8; // rax
unsigned __int64 count; // rax
unsigned __int64 count_1; // rbx
char NameCount_2; // al
unsigned __int64 v15; // rcx
unsigned __int64 NameCount_3; // rax
__asm { pushf } /*0x5e23*/
p_n1600085855_1 = (unsigned __int64)p_n1600085855; /*0x5e29*/
NameCount_1 = NameCount; /*0x5e2c*/
v10 = 0; /*0x5e2f*/
n8 = &_PRS[-p_n1600085855_1]; /*0x5e34*/
if ( (unsigned __int64)_PRS < p_n1600085855_1 ) /*0x5e37*/
{
n8 = (const char *)(p_n1600085855_1 - (_QWORD)_PRS); /*0x5e3d*/
if ( (unsigned __int64)&_PRS[NameCount] >= p_n1600085855_1 ) /*0x5e43*/
{
_PRS += NameCount; /*0x5e45*/
p_n1600085855_1 += NameCount; /*0x5e48*/
v10 = 1; /*0x5e4c*/
}
}
if ( NameCount < 8 || (unsigned __int64)n8 < 8 ) /*0x5e59*/
goto LABEL_19; /*0x5e59*/
count = (unsigned __int8)_PRS & 7; /*0x5e61*/
count_1 = p_n1600085855_1 & 7; /*0x5e65*/
if ( v10 ) /*0x5e6b*/
{
--_PRS; /*0x5e6d*/
--p_n1600085855_1; /*0x5e70*/
}
if ( count == count_1 && count ) /*0x5e7b*/
{
if ( !v10 ) /*0x5e7f*/
count = 8 - count; /*0x5e84*/
qmemcpy((void *)p_n1600085855_1, _PRS, count); /*0x5e8d*/
_PRS += count; /*0x5e8d*/
p_n1600085855_1 += count; /*0x5e8d*/
NameCount_1 = NameCount - count; /*0x5e8f*/
}
if ( v10 ) /*0x5e94*/
{
_PRS -= 7; /*0x5e96*/
p_n1600085855_1 -= 7LL; /*0x5e9a*/
}
NameCount_2 = NameCount_1; /*0x5e9e*/
v15 = NameCount_1 >> 3; /*0x5ea1*/
qmemcpy((void *)p_n1600085855_1, _PRS, 8 * v15); /*0x5ea5*/
_PRS += 8 * v15; /*0x5ea5*/
p_n1600085855_1 += 8 * v15; /*0x5ea5*/
NameCount_3 = NameCount_2 & 7; /*0x5ea8*/
if ( NameCount_3 ) /*0x5eac*/
{
if ( v10 ) /*0x5eb0*/
{
_PRS += 8; /*0x5eb2*/
p_n1600085855_1 += 8LL; /*0x5eb6*/
}
NameCount_1 = NameCount_3; /*0x5eba*/
LABEL_19:
if ( v10 ) /*0x5ebf*/
{
--_PRS; /*0x5ec1*/
--p_n1600085855_1; /*0x5ec4*/
}
qmemcpy((void *)p_n1600085855_1, _PRS, NameCount_1); /*0x5ec7*/
}
__asm { popf } /*0x5ec9*/
return p_n1600085855; /*0x5ecc*/
}