#include <Uefi.h>
#include <PiPei.h>
void *SetMem(void *buf, unsigned int count, char value)
{
memset(buf, value, count); /*0xffe3f199*/
return buf; /*0xffe3f19f*/
}
char *CopyMem(char *dst, char *src, unsigned int count)
{
unsigned int count_1; // edx
char *dst_1; // edi
char *src_1; // esi
count_1 = count; /*0xffe3f1b6*/
if ( src < dst && &src[count - 1] >= dst ) /*0xffe3f1c4*/
{
src_1 = &src[count - 1]; /*0xffe3f1d8*/
dst_1 = &dst[count - 1]; /*0xffe3f1da*/
}
else
{
count_1 = count & 3; /*0xffe3f1c8*/
qmemcpy(dst, src, 4 * (count >> 2)); /*0xffe3f1d1*/
src_1 = &src[4 * (count >> 2)]; /*0xffe3f1d1*/
dst_1 = &dst[4 * (count >> 2)]; /*0xffe3f1d1*/
}
qmemcpy(dst_1, src_1, count_1); /*0xffe3f1e1*/
return dst; /*0xffe3f1e8*/
}
int CopyMemDwords(int a1, int a2, int a3, int a4)
{
do /*0xffe3f225*/
{
*(_DWORD *)(a1 + 8 *a2 - 8) = a3; /*0xffe3f21d*/
*(_DWORD *)(a1 + 8 *a2-- - 4) = a4; /*0xffe3f221*/
}
while ( a2 ); /*0xffe3f225*/
return a1; /*0xffe3f229*/
}
void *SetMem32(void *buf, unsigned int count, int value)
{
memset32(buf, value, count); /*0xffe3f239*/
return buf; /*0xffe3f23f*/
}
EFI_STATUS ModuleEntryPoint(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
{
if ( (MmioRead32(1024068) & 0x80u) == 0 ) /*0xffe3f2d8*/
{
MmioWrite32(1024064, 1280); /*0xffe3f2e4*/
IoOr32(); /*0xffe3f2e9*/
}
return StatusCodePeiEntry(ImageHandle, SystemTable);
}
int __thiscall StatusCodeAllocCallbackNode(void *Node)
{
int PeiServices; // eax
int NodeBase; // [esp+0h] [ebp-4h]
PeiServices = GetPeiServices(); /*0xffe3f2ff*/
if ( (*(int (__stdcall **)(int))(*(_DWORD *)PeiServices + 52))(PeiServices) < 0 ) /*0xffe3f317*/
return 0; /*0xffe3f319*/
ZeroMem((unsigned int)Node + 8, src, 0x10u); /*0xffe3f32b*/
*(_DWORD *)(NodeBase + 24) = 0; /*0xffe3f339*/
return NodeBase + 24; /*0xffe3f33e*/
}
int StatusCodeRemoveCallback(_WORD *Callback)
{
_WORD *Callback_1; // esi
_WORD *PpiList; // eax
int GuidScanResult; // ecx
int Index; // edx
Callback_1 = Callback; /*0xffe3f344*/
if ( !Callback ) /*0xffe3f349*/
return -2147483646; /*0xffe3f34b*/
PpiList = FindGuidInPpiList(src); /*0xffe3f357*/
LABEL_4:
for ( Callback = PpiList; ; PpiList = Callback ) /*0xffe3f35c*/
{
if ( !PpiList ) /*0xffe3f389*/
return -2147483634; /*0xffe3f392*/
Index = 0; /*0xffe3f361*/
if ( *((_DWORD *)PpiList + 6) ) /*0xffe3f363*/
break; /*0xffe3f363*/
LABEL_8:
if ( SPrintScanGuid(GuidScanResult, &Callback) < 0 ) /*0xffe3f37e*/
{
PpiList = 0; /*0xffe3f380*/
goto LABEL_4; /*0xffe3f382*/
}
}
while ( *(_WORD **)&PpiList[2 *Index + 14] != Callback_1 ) /*0xffe3f36c*/
{
if ( (unsigned int)++Index >= *((_DWORD *)PpiList + 6) ) /*0xffe3f372*/
goto LABEL_8; /*0xffe3f372*/
}
*(_DWORD *)&PpiList[2 *Index + 14] = *(_DWORD *)&PpiList[2 * (*((_DWORD *)PpiList + 6))-- + 12]; /*0xffe3f39a*/
return 0; /*0xffe3f390*/
}
int StatusCodeRegisterCallback(_WORD *Callback)
{
_WORD *Callback_1; // edi
_WORD *PpiList; // eax
void *This; // ecx
_DWORD *CallbackNode; // esi
unsigned int CallbackCount; // edx
unsigned int CallbackCount_1; // ecx
_DWORD *CallbackPtr; // eax
Callback_1 = Callback; /*0xffe3f3a9*/
if ( !Callback ) /*0xffe3f3ae*/
return -2147483646; /*0xffe3f3b0*/
PpiList = FindGuidInPpiList(src); /*0xffe3f3bd*/
CallbackNode = 0; /*0xffe3f3c2*/
Callback = PpiList; /*0xffe3f3c4*/
if ( PpiList ) /*0xffe3f3c9*/
{
do /*0xffe3f403*/
{
CallbackCount = *((_DWORD *)PpiList + 6); /*0xffe3f3cb*/
if ( CallbackCount < 8 ) /*0xffe3f3d1*/
CallbackNode = PpiList + 12; /*0xffe3f3d3*/
CallbackCount_1 = 0; /*0xffe3f3d6*/
if ( CallbackCount ) /*0xffe3f3da*/
{
CallbackPtr = PpiList + 14; /*0xffe3f3dc*/
while ( (_WORD *)*CallbackPtr != Callback_1 ) /*0xffe3f3e1*/
{
++CallbackCount_1; /*0xffe3f3e3*/
++CallbackPtr; /*0xffe3f3e4*/
if ( CallbackCount_1 >= CallbackCount ) /*0xffe3f3e9*/
goto LABEL_10; /*0xffe3f3e9*/
}
return -2147483628; /*0xffe3f420*/
}
LABEL_10:
if ( SPrintScanGuid(CallbackCount_1, &Callback) >= 0 ) /*0xffe3f3f5*/
{
PpiList = Callback; /*0xffe3f3fe*/
}
else
{
PpiList = 0; /*0xffe3f3f7*/
Callback = 0; /*0xffe3f3f9*/
}
}
while ( PpiList ); /*0xffe3f403*/
if ( CallbackNode ) /*0xffe3f407*/
goto LABEL_18; /*0xffe3f407*/
}
CallbackNode = (_DWORD *)StatusCodeAllocCallbackNode(This); /*0xffe3f40e*/
if ( !CallbackNode ) /*0xffe3f412*/
return -2147483639; /*0xffe3f414*/
LABEL_18:
CallbackNode[++*CallbackNode] = Callback_1; /*0xffe3f422*/
return 0; /*0xffe3f42d*/
}
int StatusCodeDispatchCallbacks(
int PeiServices,
int CodeType,
int Value,
int Instance,
int CallerId,
int StatusCodeData)
{
int GuidScanResult; // ecx
unsigned __int16 *GuidInPpiList; // esi
unsigned int Index; // ebx
void ( **Callback)(int, int, int, int, int, int); // edi
unsigned __int16 *GuidInPpiList_1; // [esp+14h] [ebp-8h] BYREF
int PeiServices_1; // [esp+18h] [ebp-4h]
PeiServices_1 = PeiServices; /*0xffe3f436*/
GuidInPpiList = FindGuidInPpiList(src); /*0xffe3f447*/
LABEL_2:
GuidInPpiList_1 = GuidInPpiList; /*0xffe3f449*/
while ( GuidInPpiList ) /*0xffe3f493*/
{
Index = 0; /*0xffe3f44f*/
if ( *((_DWORD *)GuidInPpiList + 6) ) /*0xffe3f451*/
{
Callback = (void ( **)(int, int, int, int, int, int))(GuidInPpiList + 14); /*0xffe3f456*/
do /*0xffe3f47a*/
{
(*Callback++)(PeiServices_1, CodeType, Value, Instance, CallerId, StatusCodeData); /*0xffe3f46e*/
++Index; /*0xffe3f476*/
}
while ( Index < *((_DWORD *)GuidInPpiList + 6) ); /*0xffe3f47a*/
}
if ( SPrintScanGuid(GuidScanResult, &GuidInPpiList_1) < 0 ) /*0xffe3f487*/
{
GuidInPpiList = 0; /*0xffe3f489*/
goto LABEL_2; /*0xffe3f48b*/
}
GuidInPpiList = GuidInPpiList_1; /*0xffe3f48d*/
}
return 0; /*0xffe3f495*/
}
int StatusCodeReport(int PeiServices, int CodeType, int Value, int Instance, int CallerId, int StatusCodeData)
{
char Buffer[256]; // [esp+0h] [ebp-100h] BYREF
StatusCodeDispatchCallbacks(PeiServices, CodeType, Value, Instance, CallerId, StatusCodeData); /*0xffe3f4ba*/
return SerialPortWrite(PeiServices, CodeType, Value, Instance, CallerId, StatusCodeData, Buffer); /*0xffe3f4e0*/
}
int ( *StatusCodeSerialReport(int Value, unsigned __int8 *FormatString, int Args))(int a1, char *_r_n)
{
int Index; // ebx
int ( *PeiServices_1)(int, char *); // eax
int ( *PeiServices)(int, char *); // esi
void ( *Callback)(char *, int); // eax
int StatusCodeData[5]; // [esp+10h] [ebp-178h] BYREF
int Value_1; // [esp+24h] [ebp-164h]
int StatusCodeData2; // [esp+28h] [ebp-160h]
int StatusCodeData3; // [esp+2Ch] [ebp-15Ch]
int StatusCodeData4; // [esp+30h] [ebp-158h]
int StatusCodeData5; // [esp+34h] [ebp-154h]
int StatusCodeData6; // [esp+38h] [ebp-150h]
int StatusCodeData7; // [esp+3Ch] [ebp-14Ch]
int StatusCodeData8; // [esp+40h] [ebp-148h]
int StatusCodeData9; // [esp+44h] [ebp-144h]
int StatusCodeData10; // [esp+48h] [ebp-140h]
int StatusCodeData11; // [esp+4Ch] [ebp-13Ch]
int StatusCodeData12; // [esp+50h] [ebp-138h]
int StatusCodeData13; // [esp+54h] [ebp-134h]
int StatusCodeData14; // [esp+58h] [ebp-130h]
int StatusCodeData15; // [esp+5Ch] [ebp-12Ch]
int StatusCodeData16; // [esp+60h] [ebp-128h]
int StatusCodeData17; // [esp+64h] [ebp-124h]
int StatusCodeData18; // [esp+68h] [ebp-120h]
int StatusCodeData19; // [esp+6Ch] [ebp-11Ch]
int StatusCodeData20; // [esp+70h] [ebp-118h]
int StatusCodeData21; // [esp+74h] [ebp-114h]
int StatusCodeData22; // [esp+78h] [ebp-110h]
int StatusCodeData23; // [esp+7Ch] [ebp-10Ch]
int StatusCodeData24; // [esp+80h] [ebp-108h]
int StatusCodeData25; // [esp+84h] [ebp-104h]
char OutputBuffer; // [esp+88h] [ebp-100h] BYREF
_BYTE TempBuffer[255]; // [esp+89h] [ebp-FFh] BYREF
Index = 0; /*0xffe3f4f1*/
StatusCodeData[1] = -1706126778; /*0xffe3f4f3*/
StatusCodeData[0] = 23330836; /*0xffe3f500*/
StatusCodeData[2] = 299226451; /*0xffe3f51d*/
StatusCodeData[3] = 100721287; /*0xffe3f525*/
StatusCodeData[4] = -1178385111; /*0xffe3f52d*/
Value_1 = 0; /*0xffe3f535*/
StatusCodeData2 = 0; /*0xffe3f539*/
StatusCodeData3 = 0; /*0xffe3f53d*/
StatusCodeData4 = 0; /*0xffe3f541*/
StatusCodeData5 = 0; /*0xffe3f545*/
StatusCodeData6 = 0; /*0xffe3f549*/
StatusCodeData7 = 0; /*0xffe3f54d*/
StatusCodeData8 = 0; /*0xffe3f551*/
StatusCodeData9 = 0; /*0xffe3f555*/
StatusCodeData10 = 0; /*0xffe3f559*/
StatusCodeData11 = 0; /*0xffe3f55d*/
StatusCodeData12 = 0; /*0xffe3f561*/
StatusCodeData13 = 0; /*0xffe3f565*/
StatusCodeData14 = 0; /*0xffe3f569*/
StatusCodeData15 = 0; /*0xffe3f56d*/
StatusCodeData16 = 0; /*0xffe3f571*/
StatusCodeData17 = 0; /*0xffe3f575*/
StatusCodeData18 = 0; /*0xffe3f579*/
StatusCodeData19 = 0; /*0xffe3f57d*/
StatusCodeData20 = 0; /*0xffe3f581*/
StatusCodeData21 = 0; /*0xffe3f585*/
StatusCodeData22 = 0; /*0xffe3f58c*/
StatusCodeData23 = 0; /*0xffe3f593*/
StatusCodeData24 = 0; /*0xffe3f59a*/
StatusCodeData25 = 0; /*0xffe3f5a1*/
OutputBuffer = 0; /*0xffe3f5a8*/
SetMemWrapper((int)TempBuffer, TempBuffer, 0, 0xFFu); /*0xffe3f5af*/
PeiServices_1 = (int ( *)(int, char *))GetPeiServices(); /*0xffe3f5b7*/
PeiServices = PeiServices_1; /*0xffe3f5bc*/
if ( FormatString ) /*0xffe3f5c1*/
{
AsciiSPrintUnicodeFormat(&OutputBuffer, 0x100u, 0, FormatString, Args, 0); /*0xffe3f5d7*/
Value_1 = Value; /*0xffe3f5f0*/
StatusCodeDispatchCallbacks((int)PeiServices, 3, 50659328, 0, 0, (int)StatusCodeData); /*0xffe3f5f4*/
for ( Callback = (void ( *)(char *, int))i[0]; /*0xffe3f5f9*/
Callback;
Callback = (void ( *)(char *, int))dword_FFE43E14[Index++] )
{
Callback(&OutputBuffer, Value); /*0xffe3f60c*/
}
return PeiServicesInstallPpi((int)PeiServices, &OutputBuffer); /*0xffe3f625*/
}
return PeiServices_1; /*0xffe3f62a*/
}
int ( *StatusCodeDebugAssert(double AssertString, int LineNumber))(int a1, char *_r_n)
{
int Index; // ebx
int PeiServices; // esi
void ( *i)(char *, _DWORD, _DWORD); // eax
double ExtraInfo; // [esp+0h] [ebp-180h]
int StatusCodeData[30]; // [esp+8h] [ebp-178h] BYREF
char AssertBuffer; // [esp+80h] [ebp-100h] BYREF
_BYTE TempBuffer[255]; // [esp+81h] [ebp-FFh] BYREF
Index = 0; /*0xffe3f63e*/
StatusCodeData[1] = -1706126778; /*0xffe3f640*/
StatusCodeData[0] = 23330836; /*0xffe3f64c*/
StatusCodeData[2] = 299226451; /*0xffe3f669*/
StatusCodeData[3] = 100721287; /*0xffe3f671*/
StatusCodeData[4] = -1178385111; /*0xffe3f679*/
memset(&StatusCodeData[6], 0, 96); /*0xffe3f685*/
AssertBuffer = 0; /*0xffe3f6ee*/
SetMemWrapper((int)TempBuffer, TempBuffer, 0, 0xFFu); /*0xffe3f6f5*/
PeiServices = GetPeiServices(); /*0xffe3f705*/
AsciiSPrint(
&AssertBuffer,
0x100u,
"ASSERT %a(%d): %a\n Press any key to continue. \n",
AssertString,
LineNumber,
ExtraInfo);
StatusCodeData[5] = 0x80000000; /*0xffe3f728*/
StatusCodeDispatchCallbacks(PeiServices, 3, 50659328, 0, 0, (int)StatusCodeData); /*0xffe3f73d*/
for ( i = (void ( *)(char *, _DWORD, _DWORD))i_0; i; i = (void ( *)(char *, _DWORD, _DWORD))::i[Index++] ) /*0xffe3f742*/
i(&AssertBuffer, LODWORD(AssertString), HIDWORD(AssertString)); /*0xffe3f75a*/
return PeiServicesInstallPpi(PeiServices, &AssertBuffer); /*0xffe3f779*/
}
int StatusCodePeiEntry(int FileHandle, int __return_address)
{
int v4; // eax
int PeiServices; // eax
int Status; // eax
int Status_1; // esi
int ReportStatusCodePpi; // eax
int v10; // eax
int Status_2; // eax
int v12; // eax
int StatusCodePpi; // esi
int v14; // eax
int Status_3; // eax
int v16; // eax
int Descriptor_1; // esi
int v18; // eax
int Status_4; // eax
int v20; // eax
int Index; // edi
int (*i)(); // eax
void *This; // ecx
char StatusCodePpiBuffer[4]; // [esp+8h] [ebp-10h] BYREF
char StatusCodePpiBuffer2[4]; // [esp+Ch] [ebp-Ch] BYREF
int Descriptor; // [esp+10h] [ebp-8h] BYREF
int Descriptor2; // [esp+14h] [ebp-4h] BYREF
v4 = GetPeiServices(); /*0xffe3f78b*/
if ( (*(int ( **)(int))(*(_DWORD *)v4 + 116))(FileHandle) == -2147483628 ) /*0xffe3f79c*/
{
PeiServices = GetPeiServices(); /*0xffe3f7a2*/
Status = (*(int ( **)(int, void *, _DWORD, int *, char *))(*(_DWORD *)PeiServices + 32))( /*0xffe3f7b9*/
PeiServices,
&unk_FFE4356C,
0,
&Descriptor2,
StatusCodePpiBuffer2);
Status_1 = Status; /*0xffe3f7bc*/
if ( Status >= 0 ) /*0xffe3f7c3*/
{
v10 = GetPeiServices(); /*0xffe3f7fd*/
Status_2 = (*(int ( **)(int, void *, _DWORD, int *, char *))(*(_DWORD *)v10 + 32))( /*0xffe3f814*/
v10,
&unk_FFE4353C,
0,
&Descriptor,
StatusCodePpiBuffer);
Status_1 = Status_2; /*0xffe3f817*/
if ( Status_2 >= 0 ) /*0xffe3f81e*/
{
StatusCodePpi = Descriptor2; /*0xffe3f848*/
v14 = GetPeiServices(); /*0xffe3f84b*/
Status_3 = (*(int ( **)(int, int, void *))(*(_DWORD *)v14 + 28))(v14, StatusCodePpi, &unk_FFE4367C); /*0xffe3f859*/
Status_1 = Status_3; /*0xffe3f85c*/
if ( Status_3 >= 0 ) /*0xffe3f863*/
{
Descriptor_1 = Descriptor; /*0xffe3f894*/
v18 = GetPeiServices(); /*0xffe3f897*/
Status_4 = (*(int ( **)(int, int, void *))(*(_DWORD *)v18 + 28))(v18, Descriptor_1, &unk_FFE435B8); /*0xffe3f8a5*/
Status_1 = Status_4; /*0xffe3f8a8*/
if ( Status_4 < 0 ) /*0xffe3f8af*/
{
DebugPrint(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", Status_4); /*0xffe3f8c0*/
v20 = LocateReportStatusCodePpi(); /*0xffe3f8c8*/
if ( v20 ) /*0xffe3f8cf*/
(*(void ( **)(const char *, int, const char *))(v20 + 4))( /*0xffe3f8df*/
"e:\\hs\\AmiModulePkg\\AmiStatusCode\\StatusCodePei.c",
513,
"!EFI_ERROR (Status)");
}
}
else
{
DebugPrint(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", Status_3); /*0xffe3f870*/
v16 = LocateReportStatusCodePpi(); /*0xffe3f878*/
if ( v16 ) /*0xffe3f87f*/
(*(void ( **)(const char *, int, const char *))(v16 + 4))( /*0xffe3f88f*/
"e:\\hs\\AmiModulePkg\\AmiStatusCode\\StatusCodePei.c",
506,
"!EFI_ERROR (Status)");
}
}
else
{
DebugPrint(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", Status_2); /*0xffe3f82b*/
v12 = LocateReportStatusCodePpi(); /*0xffe3f833*/
if ( v12 ) /*0xffe3f83a*/
(*(void ( **)(const char *, int, const char *))(v12 + 4))( /*0xffe3f846*/
"e:\\hs\\AmiModulePkg\\AmiStatusCode\\StatusCodePei.c",
499,
"!EFI_ERROR (Status)");
}
}
else
{
DebugPrint(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", Status); /*0xffe3f7d0*/
ReportStatusCodePpi = LocateReportStatusCodePpi(); /*0xffe3f7d8*/
if ( ReportStatusCodePpi ) /*0xffe3f7df*/
(*(void ( **)(const char *, int, const char *))(ReportStatusCodePpi + 4))( /*0xffe3f7f0*/
"e:\\hs\\AmiModulePkg\\AmiStatusCode\\StatusCodePei.c",
486,
"!EFI_ERROR (Status)");
}
return Status_1; /*0xffe3f7f6*/
}
else
{
Index = 0; /*0xffe3f8e5*/
for ( i = PpiDescriptorPtr; i; i = (int (*)())dword_FFE427FC[Index++] ) /*0xffe3f8e7*/
i(); /*0xffe3f8f0*/
(*(void ( **)(int, void *))(*(_DWORD *)__return_address + 24))(__return_address, &unk_FFE435AC); /*0xffe3f908*/
StatusCodeAllocCallbackNode(This); /*0xffe3f90b*/
(*(void ( **)(int, void *))(*(_DWORD *)__return_address + 24))(__return_address, &unk_FFE435B8); /*0xffe3f918*/
return (*(int ( **)(int, void *))(*(_DWORD *)__return_address + 24))(__return_address, &unk_FFE4367C); /*0xffe3f923*/
}
}
int DebugAssertMsgs(int StatusCodeData, int _r_n)
{
int v2; // esi
int v3; // eax
v2 = StatusCodeData + 52; /*0xffe3f931*/
v3 = 0; /*0xffe3f934*/
if ( *(_BYTE *)(StatusCodeData + 52) ) /*0xffe3f936*/
{
do /*0xffe3f93b*/
++v3; /*0xffe3f93a*/
while ( *(_BYTE *)(v3 + v2) ); /*0xffe3f93b*/
}
SPrintAsciiFormat(
_r_n,
256,
(int)"ASSERT in %s on %i: %s\n",
(const char *)(StatusCodeData + 52),
*(_DWORD *)(StatusCodeData + 40),
(const char *)(v2 + v3 + 1));
return 0; /*0xffe3f95e*/
}
int StatusCodeToErrorStr(int n7, int _r_n)
{
int n7_1; // esi
int i; // eax
double v5; // [esp-4h] [ebp-8h]
n7_1 = ::n7; /*0xffe3f961*/
for ( i = 0; ; ++i )
{
if ( !n7_1 )
{
SPrintAsciiFormat(
_r_n,
256,
(int)"ERROR: Class:%X; Subclass:%X; Operation: %X\n",
n7 & 0xFF000000,
n7 & 0xFF0000,
(unsigned __int16)n7);
return 0; /*0xffe3f999*/
}
if ( n7_1 == n7 ) /*0xffe3f96d*/
break; /*0xffe3f96d*/
n7_1 = dword_FFE435E4[2 *i]; /*0xffe3f96f*/
}
LODWORD(v5) = (&off_FFE435E0)[2 *i]; // "Memory not installed" /*0xffe3f9a5*/
SPrintAsciiFormat(_r_n, 256, (int)"ERROR: %a\n", v5);
return 0; /*0xffe3f9a3*/
}
int StatusCodeFormatMsg(int CodeType, int Value, int StatusCodeData, _BYTE *Buffer)
{
char *SrcPtr; // esi
char *WideSrcPtr; // ebp
unsigned __int16 Index; // dx
int DataType; // eax
char CharByte; // al
__int16 CharSize; // ax
char WideCharByte; // al
int DataPtr; // ecx
if ( !StatusCodeData ) /*0xffe3f9d6*/
goto LABEL_24; /*0xffe3f9d6*/
if ( StrnCmp((_BYTE *)(StatusCodeData + 4), src_3) ) /*0xffe3f9e7*/
{
if ( !StrnCmp((_BYTE *)(StatusCodeData + 4), src_0) ) /*0xffe3fa69*/
{
AsciiSPrintUnicodeFormat( /*0xffe3fa8d*/
Buffer,
0x100u,
0,
(unsigned __int8 *)(StatusCodeData + 120),
va,
(unsigned __int16 *)(StatusCodeData + 24));
return 0; /*0xffe3fa95*/
}
if ( !StrnCmp((_BYTE *)(StatusCodeData + 4), src_1) ) /*0xffe3fa9f*/
{
if ( (_BYTE)CodeType != 2 ) /*0xffe3faac*/
return 0; /*0xffe3faac*/
if ( (CodeType & 0xFF000000) == 0x90000000 && (_WORD)Value == 7 ) /*0xffe3fac0*/
{
DataPtr = StatusCodeData; /*0xffe3fac2*/
LABEL_23:
DebugAssertMsgs(DataPtr, (int)Buffer); /*0xffe3fadb*/
return 0; /*0xffe3fae4*/
}
LABEL_25:
StatusCodeToErrorStr(Value, (int)Buffer); /*0xffe3faeb*/
return 0; /*0xffe3faf1*/
}
if ( !StrnCmp((_BYTE *)(StatusCodeData + 4), src_2) ) /*0xffe3face*/
{
DataPtr = StatusCodeData + 20; /*0xffe3fad8*/
goto LABEL_23; /*0xffe3fad8*/
}
LABEL_24:
if ( (_BYTE)CodeType != 2 ) /*0xffe3fae9*/
return 0; /*0xffe3fae9*/
goto LABEL_25; /*0xffe3fae9*/
}
SrcPtr = *(char **)(StatusCodeData + 24); /*0xffe3f9f1*/
WideSrcPtr = SrcPtr; /*0xffe3f9f4*/
for ( Index = 0; ; Index += CharSize ) /*0xffe3f9fa*/
{
DataType = *(_DWORD *)(StatusCodeData + 20); /*0xffe3f9fe*/
if ( (DataType || !*SrcPtr) && (DataType != 1 || !*(_WORD *)WideSrcPtr) ) /*0xffe3fa10*/
break; /*0xffe3fa10*/
if ( Index >= 0xFFu ) /*0xffe3fa1e*/
break; /*0xffe3fa1e*/
if ( DataType ) /*0xffe3fa22*/
{
WideCharByte = *WideSrcPtr; /*0xffe3fa37*/
WideSrcPtr += 2; /*0xffe3fa3a*/
Buffer[Index] = WideCharByte; /*0xffe3fa42*/
CharSize = 2; /*0xffe3fa45*/
}
else
{
CharByte = *SrcPtr++; /*0xffe3fa24*/
Buffer[Index] = CharByte; /*0xffe3fa2a*/
CharSize = 1; /*0xffe3fa2f*/
}
}
Buffer[Index] = 0; /*0xffe3fa59*/
return 0; /*0xffe3faf8*/
}
int SetMem16(int a1, char *_r_n)
{
char *_r_n_1; // ecx
int n2; // edx
char *v4; // esi
char n10; // al
_r_n_1 = _r_n; /*0xffe3fafe*/
n2 = 0; /*0xffe3fb02*/
if ( _r_n && *_r_n ) /*0xffe3fb08*/
{
do /*0xffe3fb43*/
{
v4 = &_r_n_1[n2]; /*0xffe3fb0d*/
n10 = _r_n_1[n2]; /*0xffe3fb10*/
if ( n10 == 13 && v4[1] == 10 ) /*0xffe3fb1a*/
{
n2 += 2; /*0xffe3fb1c*/
}
else if ( n10 == 10 ) /*0xffe3fb23*/
{
if ( n2 ) /*0xffe3fb27*/
ComPortPollLsrTx(_r_n_1, n2); /*0xffe3fb29*/
ComPortPollLsrTx("\r\n", 2); /*0xffe3fb36*/
_r_n_1 = v4 + 1; /*0xffe3fb3b*/
n2 = 0; /*0xffe3fb3e*/
}
else
{
++n2; /*0xffe3fb42*/
}
}
while ( _r_n_1[n2] ); /*0xffe3fb43*/
if ( n2 ) /*0xffe3fb4c*/
ComPortPollLsrTx(_r_n_1, n2); /*0xffe3fb4e*/
}
return 0; /*0xffe3fb55*/
}
int PpiDescriptorPtr()
{
ComPortInitialize(); /*0xffe3fb56*/
return 0; /*0xffe3fb5d*/
}
int ( *PeiServicesInstallPpi(int PeiServices, char *_r_n))(int a1, char *_r_n)
{
int v4; // esi
int ( *SetMem16_1)(int, char *); // eax
v4 = 0; /*0xffe3fb65*/
for ( SetMem16_1 = SetMem16; SetMem16_1; SetMem16_1 = (int ( *)(int, char *))dword_FFE427F4[v4++] ) /*0xffe3fb67*/
SetMem16_1(PeiServices, _r_n); /*0xffe3fb70*/
return SetMem16_1; /*0xffe3fb80*/
}
int SerialPortWrite(
int PeiServices,
int CodeType,
int Value,
int Instance,
int CallerId,
int StatusCodeData,
char *Buffer)
{
int Index1; // edi
void ( *Callback1)(int, unsigned __int8, int); // eax
int Index2; // edi
void ( *i)(int, int, __int16); // eax
int *HandlerTable; // eax
Index1 = 0; /*0xffe3fb90*/
for ( Callback1 = (void ( *)(int, unsigned __int8, int))BasePrintFillBuffer; /*0xffe3fb92*/
Callback1;
Callback1 = (void ( *)(int, unsigned __int8, int))*(&funcs_FFE3FB9C + Index1++) )
{
Callback1(PeiServices, CodeType, Value); /*0xffe3fb9c*/
}
*Buffer = 0; /*0xffe3fbba*/
StatusCodeFormatMsg(CodeType, Value, StatusCodeData, Buffer); /*0xffe3fbbc*/
if ( *Buffer ) /*0xffe3fbc1*/
PeiServicesInstallPpi(PeiServices, Buffer); /*0xffe3fbcc*/
Index2 = 0; /*0xffe3fbd1*/
for ( i = (void ( *)(int, int, __int16))BasePrintParseHexByte; /*0xffe3fbd3*/
i;
i = (void ( *)(int, int, __int16))dword_FFE427EC[Index2++] )
{
i(PeiServices, CodeType, Value); /*0xffe3fbe9*/
}
if ( (_BYTE)CodeType == 2 ) /*0xffe3fbfd*/
{
HandlerTable = ::HandlerTable; /*0xffe3fc06*/
if ( byte_FFE43E1C ) /*0xffe3fc0b*/
HandlerTable = (int *)&unk_FFE43E20; /*0xffe3fc0d*/
while ( *HandlerTable ) /*0xffe3fc25*/
{
if ( *HandlerTable == Value && HandlerTable[1] ) /*0xffe3fc18*/
{
((void ( *)(int, int))HandlerTable[1])(PeiServices, Value); /*0xffe3fc2b*/
return 0; /*0xffe3fc2b*/
}
HandlerTable += 2; /*0xffe3fc1e*/
}
}
return 0; /*0xffe3fc30*/
}
int BasePrintIsHexDigit(int a1, unsigned __int8 a2)
{
int result; // eax
result = a2; /*0xffe3fc37*/
__outbyte(0x80u, a2); /*0xffe3fc41*/
return result; /*0xffe3fc42*/
}
int BasePrintFillBuffer(int a1, unsigned __int8 a2, int a3)
{
unsigned int n2; // eax
int v4; // eax
int v5; // ebx
unsigned __int8 v6; // al
void ( *i)(int, unsigned __int8); // eax
unsigned __int8 v9; // [esp+Ch] [ebp+Ch]
n2 = a2 - 1; /*0xffe3fc4a*/
if ( n2 < 2 ) /*0xffe3fc4e*/
{
v4 = (int)*(&off_FFE4287C + n2); /*0xffe3fc50*/
v5 = 0; /*0xffe3fc58*/
while ( 1 ) /*0xffe3fc64*/
{
if ( !*(_DWORD *)v4 ) /*0xffe3fc64*/
{
v6 = 0; /*0xffe3fc6a*/
goto LABEL_7; /*0xffe3fc6a*/
}
if ( *(_DWORD *)v4 == a3 ) /*0xffe3fc5f*/
break; /*0xffe3fc5f*/
v4 += 8; /*0xffe3fc61*/
}
v6 = *(_BYTE *)(v4 + 4); /*0xffe3fc7a*/
LABEL_7:
v9 = v6; /*0xffe3fc6c*/
if ( v6 ) /*0xffe3fc71*/
{
for ( i = (void ( *)(int, unsigned __int8))BasePrintIsHexDigit; /*0xffe3fc73*/
i;
i = (void ( *)(int, unsigned __int8))funcs_FFE3FC85[v5++] )
{
i(a1, v9); /*0xffe3fc85*/
}
}
}
return 0; /*0xffe3fc98*/
}
int BasePrintProduceSChar(int a1, unsigned __int8 n2, int a3)
{
unsigned int n2_1; // esi
int i; // eax
unsigned __int8 v5; // al
int v6; // edi
n2_1 = n2 - 1; /*0xffe3fca5*/
if ( n2_1 < 2 ) /*0xffe3fcaa*/
{
for ( i = (int)*(&off_FFE42884 + n2_1); ; i += 8 ) /*0xffe3fcac*/
{
if ( !*(_DWORD *)i ) /*0xffe3fcbd*/
{
v5 = 0; /*0xffe3fcc3*/
goto LABEL_7; /*0xffe3fcc3*/
}
if ( *(_DWORD *)i == a3 ) /*0xffe3fcb8*/
break; /*0xffe3fcb8*/
}
v5 = *(_BYTE *)(i + 4); /*0xffe3fd01*/
LABEL_7:
if ( v5 ) /*0xffe3fcc7*/
{
v6 = v5; /*0xffe3fcc9*/
do /*0xffe3fce8*/
{
ComPortSetBaud(0xE56Cu, 0x61A80u); /*0xffe3fcd6*/
TimerDelay(0x186A0u); /*0xffe3fce0*/
--v6; /*0xffe3fce5*/
}
while ( v6 ); /*0xffe3fce8*/
}
if ( n2 == 2 ) /*0xffe3fced*/
TimerDelay(0xF4240u); /*0xffe3fcf4*/
}
return 0; /*0xffe3fcf9*/
}
int BasePrintParseHexByte(int a1, int a2, __int16 a3)
{
int v3; // esi
if ( (a3 & 0xFF00) == 0x8100 && (_BYTE)a3 ) /*0xffe3fd21*/
{
v3 = (unsigned __int8)a3; /*0xffe3fd23*/
do /*0xffe3fd42*/
{
ComPortSetBaud(0x33198u, 0x9C40u); /*0xffe3fd30*/
TimerDelay(0x186A0u); /*0xffe3fd3a*/
--v3; /*0xffe3fd3f*/
}
while ( v3 ); /*0xffe3fd42*/
}
return 0; /*0xffe3fd46*/
}
int LocateReportStatusCodePpi()
{
int PeiServices; // eax
_BYTE v2[4]; // [esp+0h] [ebp-8h] BYREF
int v3; // [esp+4h] [ebp-4h] BYREF
PeiServices = GetPeiServices(); /*0xffe3fd50*/
if ( (*(int ( **)(int, void *, _DWORD, _BYTE *, int *))(*(_DWORD *)PeiServices + 32))( /*0xffe3fd6f*/
PeiServices,
&unk_FFE4354C,
0,
v2,
&v3) >= 0 )
return v3; /*0xffe3fd75*/
else
return 0; /*0xffe3fd71*/
}
int DebugPrint(int a1, const char *a2, ...)
{
int result; // eax
int ( **v3)(int, const char *, char *); // esi
va_list va; // [esp+10h] [ebp+Ch] BYREF
va_start(va, a2);
result = LocateReportStatusCodePpi(); /*0xffe3fd7d*/
v3 = (int ( **)(int, const char *, char *))result; /*0xffe3fd82*/
if ( result ) /*0xffe3fd86*/
{
result = DebugEnabled(); /*0xffe3fd88*/
if ( (result & a1) != 0 ) /*0xffe3fd93*/
return (*v3)(a1, a2, (char *)va); /*0xffe3fd9f*/
}
return result; /*0xffe3fda4*/
}
int CpuDeadLoop(
int e:__hs__MdePkg__Library__PeiServicesTablePointerLibIdt__PeiServ,
int n48,
const char *PeiServices____((void__)_0))
{
int result; // eax
result = LocateReportStatusCodePpi(); /*0xffe3fdac*/
if ( result ) /*0xffe3fdb3*/
return (*(int ( **)(int, int, const char *))(result + 4))( /*0xffe3fdbb*/
e:__hs__MdePkg__Library__PeiServicesTablePointerLibIdt__PeiServ,
n48,
PeiServices____((void__)_0));
return result; /*0xffe3fdc1*/
}
int GetPeiServices()
{
int v0; // esi
_BYTE v2[2]; // [esp+4h] [ebp-8h] BYREF
int v3; // [esp+6h] [ebp-6h]
PeiServicesGetTss(v2); /*0xffe3fdcd*/
v0 = *(_DWORD *)(v3 - 4); /*0xffe3fdd5*/
if ( !v0 ) /*0xffe3fdda*/
CpuDeadLoop( /*0xffe3fde9*/
(int)"e:\\hs\\MdePkg\\Library\\PeiServicesTablePointerLibIdt\\PeiServicesTablePointer.c",
48,
"PeiServices != ((void *) 0)");
return v0; /*0xffe3fdf1*/
}
unsigned int AsciiSPrint(
_BYTE *p__r_n,
unsigned int n0xF4240,
unsigned __int8 *ASSERT_%a(%d):_%a_n_Press_any_key_to_continue.__n,
...)
{
va_list va; // [esp+10h] [ebp+10h] BYREF
va_start(va, ASSERT_%a(%d):_%a_n_Press_any_key_to_continue.__n);
return AsciiSPrintUnicodeFormat(p__r_n, n0xF4240, 0, ASSERT_%a(%d):_%a_n_Press_any_key_to_continue.__n, (int)va, 0); /*0xffe3fe13*/
}
_BYTE *BasePrintFillChar(_BYTE *a1, unsigned int a2, int i, __int16 a4, int a5)
{
int j; // esi
for ( j = 0; j < i; ++j ) /*0xffe3fe20*/
{
if ( (unsigned int)a1 >= a2 ) /*0xffe3fe27*/
break; /*0xffe3fe27*/
*a1 = a4; /*0xffe3fe2d*/
if ( a5 != 1 ) /*0xffe3fe2f*/
a1[1] = HIBYTE(a4); /*0xffe3fe36*/
a1 += a5; /*0xffe3fe39*/
}
return a1; /*0xffe3fe42*/
}
_BYTE *SPrintMarker(_BYTE *_r_n, unsigned int n16, int a3, unsigned int a4)
{
_BYTE *_r_n_1; // esi
int ReportStatusCodePpi; // eax
int v7; // eax
int v8; // edx
unsigned __int64 v9; // rtt
unsigned int v11; // [esp-4h] [ebp-1Ch]
int v12; // [esp+Ch] [ebp-Ch] BYREF
int *v13; // [esp+10h] [ebp-8h]
unsigned int n16_1; // [esp+14h] [ebp-4h]
_r_n_1 = _r_n; /*0xffe3fe4f*/
v13 = &v12; /*0xffe3fe57*/
n16_1 = n16; /*0xffe3fe5a*/
*_r_n = 0; /*0xffe3fe5d*/
do /*0xffe3fe9e*/
{
if ( !n16 ) /*0xffe3fe62*/
{
ReportStatusCodePpi = LocateReportStatusCodePpi(); /*0xffe3fe64*/
if ( ReportStatusCodePpi ) /*0xffe3fe6b*/
(*(void ( **)(const char *, int, const char *))(ReportStatusCodePpi + 4))( /*0xffe3fe79*/
"e:\\hs\\MdePkg\\Library\\BaseLib\\DivU64x32Remainder.c",
47,
"Divisor != 0");
}
v11 = a4 / n16_1; /*0xffe3fe89*/
LODWORD(v9) = a3; /*0xffe3fe8d*/
HIDWORD(v9) = a4 % n16_1; /*0xffe3fe8d*/
v7 = v9 / n16_1; /*0xffe3fe8d*/
v8 = v9 % n16_1; /*0xffe3fe8d*/
if ( v13 ) /*0xffe3fe92*/
*v13 = v8; /*0xffe3fe94*/
++_r_n_1; /*0xffe3fe9a*/
a3 = v7; /*0xffe3fe9b*/
a4 = v11; /*0xffe3fea0*/
*_r_n_1 = byte_FFE42EBC[v12]; /*0xffe3fea9*/
}
while ( v11 | v7 ); /*0xffe3fe9e*/
return _r_n_1; /*0xffe3fead*/
}
unsigned int PciCf8Read(_BYTE *_r_n, unsigned int n38, __int16 a3, char *%02d_%02d_%04d__%02d:%02d, ...)
{
va_list va; // [esp+18h] [ebp+18h] BYREF
va_start(va, %02d_%02d_%04d__%02d:%02d);
return AsciiSPrintUnicodeFormat(_r_n, n38, a3, (unsigned __int8 *)%02d_%02d_%04d__%02d:%02d, (int)va, 0); /*0xffe40b1a*/
}
int PpiListIteratorInit()
{
int PeiServices; // eax
int v1; // eax
int ReportStatusCodePpi; // eax
int v3; // eax
int v5; // [esp+4h] [ebp-4h] BYREF
PeiServices = GetPeiServices(); /*0xffe40b21*/
v1 = (*(int ( **)(int, int *))(*(_DWORD *)PeiServices + 48))(PeiServices, &v5); /*0xffe40b2d*/
if ( v1 < 0 ) /*0xffe40b39*/
{
DebugPrint(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v1); /*0xffe40b46*/
ReportStatusCodePpi = LocateReportStatusCodePpi(); /*0xffe40b4e*/
if ( ReportStatusCodePpi ) /*0xffe40b55*/
(*(void ( **)(char *, int, const char *))(ReportStatusCodePpi + 4))( /*0xffe40b5f*/
"e:\\hs\\MdePkg\\Library\\PeiHobLib\\HobLib.c",
50,
"!EFI_ERROR (Status)");
}
if ( !v5 ) /*0xffe40b69*/
{
v3 = LocateReportStatusCodePpi(); /*0xffe40b6b*/
if ( v3 ) /*0xffe40b72*/
(*(void ( **)(char *, int, const char *))(v3 + 4))( /*0xffe40b7c*/
"e:\\hs\\MdePkg\\Library\\PeiHobLib\\HobLib.c",
51,
"HobList != ((void *) 0)");
}
return v5; /*0xffe40b85*/
}
_WORD *PpiListIteratorNext(int a1, _WORD *i)
{
_WORD *i_1; // esi
int ReportStatusCodePpi; // eax
i_1 = i; /*0xffe40b8b*/
if ( !i ) /*0xffe40b8f*/
{
ReportStatusCodePpi = LocateReportStatusCodePpi(); /*0xffe40b91*/
if ( ReportStatusCodePpi ) /*0xffe40b98*/
(*(void ( **)(char *, int, const char *))(ReportStatusCodePpi + 4))( /*0xffe40ba6*/
"e:\\hs\\MdePkg\\Library\\PeiHobLib\\HobLib.c",
82,
"HobStart != ((void *) 0)");
}
while ( 1 ) /*0xffe40bbf*/
{
if ( *i_1 == 0xFFFF ) /*0xffe40bc5*/
return 0; /*0xffe40bca*/
if ( *i_1 == 4 ) /*0xffe40bb7*/
break; /*0xffe40bb7*/
i_1 = (_WORD *)((char *)i_1 + (unsigned __int16)i_1[1]); /*0xffe40bbd*/
}
return i_1; /*0xffe40bc9*/
}
_WORD *__thiscall FindGuidInPpiList(char *this)
{
_WORD *i; // edx
int v3; // ecx
_WORD *v4; // eax
_WORD *v5; // esi
for ( i = (_WORD *)PpiListIteratorInit(); ; i = (_WORD *)((char *)v5 + (unsigned __int16)v5[1]) ) /*0xffe40bde*/
{
v4 = PpiListIteratorNext(v3, i); /*0xffe40bf6*/
v5 = v4; /*0xffe40bfb*/
if ( !v4 || GuidCompare(this, (int)(v4 + 4)) ) /*0xffe40be7*/
break; /*0xffe40be7*/
}
return v5; /*0xffe40c01*/
}
int StrnCmp(_BYTE *a1, _BYTE *src)
{
_BYTE *v2; // esi
_BYTE *v3; // edi
int n4; // ebx
int v5; // ecx
v2 = a1; /*0xffe40c0b*/
v3 = a1 + 16; /*0xffe40c10*/
n4 = (unsigned __int8)a1 & 3; /*0xffe40c13*/
if ( ((unsigned __int8)a1 & 3) != 0 && n4 == ((unsigned __int8)src & 3) ) /*0xffe40c1f*/
{
v5 = 4 - n4; /*0xffe40c24*/
if ( n4 != 4 ) /*0xffe40c26*/
{
do /*0xffe40c33*/
{
if ( *v2 != *src ) /*0xffe40c2c*/
break; /*0xffe40c2c*/
++v2; /*0xffe40c2e*/
++src; /*0xffe40c2f*/
--v5; /*0xffe40c30*/
}
while ( v5 ); /*0xffe40c33*/
}
}
while ( v2 <= v3 - 4 && *(_DWORD *)v2 == *(_DWORD *)src ) /*0xffe40c3e*/
{
v2 += 4; /*0xffe40c40*/
src += 4; /*0xffe40c43*/
}
while ( 1 ) /*0xffe40c54*/
{
if ( v2 >= v3 ) /*0xffe40c56*/
return 0; /*0xffe40c5d*/
if ( *v2 != *src ) /*0xffe40c50*/
break; /*0xffe40c50*/
++v2; /*0xffe40c52*/
++src; /*0xffe40c53*/
}
return (char)*v2 - (char)*src; /*0xffe40c5a*/
}
_BYTE *NumberToString(_BYTE *a1, unsigned int n10, __int64 n0xA, char a4)
{
int v4; // ebx
int _EDX; // edx
int n0xA_1; // ecx
char v9; // al
v4 = HIDWORD(n0xA); /*0xffe40c69*/
if ( n0xA >= 0 ) /*0xffe40c7a*/
goto LABEL_2; /*0xffe40c7a*/
if ( n10 == 10 ) /*0xffe40c89*/
{
n0xA_1 = -(int)n0xA; /*0xffe40c8f*/
_EDX = (unsigned __int64)-n0xA >> 32; /*0xffe40c94*/
goto LABEL_8; /*0xffe40c96*/
}
if ( a4 ) /*0xffe40c9d*/
LABEL_2:
_EDX = HIDWORD(n0xA); /*0xffe40c82*/
else
_EDX = 0; /*0xffe40c9f*/
n0xA_1 = n0xA; /*0xffe40ca1*/
LABEL_8:
if ( __PAIR64__(n0xA_1, _EDX) ) /*0xffe40ca7*/
{
do /*0xffe40cd0*/
{
n0xA_1 = Udiv64Remainder(n10, (unsigned int *)&n0xA, n0xA_1, _EDX); /*0xffe40cb8*/
if ( (unsigned int)n0xA >= 0xA ) /*0xffe40cc1*/
v9 = n0xA + 87; /*0xffe40cc7*/
else
v9 = n0xA + 48; /*0xffe40cc3*/
*a1++ = v9; /*0xffe40cc9*/
}
while ( __PAIR64__(n0xA_1, _EDX) ); /*0xffe40cd0*/
}
else
{
*a1++ = 48; /*0xffe40cd4*/
}
if ( n10 == 10 && v4 < 0 ) /*0xffe40cdf*/
*a1++ = 45; /*0xffe40ce7*/
*a1 = 0; /*0xffe40cec*/
return a1 - 1; /*0xffe40ceb*/
}
char *StringReverse(char *a1, unsigned int n10, __int64 n0xA, char a4)
{
char *v5; // esi
char *v6; // eax
char v7; // dl
v5 = a1; /*0xffe40d02*/
v6 = NumberToString(a1, n10, n0xA, a4); /*0xffe40d08*/
if ( a1 < v6 ) /*0xffe40d12*/
{
do /*0xffe40d20*/
{
v7 = *v5; /*0xffe40d16*/
*v5++ = *v6; /*0xffe40d18*/
*v6-- = v7; /*0xffe40d1b*/
}
while ( v5 < v6 ); /*0xffe40d20*/
}
return a1; /*0xffe40d24*/
}
unsigned int AsciiStrDecimalToUintn(char *a1, char **p_Status_Code:_%X)
{
char v2; // bl
unsigned int n0x7FFFFFFF; // esi
char n57; // al
char n10; // al
char v7; // [esp+Ch] [ebp-4h]
v2 = 1; /*0xffe40d2d*/
v7 = 0; /*0xffe40d31*/
n0x7FFFFFFF = 0; /*0xffe40d35*/
while ( *a1 == 32 || *a1 == 9 ) /*0xffe40d3f*/
++a1; /*0xffe40d41*/
if ( !*a1 ) /*0xffe40d44*/
{
*p_Status_Code:_%X = a1; /*0xffe40d4a*/
return 0; /*0xffe40d4e*/
}
if ( *a1 == 45 ) /*0xffe40d52*/
{
v2 = -1; /*0xffe40d54*/
++a1; /*0xffe40d57*/
}
if ( *a1 == 43 ) /*0xffe40d5b*/
++a1; /*0xffe40d5d*/
while ( 1 ) /*0xffe40d64*/
{
n57 = *a1; /*0xffe40d64*/
if ( *a1 >= 48 && n57 <= 57 ) /*0xffe40d6c*/
{
n10 = n57 - 48; /*0xffe40d6e*/
goto LABEL_17; /*0xffe40d70*/
}
if ( (n57 & 0xDFu) < 0x41 || (n57 & 0xDFu) > 0x5A ) /*0xffe40d7f*/
break; /*0xffe40d7f*/
n10 = (n57 & 0xDF) - 55; /*0xffe40d83*/
LABEL_17:
if ( n10 >= 10 ) /*0xffe40d8b*/
break; /*0xffe40d8b*/
n0x7FFFFFFF = n10 + 10 *n0x7FFFFFFF; /*0xffe40d90*/
if ( v2 == 1 ) /*0xffe40d95*/
{
if ( n0x7FFFFFFF < 0x80000000 ) /*0xffe40d99*/
goto LABEL_23; /*0xffe40d99*/
}
else if ( n0x7FFFFFFF <= 0x80000000 ) /*0xffe40d9f*/
{
goto LABEL_23; /*0xffe40d9f*/
}
v7 = 1; /*0xffe40da1*/
LABEL_23:
++a1; /*0xffe40da6*/
}
*p_Status_Code:_%X = a1; /*0xffe40da9*/
if ( v7 ) /*0xffe40db0*/
{
n0x7FFFFFFF = 0x7FFFFFFF; /*0xffe40db2*/
if ( v2 == -1 ) /*0xffe40dba*/
n0x7FFFFFFF = 0x80000000; /*0xffe40dbc*/
}
return n0x7FFFFFFF *v2; /*0xffe40dc5*/
}
char *__thiscall AsciiStrToUpper(char *this)
{
char *i; // eax
char n122; // dl
for ( i = this; *i; ++i ) /*0xffe40dca*/
{
n122 = *i; /*0xffe40dd1*/
if ( *i >= 97 && n122 <= 122 ) /*0xffe40ddb*/
*i = n122 - 32; /*0xffe40de0*/
}
return this; /*0xffe40dea*/
}
char *SPrintUnicodeFormat(int p_StatusText, char *Status_Code:_%X, ...)
{
va_list va; // [esp+Ch] [ebp+Ch] BYREF
va_start(va, Status_Code:_%X);
return (char *)SPrintAsciiFormatWorker(p_StatusText, 0, Status_Code:_%X, va); /*0xffe40e01*/
}
char *EfiStatusToStr(int n2)
{
unsigned int n3; // edx
if ( !n2 ) /*0xffe40e04*/
return "EFI_SUCCESS"; /*0xffe40e0b*/
if ( n2 < 0 ) /*0xffe40e0c*/
{
n3 = n2 & 0x1FFFFFFF; /*0xffe40e42*/
if ( (n2 & 0xA0000000) == 0xA0000000 ) /*0xffe40e4b*/
{
if ( n3 >= 3 ) /*0xffe40e50*/
return 0; /*0xffe40e50*/
// "EFI_INTERRUPT_PENDING"
return &MEMORY[0xFFE43964][25 *n3]; /*0xffe40e55*/
}
else if ( (n2 & 0xC0000000) == 0xC0000000 ) /*0xffe40e64*/
{
if ( n3 > 2 ) /*0xffe40e69*/
return 0; /*0xffe40e69*/
// "ABLE_YET"
return &MEMORY[0xFFE439A3][25 *n3]; /*0xffe40e6e*/
}
else
{
if ( n3 > 0x1E ) /*0xffe40e78*/
return 0; /*0xffe40e78*/
// "E_BOF"
return &MEMORY[0xFFE439DB][25 *n3]; /*0xffe40e7d*/
}
}
else if ( (n2 & 0x20000000) != 0 ) /*0xffe40e14*/
{
if ( (unsigned int)n2 >= 2 ) /*0xffe40e19*/
return 0; /*0xffe40e1d*/
// "EFI_WARN_INTERRUPT_SOURCE_PENDING"
return &MEMORY[0xFFE4391C][35 *n2]; /*0xffe40e21*/
}
else
{
if ( (unsigned int)n2 > 4 ) /*0xffe40e2a*/
return 0; /*0xffe40e2a*/
return (char *)&unk_FFE4389A + 26 *n2; /*0xffe40e2f*/
}
}
int SPrintAsciiFormat(int a1, int a2, int a3, ...)
{
va_list va; // [esp+14h] [ebp+14h] BYREF
va_start(va, a3);
return SPrintAsciiFormatWorker(a3, va); /*0xffe41215*/
}
int SPrintGuidMarker(int n8, unsigned __int16 **p_i)
{
unsigned __int16 *i; // ecx
int n4; // eax
if ( !p_i ) /*0xffe41219*/
return -2147483646; /*0xffe4121b*/
i = *p_i; /*0xffe41221*/
if ( **p_i == 0xFFFF ) /*0xffe4122c*/
return -2147483634; /*0xffe41241*/
while ( 1 ) /*0xffe41232*/
{
i = (unsigned __int16 *)((char *)i + i[1]); /*0xffe41232*/
n4 = *i; /*0xffe41234*/
if ( n4 == 4 ) /*0xffe4123a*/
break; /*0xffe4123a*/
if ( (_WORD)n4 == 0xFFFF ) /*0xffe4123f*/
return -2147483634; /*0xffe4123f*/
}
*p_i = i; /*0xffe41248*/
return 0; /*0xffe41220*/
}
int SPrintScanGuid(int n8, unsigned __int16 **p_i)
{
unsigned __int16 *i_1; // edi
int v4; // eax
int result; // eax
int n8_2; // ecx
int n8_1; // [esp-4h] [ebp-10h]
unsigned __int16 *i; // [esp+8h] [ebp-4h] BYREF
if ( !p_i ) /*0xffe41258*/
return -2147483646; /*0xffe4128b*/
i = *p_i; /*0xffe4125c*/
while ( 1 ) /*0xffe4127a*/
{
result = SPrintGuidMarker(n8, &i); /*0xffe4127a*/
if ( result < 0 ) /*0xffe41281*/
break; /*0xffe41281*/
i_1 = i; /*0xffe41261*/
n8_1 = n8_2; /*0xffe41269*/
v4 = StrnCmp((_BYTE *)i + 8, src); /*0xffe4126d*/
n8 = n8_1; /*0xffe41272*/
if ( !v4 ) /*0xffe41275*/
{
*p_i = i_1; /*0xffe41285*/
return 0; /*0xffe41289*/
}
}
return result; /*0xffe41290*/
}
int Udiv64Remainder(unsigned int _EDI, unsigned int *p_n0xA, int n0xA, int _EDX)
{
int n0xA_1; // eax
int n64; // ecx
n0xA_1 = n0xA; /*0xffe412a5*/
_EDX = _EDX; /*0xffe412a8*/
_EDI = 0; /*0xffe412ae*/
n64 = 64; /*0xffe412b0*/
do
{
__asm /*0xffe412b7*/
{
rcl edx, 1
rcl edi, 1
}
n0xA_1 = 2 *n0xA_1 + (_EDI >= _EDI); /*0xffe412c0*/
_EDI = _EDI - (_EDI >= _EDI ? _EDI : 0);
--n64; /*0xffe412c6*/
}
while ( n64 );
if ( p_n0xA ) /*0xffe412d9*/
*p_n0xA = _EDI; /*0xffe412de*/
return n0xA_1; /*0xffe412d4*/
}
unsigned int TimerDelayLoop(unsigned int a1)
{
unsigned int v1; // esi
unsigned int n0x400000; // edi
unsigned __int32 v3; // ebx
unsigned int result; // eax
v1 = a1 >> 22; /*0xffe412f7*/
n0x400000 = a1 & 0x3FFFFF; /*0xffe412fa*/
do /*0xffe41332*/
{
v3 = n0x400000 + (IoPortRead32(0x508u) & 0xFFFFFF); /*0xffe4130f*/
n0x400000 = 0x400000; /*0xffe41311*/
while ( ((v3 - IoPortRead32(0x508u)) & 0x800000) == 0 ) /*0xffe4132b*/
_mm_pause(); /*0xffe41318*/
result = v1--; /*0xffe4132d*/
}
while ( result ); /*0xffe41332*/
return result; /*0xffe41334*/
}
unsigned int __thiscall TimerDelay(unsigned int n100000)
{
unsigned __int64 v2; // rtt
LODWORD(v2) = 3579545 *n100000; /*0xffe4136f*/
HIDWORD(v2) = ((3579545 * (unsigned __int64)n100000) >> 32) % 0xF4240; /*0xffe4136f*/
TimerDelayLoop(v2 / 0xF4240); /*0xffe41374*/
return n100000; /*0xffe4137b*/
}
int ComPortGetBase()
{
unsigned __int8 n33; // al
__outbyte(0x72u, 0x5Cu); /*0xffe4138a*/
n33 = __inbyte(0x73u); /*0xffe41391*/
return n33 != 33 ? 1016 : 760;
}
int __thiscall ComPortInitialize(void *this)
{
int result; // eax
unsigned __int8 v2; // al
unsigned int n115200; // ecx
unsigned int v4; // ebx
int Base; // eax
unsigned __int16 Base_1; // di
unsigned __int16 v7; // bp
unsigned __int8 v8; // al
unsigned __int8 v9; // cl
unsigned __int8 v10; // al
unsigned __int8 v11; // al
int v12; // esi
unsigned __int8 v13; // al
int v14; // esi
unsigned __int8 v15; // al
unsigned __int8 v16; // al
result = PciCfgInit((unsigned int)this); /*0xffe413a6*/
if ( result >= 0 )
{
__outbyte(0x72u, 0x5Cu); /*0xffe413bc*/
__inbyte(0x73u); /*0xffe413c3*/
__outbyte(0x72u, 0x6Cu); /*0xffe413c9*/
v2 = __inbyte(0x73u); /*0xffe413cd*/
switch ( v2 )
{
case 0xA7:
n115200 = 115200; /*0xffe413d7*/
break;
case 0xA6:
n115200 = 57600; /*0xffe413df*/
break;
case 0xA5:
n115200 = 38400; /*0xffe413ea*/
break;
case 0xA4:
n115200 = 19200; /*0xffe413f5*/
break;
default:
n115200 = v2 != 0xA3 ? 115200 : 9600;
break;
}
v4 = 0x1C200 / n115200; /*0xffe41414*/
Base = ComPortGetBase(); /*0xffe41416*/
Base_1 = Base; /*0xffe4141b*/
if ( Base ) /*0xffe4141f*/
{
v7 = Base + 3; /*0xffe41429*/
v8 = __inbyte(Base + 3); /*0xffe4142f*/
v9 = v8; /*0xffe41430*/
v10 = __inbyte(Base_1 + 3); /*0xffe41432*/
__outbyte(Base_1 + 3, v10 | 0x80); /*0xffe41435*/
v11 = __inbyte(Base_1 + 1); /*0xffe41439*/
v12 = v11 << 8; /*0xffe4143d*/
v13 = __inbyte(Base_1); /*0xffe41443*/
v14 = v13 | v12; /*0xffe41447*/
v15 = __inbyte(Base_1 + 3); /*0xffe4144c*/
__outbyte(Base_1 + 3, v15 & 0x7F); /*0xffe4144f*/
if ( (((v9 & 0x3F) == 3) & (unsigned __int8)((v14 != v4) - 1)) == 0 ) /*0xffe41462*/
{
do /*0xffe4146f*/
v16 = __inbyte(Base_1 + 5); /*0xffe4146a*/
while ( (v16 & 0x60) != 0x60 ); /*0xffe4146f*/
__outbyte(v7, 0x80u); /*0xffe41476*/
__outbyte(Base_1 + 1, BYTE1(v4)); /*0xffe4147f*/
__outbyte(Base_1, v4); /*0xffe41485*/
__outbyte(v7, 3u); /*0xffe4148b*/
__outbyte(Base_1 + 2, 0); /*0xffe41494*/
__outbyte(Base_1 + 2, 1u); /*0xffe41497*/
__outbyte(Base_1 + 4, 0); /*0xffe414a0*/
}
return 0; /*0xffe414a1*/
}
else
{
return -2147483641; /*0xffe41421*/
}
}
return result; /*0xffe414a8*/
}
int ComPortPollLsrTx(char *_r_n, int n2)
{
unsigned __int8 *_r_n_1; // ebp
int n0xFFFF; // esi
int Base; // eax
unsigned __int16 Base_1; // cx
unsigned __int16 v8; // cx
unsigned __int8 v9; // al
int v10; // ebx
unsigned __int8 v11; // al
unsigned int n0x10; // ebx
int n2_1; // [esp+Ch] [ebp-4h]
_r_n_1 = (unsigned __int8 *)_r_n; /*0xffe414ac*/
n0xFFFF = 0; /*0xffe414ae*/
if ( !_r_n ) /*0xffe414b5*/
return 0; /*0xffe414b5*/
Base = ComPortGetBase(); /*0xffe414bb*/
Base_1 = Base; /*0xffe414c0*/
if ( !Base ) /*0xffe414c4*/
return 0; /*0xffe414b9*/
if ( !n2 ) /*0xffe414c8*/
{
v8 = Base + 5; /*0xffe414ca*/
do /*0xffe414de*/
{
v9 = __inbyte(v8); /*0xffe414d0*/
if ( (v9 & 0x60) == 0x60 ) /*0xffe414d5*/
break; /*0xffe414d5*/
++n0xFFFF; /*0xffe414d7*/
}
while ( n0xFFFF != 0xFFFF ); /*0xffe414de*/
return 0; /*0xffe414de*/
}
n2_1 = n2; /*0xffe414e2*/
LABEL_10:
v10 = 0; /*0xffe414e7*/
while ( 1 ) /*0xffe414ef*/
{
v11 = __inbyte(Base_1 + 5); /*0xffe414ef*/
if ( (v11 & 0x40) != 0 ) /*0xffe414f2*/
break; /*0xffe414f2*/
if ( ++v10 == 0xFFFF ) /*0xffe414fb*/
return 0; /*0xffe414ff*/
}
n0x10 = 0; /*0xffe41501*/
while ( n2 ) /*0xffe41505*/
{
__outbyte(Base_1, *_r_n_1); /*0xffe4150d*/
++n0x10; /*0xffe4150e*/
--n2; /*0xffe4150f*/
++_r_n_1; /*0xffe41510*/
if ( n0x10 >= 0x10 ) /*0xffe41514*/
{
if ( n2 ) /*0xffe41518*/
goto LABEL_10; /*0xffe41518*/
return n2_1; /*0xffe41518*/
}
}
return n2_1; /*0xffe4151f*/
}
unsigned __int8 ComPortSetBaud(unsigned int n209304, unsigned int n40000)
{
__int16 v2; // cx
unsigned __int8 v3; // al
unsigned __int8 v4; // al
unsigned __int8 result; // al
v2 = ((n209304 >> 1) + 119318200) / n209304; /*0xffe41536*/
__outbyte(0x43u, 0x54u); /*0xffe41541*/
__outbyte(0x41u, 0x12u); /*0xffe4154a*/
__outbyte(0x43u, 0xB6u); /*0xffe41550*/
__outbyte(0x42u, v2); /*0xffe41559*/
__outbyte(0x42u, HIBYTE(v2)); /*0xffe4155f*/
v3 = __inbyte(0x61u); /*0xffe41566*/
__outbyte(0x61u, v3 | 3); /*0xffe41569*/
TimerDelay(n40000); /*0xffe4156c*/
v4 = __inbyte(0x61u); /*0xffe41574*/
result = v4 & 0xFC; /*0xffe41575*/
__outbyte(0x61u, result); /*0xffe41577*/
return result; /*0xffe41578*/
}
char __thiscall ProgressDisplay10(char *_10%)
{
int v2; // [esp-Ch] [ebp-5Ch]
int v3; // [esp-8h] [ebp-58h]
char v4; // [esp-4h] [ebp-54h]
int v5[20]; // [esp+0h] [ebp-50h] BYREF
SPrintUnicodeFormat((int)v5, "== Progress : %s ==", _10%);
return VideoDisplayProgress(9u, 0, 7, (int)v5, v2, v3, v4, v5[0]); /*0xffe415a3*/
}
void ProgressStatusCodeHandler(int PeiServices, unsigned __int8 StatusCode)
{
int StatusText; // [esp+8h] [ebp-50h] BYREF
SPrintUnicodeFormat((int)&StatusText, "Status Code: %X", StatusCode);
VideoDisplayProgress(0x18u, 0x3Eu, 7, &StatusText); /*0xffe415ce*/
DebugPrint(64, "Status Code: %X\n", StatusCode);
switch ( StatusCode )
{
case 0x11u:
ProgressDisplay10(" 10%"); /*0xffe416b5*/
VideoScrollBackground(0, 5u); /*0xffe416be*/
VideoDisplayProgress(0xBu, 0, 14, "UPI initialization: Starting...");
break;
case 0x19u:
ProgressDisplay10(" 20%"); /*0xffe4167d*/
VideoScrollBackground(5u, 0xAu); /*0xffe41686*/
VideoDisplayProgress(0xBu, 0, 7, "UPI initialization: Done ");
VideoDisplayProgress(0xCu, 0, 14, "Basic IO initialization: Starting... ");
break;
case 0x2Fu:
ProgressDisplay10(" 30%"); /*0xffe41651*/
VideoScrollBackground(0xAu, 0xFu); /*0xffe4165a*/
VideoDisplayProgress(0xCu, 0, 7, "Basic IO initialization: Done ");
VideoDisplayProgress(0xDu, 0, 14, "Memory initialization: Starting... ");
break;
case 0x33u:
ProgressDisplay10(" 40%"); /*0xffe41639*/
VideoScrollBackground(0xFu, 0x14u); /*0xffe41642*/
break;
case 0x4Fu:
ProgressDisplay10(" 50%"); /*0xffe4160d*/
VideoScrollBackground(0xFu, 0x19u); /*0xffe41616*/
VideoDisplayProgress(0xDu, 0, 7, "Memory initialization: Done ");
VideoDisplayProgress(0xEu, 0, 14, "UEFI kernel initialization: Starting... ");
break;
}
}
char IoOr32()
{
__int16 v0; // kr00_2
unsigned int v1; // esi
unsigned __int8 v2; // al
char v3; // bl
__int16 v5; // [esp+10h] [ebp-4h]
v0 = __readeflags(); /*0xffe416e0*/
v5 = v0; /*0xffe416e2*/
_disable(); /*0xffe416e6*/
v1 = IoPortRead32(0xCF8u); /*0xffe416fa*/
IoPortWrite32(0xCF8u, 0x8000FA44); /*0xffe416fc*/
v2 = __inbyte(0xCFCu); /*0xffe41707*/
v3 = v2 | 0x80; /*0xffe4170a*/
__outbyte(0xCFCu, v2 | 0x80); /*0xffe4170f*/
IoPortWrite32(0xCF8u, v1); /*0xffe41714*/
if ( (v5 & 0x200) != 0 ) /*0xffe41722*/
_enable(); /*0xffe41724*/
else
_disable(); /*0xffe41727*/
return v3; /*0xffe41728*/
}
int IoPortRead16(unsigned __int16 a1)
{
int ReportStatusCodePpi; // eax
int result; // eax
if ( (a1 & 1) != 0 ) /*0xffe41736*/
{
ReportStatusCodePpi = LocateReportStatusCodePpi(); /*0xffe41738*/
if ( ReportStatusCodePpi ) /*0xffe4173f*/
(*(void ( **)(char *, int, char *))(ReportStatusCodePpi + 4))((char *)-1822440, 133, (char *)-1822456); /*0xffe41750*/
}
LOWORD(result) = __inword(a1); /*0xffe41759*/
return (unsigned __int16)result; /*0xffe4175e*/
}
unsigned __int16 IoPortWrite16(unsigned __int16 a1, unsigned __int16 n1280)
{
int ReportStatusCodePpi; // eax
if ( (a1 & 1) != 0 ) /*0xffe4176a*/
{
ReportStatusCodePpi = LocateReportStatusCodePpi(); /*0xffe4176c*/
if ( ReportStatusCodePpi ) /*0xffe41773*/
(*(void ( **)(char *, int, char *))(ReportStatusCodePpi + 4))((char *)-1822440, 163, (char *)-1822456); /*0xffe41784*/
}
__outword(a1, n1280); /*0xffe41790*/
return n1280; /*0xffe41792*/
}
unsigned __int32 IoPortRead32(unsigned __int16 a1)
{
int ReportStatusCodePpi; // eax
if ( (a1 & 3) != 0 ) /*0xffe4179b*/
{
ReportStatusCodePpi = LocateReportStatusCodePpi(); /*0xffe4179d*/
if ( ReportStatusCodePpi ) /*0xffe417a4*/
(*(void ( **)(const char *, int, const char *))(ReportStatusCodePpi + 4))( /*0xffe417b5*/
"e:\\hs\\MdePkg\\Library\\BaseIoLibIntrinsic\\IoLibMsc.c",
193,
"(Port & 3) == 0");
}
return __indword(a1); /*0xffe417bf*/
}
unsigned int IoPortWrite32(unsigned __int16 a1, unsigned int a2)
{
int ReportStatusCodePpi; // eax
if ( (a1 & 3) != 0 ) /*0xffe417ca*/
{
ReportStatusCodePpi = LocateReportStatusCodePpi(); /*0xffe417cc*/
if ( ReportStatusCodePpi ) /*0xffe417d3*/
(*(void ( **)(const char *, int, const char *))(ReportStatusCodePpi + 4))( /*0xffe417e4*/
"e:\\hs\\MdePkg\\Library\\BaseIoLibIntrinsic\\IoLibMsc.c",
223,
"(Port & 3) == 0");
}
__outdword(a1, a2); /*0xffe417ef*/
return a2; /*0xffe417f0*/
}
__int16 IoPortWrite8(_WORD *a1, __int16 n1280)
{
int ReportStatusCodePpi; // eax
if ( ((unsigned __int8)a1 & 1) != 0 ) /*0xffe417fd*/
{
ReportStatusCodePpi = LocateReportStatusCodePpi(); /*0xffe417ff*/
if ( ReportStatusCodePpi ) /*0xffe41806*/
(*(void ( **)(char *, int, char *))(ReportStatusCodePpi + 4))((char *)-1822372, 183, (char *)-1822324); /*0xffe41817*/
}
*a1 = n1280; /*0xffe4181d*/
return n1280; /*0xffe41823*/
}
int DebugEnabled()
{
unsigned __int8 v0; // al
char n3; // al
char n3_1; // cl
v0 = __inbyte(0x70u); /*0xffe4182c*/
__outbyte(0x70u, v0 & 0x80 | 0x4A); /*0xffe41831*/
n3 = __inbyte(0x71u); /*0xffe41838*/
n3_1 = n3; /*0xffe41839*/
if ( (unsigned __int8)n3 <= 3u ) /*0xffe4183e*/
{
LABEL_4:
if ( !n3_1 ) /*0xffe41859*/
return 0; /*0xffe41859*/
goto LABEL_5; /*0xffe41859*/
}
n3_1 = n3; /*0xffe41840*/
if ( !n3 ) /*0xffe41848*/
{
n3_1 = MEMORY[0xFDAF0490] & 2 | 1; /*0xffe41854*/
goto LABEL_4; /*0xffe41854*/
}
LABEL_5:
if ( n3_1 != -1 )
return n3_1 != 1 ? -2147483578 : -2147483644;
return 0; /*0xffe41871*/
}
bool GuidCompare(char *this, int a2)
{
__int64 v4; // rax
int v5; // ebp
__int64 v6; // rax
int v7; // edi
__int64 v8; // kr00_8
__int64 v9; // rax
int v11; // [esp+10h] [ebp-Ch]
int v12; // [esp+14h] [ebp-8h]
v4 = GuidCopy(this); /*0xffe41880*/
v12 = HIDWORD(v4); /*0xffe41887*/
v5 = v4; /*0xffe4188b*/
v6 = GuidCopy((void *)a2); /*0xffe4188d*/
v11 = HIDWORD(v6); /*0xffe41895*/
v7 = v6; /*0xffe41899*/
v8 = GuidCopy(this + 8); /*0xffe418a7*/
v9 = GuidCopy((void *)(a2 + 8)); /*0xffe418a9*/
return v5 == v7 && v12 == v11 && v8 == v9; /*0xffe418cc*/
}
void *__thiscall PeiServicesGetTss(void *this)
{
void *this_1; // eax
if ( !this ) /*0xffe418da*/
CpuDeadLoop((int)"e:\\hs\\MdePkg\\Library\\BaseLib\\X86ReadIdtr.c", 37, "Idtr != ((void *) 0)"); /*0xffe418e9*/
this_1 = this; /*0xffe418ef*/
__sidt(this); /*0xffe418f2*/
return this_1; /*0xffe418f6*/
}
__int16 __thiscall PciReadBuffer(void *this)
{
int ReportStatusCodePpi; // eax
if ( !this ) /*0xffe418fc*/
{
ReportStatusCodePpi = LocateReportStatusCodePpi(); /*0xffe418fe*/
if ( ReportStatusCodePpi ) /*0xffe41905*/
(*(void ( **)(const char *, int, const char *))(ReportStatusCodePpi + 4))( /*0xffe41913*/
"e:\\hs\\MdePkg\\Library\\BaseLib\\Unaligned.c",
38,
"Buffer != ((void *) 0)");
}
return *(_WORD *)this; /*0xffe4191c*/
}
int __thiscall PciWriteBuffer(void *this)
{
int ReportStatusCodePpi; // eax
if ( !this ) /*0xffe41923*/
{
ReportStatusCodePpi = LocateReportStatusCodePpi(); /*0xffe41925*/
if ( ReportStatusCodePpi ) /*0xffe4192c*/
(*(void ( **)(const char *, int, const char *))(ReportStatusCodePpi + 4))( /*0xffe4193d*/
"e:\\hs\\MdePkg\\Library\\BaseLib\\Unaligned.c",
141,
"Buffer != ((void *) 0)");
}
return *(_DWORD *)this; /*0xffe41945*/
}
__int64 __thiscall GuidCopy(void *this)
{
int ReportStatusCodePpi; // eax
if ( !this ) /*0xffe4194c*/
{
ReportStatusCodePpi = LocateReportStatusCodePpi(); /*0xffe4194e*/
if ( ReportStatusCodePpi ) /*0xffe41955*/
(*(void ( **)(const char *, int, const char *))(ReportStatusCodePpi + 4))( /*0xffe41966*/
"e:\\hs\\MdePkg\\Library\\BaseLib\\Unaligned.c",
192,
"Buffer != ((void *) 0)");
}
return *(_QWORD *)this; /*0xffe41971*/
}
unsigned int PciCf8Write(_WORD *ASSERT_%a(%d):_%a_n_Press_any_key_to_continue.__n)
{
int ReportStatusCodePpi; // eax
unsigned int n0xF4240; // eax
if ( ((unsigned __int8)ASSERT_%a(%d):_%a_n_Press_any_key_to_continue.__n & 1) != 0 ) /*0xffe41979*/
{
ReportStatusCodePpi = LocateReportStatusCodePpi(); /*0xffe4197b*/
if ( ReportStatusCodePpi ) /*0xffe41982*/
(*(void ( **)(const char *, int, const char *))(ReportStatusCodePpi + 4))( /*0xffe41993*/
"e:\\hs\\MdePkg\\Library\\BaseLib\\SafeString.c",
128,
"((UINTN) String & 0x00000001) == 0");
}
if ( !ASSERT_%a(%d):_%a_n_Press_any_key_to_continue.__n ) /*0xffe4199b*/
return 0; /*0xffe419bd*/
n0xF4240 = 0; /*0xffe4199f*/
if ( *ASSERT_%a(%d):_%a_n_Press_any_key_to_continue.__n ) /*0xffe419a1*/
{
while ( n0xF4240 < 0xF4240 ) /*0xffe419ab*/
{
if ( !ASSERT_%a(%d):_%a_n_Press_any_key_to_continue.__n[++n0xF4240] ) /*0xffe419ae*/
return n0xF4240; /*0xffe419b2*/
}
return 1000001; /*0xffe419b6*/
}
return n0xF4240; /*0xffe419b4*/
}
unsigned int __thiscall PciCf8Modify(_BYTE *this)
{
unsigned int n0xF4240; // eax
n0xF4240 = 0; /*0xffe419c1*/
if ( this && *this ) /*0xffe419c7*/
{
while ( n0xF4240 < 0xF4240 ) /*0xffe419d0*/
{
if ( !*(this + ++n0xF4240) ) /*0xffe419d3*/
return n0xF4240; /*0xffe419d7*/
}
return 1000001; /*0xffe419da*/
}
return n0xF4240; /*0xffe419d9*/
}
unsigned int __thiscall VideoAsciiStrLen(_BYTE *this)
{
_BYTE *this_1; // esi
int ReportStatusCodePpi; // eax
unsigned int n0xF4240; // edi
int v4; // eax
this_1 = this; /*0xffe419e2*/
if ( !this ) /*0xffe419ec*/
{
ReportStatusCodePpi = LocateReportStatusCodePpi(); /*0xffe419ee*/
if ( ReportStatusCodePpi ) /*0xffe419f5*/
(*(void ( **)(char *, int, char *))(ReportStatusCodePpi + 4))((char *)-1822044, 1082, (char *)-1822004); /*0xffe41a02*/
}
n0xF4240 = 0; /*0xffe41a08*/
while ( *this_1 ) /*0xffe41a33*/
{
if ( n0xF4240 >= 0xF4240 ) /*0xffe41a12*/
{
v4 = LocateReportStatusCodePpi(); /*0xffe41a14*/
if ( v4 ) /*0xffe41a1b*/
(*(void ( **)(char *, int, char *))(v4 + 4))((char *)-1822044, 1090, (char *)-1821980); /*0xffe41a28*/
}
++this_1; /*0xffe41a2e*/
++n0xF4240; /*0xffe41a2f*/
}
return n0xF4240; /*0xffe41a37*/
}
int __thiscall PciCfgInit(void *This)
{
unsigned __int8 PlatformId; // al
char *IoConfigTable; // esi
int IoTableCount; // edi
void *ConfigTable; // edx
char *v5; // esi
int n2; // edi
unsigned int Index; // edi
int PciAddr; // esi
void *This_1; // [esp-4h] [ebp-14h]
void *This_2; // [esp-4h] [ebp-14h]
int Data; // [esp+Ch] [ebp-4h] BYREF
__outbyte(0x72u, 0x5Cu); /*0xffe41a6a*/
PlatformId = __inbyte(0x73u); /*0xffe41a71*/
if ( PlatformId == 33 ) /*0xffe41a74*/
{
IoConfigTable = (char *)&unk_FFE43D6E; /*0xffe41a78*/
IoTableCount = 3; /*0xffe41a7d*/
do /*0xffe41a96*/
{
IoReadEx((int)This, *((_WORD *)IoConfigTable - 1), *IoConfigTable, *(_DWORD *)(IoConfigTable + 2)); /*0xffe41a89*/
IoConfigTable += 8; /*0xffe41a8e*/
This = This_1; /*0xffe41a92*/
--IoTableCount; /*0xffe41a93*/
}
while ( IoTableCount ); /*0xffe41a96*/
ConfigTable = &unk_FFE43D9C; /*0xffe41a98*/
}
else
{
v5 = (char *)&unk_FFE43D8E; /*0xffe41aa1*/
n2 = 2; /*0xffe41aa6*/
do /*0xffe41abf*/
{
IoReadEx((int)This, *((_WORD *)v5 - 1), *v5, *(_DWORD *)(v5 + 2)); /*0xffe41ab2*/
v5 += 8; /*0xffe41ab7*/
This = This_2; /*0xffe41abb*/
--n2; /*0xffe41abc*/
}
while ( n2 ); /*0xffe41abf*/
ConfigTable = &unk_FFE43D3C; /*0xffe41ac1*/
}
CopyMemWrapper((int)This, (int)ConfigTable); /*0xffe41ac7*/
for ( Index = 0; Index < 18; Index += 3 ) /*0xffe41acf*/
{
PciAddr = (unsigned __int8)byte_FFE43DCC[Index *4] | 0x1E6E2000; /*0xffe41adc*/
PciCfgAddrWrite(PciAddr, &Data); /*0xffe41ae4*/
Data = dword_FFE43DD4[Index] | Data & dword_FFE43DD0[Index]; /*0xffe41afb*/
PciCfgWriteVerify(PciAddr, Data); /*0xffe41aff*/
}
return 0; /*0xffe41b0c*/
}
char PciCfgAddrWrite(int Address, int *DataOut)
{
unsigned __int8 ConfigByte; // al
unsigned __int8 ConfigByte2; // al
unsigned __int8 DataByte0; // al
unsigned __int8 DataByte0_1; // ah
unsigned __int8 DataByte1; // al
unsigned __int8 DataByte1_1; // cl
unsigned __int8 DataByte2; // al
unsigned __int8 DataByte2_1; // bl
unsigned __int8 DataByte3; // al
__outbyte(0x2Eu, 0xA5u); /*0xffe41b22*/
__outbyte(0x2Eu, 0xA5u); /*0xffe41b23*/
__outbyte(0x2Eu, 7u); /*0xffe41b26*/
__outbyte(0x2Fu, 0xDu); /*0xffe41b2f*/
__outbyte(0x2Eu, 0x30u); /*0xffe41b35*/
ConfigByte = __inbyte(0x2Fu); /*0xffe41b39*/
__outbyte(0x2Fu, ConfigByte | 1); /*0xffe41b3c*/
__outbyte(0x2Eu, 0xF0u); /*0xffe41b42*/
__outbyte(0x2Fu, HIBYTE(Address)); /*0xffe41b4b*/
__outbyte(0x2Eu, 0xF1u); /*0xffe41b51*/
__outbyte(0x2Fu, BYTE2(Address)); /*0xffe41b5a*/
__outbyte(0x2Eu, 0xF2u); /*0xffe41b60*/
__outbyte(0x2Fu, BYTE1(Address)); /*0xffe41b69*/
__outbyte(0x2Eu, 0xF3u); /*0xffe41b6f*/
__outbyte(0x2Fu, Address); /*0xffe41b75*/
__outbyte(0x2Eu, 0xF8u); /*0xffe41b7b*/
ConfigByte2 = __inbyte(0x2Fu); /*0xffe41b7f*/
__outbyte(0x2Fu, ConfigByte2 & 0xFC | 2); /*0xffe41b84*/
__outbyte(0x2Eu, 0xFEu); /*0xffe41b8a*/
__inbyte(0x2Fu); /*0xffe41b8e*/
__outbyte(0x2Eu, 0xF4u); /*0xffe41b94*/
DataByte0 = __inbyte(0x2Fu); /*0xffe41b98*/
DataByte0_1 = DataByte0; /*0xffe41b99*/
__outbyte(0x2Eu, 0xF5u); /*0xffe41ba0*/
DataByte1 = __inbyte(0x2Fu); /*0xffe41ba4*/
DataByte1_1 = DataByte1; /*0xffe41ba5*/
__outbyte(0x2Eu, 0xF6u); /*0xffe41bac*/
DataByte2 = __inbyte(0x2Fu); /*0xffe41bb0*/
DataByte2_1 = DataByte2; /*0xffe41bb1*/
__outbyte(0x2Eu, 0xF7u); /*0xffe41bb8*/
DataByte3 = __inbyte(0x2Fu); /*0xffe41bbc*/
*DataOut = DataByte3 | ((DataByte2_1 | ((DataByte1_1 | (DataByte0_1 << 8)) << 8)) << 8); /*0xffe41bd8*/
__outbyte(0x2Eu, 0xAAu); /*0xffe41bdf*/
return -86; /*0xffe41be0*/
}
char PciCfgWriteVerify(int Address, int Data)
{
unsigned __int8 ConfigByte; // al
unsigned __int8 ConfigByte2; // al
__outbyte(0x2Eu, 0xA5u); /*0xffe41bf2*/
__outbyte(0x2Eu, 0xA5u); /*0xffe41bf3*/
__outbyte(0x2Eu, 7u); /*0xffe41bf6*/
__outbyte(0x2Fu, 0xDu); /*0xffe41bff*/
__outbyte(0x2Eu, 0x30u); /*0xffe41c05*/
ConfigByte = __inbyte(0x2Fu); /*0xffe41c09*/
__outbyte(0x2Fu, ConfigByte | 1); /*0xffe41c0c*/
__outbyte(0x2Eu, 0xF0u); /*0xffe41c12*/
__outbyte(0x2Fu, HIBYTE(Address)); /*0xffe41c1b*/
__outbyte(0x2Eu, 0xF1u); /*0xffe41c21*/
__outbyte(0x2Fu, BYTE2(Address)); /*0xffe41c2a*/
__outbyte(0x2Eu, 0xF2u); /*0xffe41c30*/
__outbyte(0x2Fu, BYTE1(Address)); /*0xffe41c39*/
__outbyte(0x2Eu, 0xF3u); /*0xffe41c3f*/
__outbyte(0x2Fu, Address); /*0xffe41c45*/
__outbyte(0x2Eu, 0xF4u); /*0xffe41c4b*/
__outbyte(0x2Fu, HIBYTE(Data)); /*0xffe41c54*/
__outbyte(0x2Eu, 0xF5u); /*0xffe41c5a*/
__outbyte(0x2Fu, BYTE2(Data)); /*0xffe41c63*/
__outbyte(0x2Eu, 0xF6u); /*0xffe41c69*/
__outbyte(0x2Fu, BYTE1(Data)); /*0xffe41c72*/
__outbyte(0x2Eu, 0xF7u); /*0xffe41c78*/
__outbyte(0x2Fu, Data); /*0xffe41c7e*/
__outbyte(0x2Eu, 0xF8u); /*0xffe41c84*/
ConfigByte2 = __inbyte(0x2Fu); /*0xffe41c88*/
__outbyte(0x2Fu, ConfigByte2 & 0xFC | 2); /*0xffe41c8d*/
__outbyte(0x2Eu, 0xFEu); /*0xffe41c93*/
__outbyte(0x2Fu, 0xCFu); /*0xffe41c99*/
__outbyte(0x2Eu, 0xAAu); /*0xffe41c9f*/
return -86; /*0xffe41ca0*/
}
void VideoScrollBackground(unsigned __int8 StartRow, unsigned __int8 StartRow_1)
{
int FbSize; // edi
int FbBase; // esi
_WORD *FbInfo; // eax
int RowOffset; // edx
int WidthPixels; // ebx
int CurrentPtr; // edx
int LineDistance; // ecx
int NextLineBase; // ebp
int RowCount; // eax
unsigned int WidthPixels_3; // esi
unsigned int WidthPixels_2; // eax
int PixelPtr; // ecx
int FbDelta; // ebx
int WidthPixels_1; // [esp+8h] [ebp-Ch]
int n68; // [esp+Ch] [ebp-8h]
int LineDistance_1; // [esp+10h] [ebp-4h]
FbSize = 0; /*0xffe41cad*/
if ( StartRow <= StartRow_1 ) /*0xffe41cb1*/
{
FbBase = -1879048192; /*0xffe41cbe*/
FbInfo = FindGuidInPpiList(byte_FFE4355C); /*0xffe41cc3*/
if ( FbInfo && *((_BYTE *)FbInfo + 24) && (*((_DWORD *)FbInfo + 14) || *((_DWORD *)FbInfo + 15)) ) /*0xffe41cd7*/
{
FbSize = *((_DWORD *)FbInfo + 14); /*0xffe41cdc*/
FbBase = *((_DWORD *)FbInfo + 10); /*0xffe41cdf*/
}
RowOffset = 12 *StartRow; /*0xffe41ce5*/
WidthPixels = 3 * (StartRow_1 - StartRow + 1); /*0xffe41cf0*/
CurrentPtr = FbBase + RowOffset + 690728; /*0xffe41cf9*/
LineDistance = FbSize - FbBase; /*0xffe41cfb*/
LineDistance_1 = FbSize - FbBase; /*0xffe41cff*/
NextLineBase = FbSize - FbBase; /*0xffe41d03*/
RowCount = 68; /*0xffe41d07*/
WidthPixels_1 = WidthPixels; /*0xffe41d08*/
n68 = 68; /*0xffe41d0c*/
do /*0xffe41d7c*/
{
if ( FbSize ) /*0xffe41d12*/
NextLineBase = LineDistance + CurrentPtr; /*0xffe41d14*/
WidthPixels_3 = 0; /*0xffe41d17*/
if ( WidthPixels ) /*0xffe41d1b*/
{
WidthPixels_2 = WidthPixels_1; /*0xffe41d1d*/
PixelPtr = CurrentPtr + 1; /*0xffe41d21*/
FbDelta = NextLineBase - CurrentPtr; /*0xffe41d26*/
do /*0xffe41d61*/
{
if ( *(_BYTE *)(PixelPtr + 1) > 0x91u && *(_BYTE *)PixelPtr > 0x91u && *(_BYTE *)(PixelPtr - 1) > 0x91u ) /*0xffe41d37*/
{
*(_WORD *)PixelPtr = -13120; /*0xffe41d39*/
*(_BYTE *)(PixelPtr - 1) = 10; /*0xffe41d3e*/
if ( FbSize ) /*0xffe41d44*/
{
*(_BYTE *)(FbDelta + PixelPtr + 1) = -52; /*0xffe41d46*/
*(_BYTE *)(FbDelta + PixelPtr) = *(_BYTE *)PixelPtr; /*0xffe41d4d*/
*(_BYTE *)(NextLineBase + 4 *WidthPixels_3) = *(_BYTE *)(PixelPtr - 1); /*0xffe41d53*/
WidthPixels_2 = WidthPixels_1; /*0xffe41d57*/
}
}
++WidthPixels_3; /*0xffe41d5b*/
PixelPtr += 4; /*0xffe41d5c*/
}
while ( WidthPixels_3 < WidthPixels_2 ); /*0xffe41d61*/
RowCount = n68; /*0xffe41d63*/
WidthPixels = WidthPixels_1; /*0xffe41d67*/
LineDistance = LineDistance_1; /*0xffe41d6b*/
}
CurrentPtr += 4096; /*0xffe41d6f*/
n68 = --RowCount; /*0xffe41d78*/
}
while ( RowCount ); /*0xffe41d7c*/
}
}
char VideoDisplayProgress(unsigned __int8 a1, unsigned __int8 a2, char a3, _BYTE *a4)
{
unsigned int i_1; // ebp
_BYTE *v7; // esi
char n32; // al
unsigned int i; // ecx
i_1 = VideoAsciiStrLen(a4); /*0xffe41d9c*/
v7 = (_BYTE *)(2 * (a2 + 80 *a1) + 753664); /*0xffe41da6*/
n32 = 32; /*0xffe41dad*/
__outbyte(0x3D4u, 0xAu); /*0xffe41db7*/
__outbyte(0x3D5u, 0x20u); /*0xffe41dbf*/
for ( i = 0; i < i_1; *(v7 - 1) = a3 ) /*0xffe41dc4*/
{
n32 = a4[i++]; /*0xffe41dca*/
*v7 = n32; /*0xffe41dce*/
v7 += 2; /*0xffe41dd0*/
}
return n32; /*0xffe41dda*/
}
unsigned __int8 __thiscall MmioRead32(unsigned int n1024068)
{
int ReportStatusCodePpi; // eax
__int16 v3; // kr00_2
unsigned int v4; // esi
unsigned __int8 v5; // al
unsigned __int8 v6; // bl
__int16 v8; // [esp+10h] [ebp-4h]
if ( (n1024068 & 0xF0000F00) != 0 ) /*0xffe41dec*/
{
ReportStatusCodePpi = LocateReportStatusCodePpi(); /*0xffe41dee*/
if ( ReportStatusCodePpi ) /*0xffe41df5*/
(*(void ( **)(const char *, int, const char *))(ReportStatusCodePpi + 4))( /*0xffe41e03*/
"e:\\hs\\MdePkg\\Library\\BasePciCf8Lib\\PciCf8Lib.c",
121,
"((Address) & (~0xffff0ff | (0))) == 0");
}
v3 = __readeflags(); /*0xffe41e09*/
v8 = v3; /*0xffe41e0b*/
_disable(); /*0xffe41e0f*/
v4 = IoPortRead32(0xCF8u); /*0xffe41e2f*/
IoPortWrite32(0xCF8u, n1024068 & 0xFC | (n1024068 >> 4) & 0xFFFF00 | 0x80000000); /*0xffe41e3b*/
v5 = __inbyte((n1024068 & 3) + 3324); /*0xffe41e49*/
v6 = v5; /*0xffe41e4a*/
IoPortWrite32(0xCF8u, v4); /*0xffe41e50*/
if ( (v8 & 0x200) != 0 ) /*0xffe41e5e*/
_enable(); /*0xffe41e60*/
else
_disable(); /*0xffe41e63*/
return v6; /*0xffe41e64*/
}
__int16 __thiscall MmioRead16(unsigned int n1015936)
{
int ReportStatusCodePpi; // eax
__int16 v3; // kr00_2
unsigned int v4; // esi
__int16 v5; // di
__int16 v7; // [esp+Ch] [ebp-4h]
if ( (n1015936 & 0xF0000F01) != 0 ) /*0xffe41e7b*/
{
ReportStatusCodePpi = LocateReportStatusCodePpi(); /*0xffe41e7d*/
if ( ReportStatusCodePpi ) /*0xffe41e84*/
(*(void ( **)(const char *, int, const char *))(ReportStatusCodePpi + 4))( /*0xffe41e95*/
"e:\\hs\\MdePkg\\Library\\BasePciCf8Lib\\PciCf8Lib.c",
613,
"((Address) & (~0xffff0ff | (1))) == 0");
}
v3 = __readeflags(); /*0xffe41e9b*/
v7 = v3; /*0xffe41e9d*/
_disable(); /*0xffe41ea0*/
v4 = IoPortRead32(0xCF8u); /*0xffe41ec0*/
IoPortWrite32(0xCF8u, n1015936 & 0xFC | (n1015936 >> 4) & 0xFFFF00 | 0x80000000); /*0xffe41ecc*/
v5 = IoPortRead16((n1015936 & 2) + 3324); /*0xffe41ee1*/
IoPortWrite32(0xCF8u, v4); /*0xffe41ee6*/
if ( (v7 & 0x200) != 0 ) /*0xffe41ef3*/
_enable(); /*0xffe41ef5*/
else
_disable(); /*0xffe41ef8*/
return v5; /*0xffe41efc*/
}
unsigned __int16 MmioWrite32(unsigned int n1024064, unsigned __int16 n1280)
{
int ReportStatusCodePpi; // eax
__int16 v5; // kr00_2
unsigned int v6; // esi
unsigned __int16 v7; // di
__int16 v9; // [esp+10h] [ebp-4h]
if ( (n1024064 & 0xF0000F01) != 0 ) /*0xffe41f12*/
{
ReportStatusCodePpi = LocateReportStatusCodePpi(); /*0xffe41f14*/
if ( ReportStatusCodePpi ) /*0xffe41f1b*/
(*(void ( **)(const char *, int, const char *))(ReportStatusCodePpi + 4))( /*0xffe41f2c*/
"e:\\hs\\MdePkg\\Library\\BasePciCf8Lib\\PciCf8Lib.c",
652,
"((Address) & (~0xffff0ff | (1))) == 0");
}
v5 = __readeflags(); /*0xffe41f32*/
v9 = v5; /*0xffe41f34*/
_disable(); /*0xffe41f38*/
v6 = IoPortRead32(0xCF8u); /*0xffe41f58*/
IoPortWrite32(0xCF8u, n1024064 & 0xFC | (n1024064 >> 4) & 0xFFFF00 | 0x80000000); /*0xffe41f64*/
v7 = IoPortWrite16((n1024064 & 2) + 3324, n1280); /*0xffe41f7b*/
IoPortWrite32(0xCF8u, v6); /*0xffe41f80*/
if ( (v9 & 0x200) != 0 ) /*0xffe41f8e*/
_enable(); /*0xffe41f90*/
else
_disable(); /*0xffe41f93*/
return v7; /*0xffe41f97*/
}
unsigned __int32 IoRead32(unsigned int a1)
{
int ReportStatusCodePpi; // eax
__int16 v3; // kr00_2
unsigned int v4; // esi
unsigned __int32 v5; // edi
__int16 v7; // [esp+Ch] [ebp-4h]
if ( (a1 & 0xF0000F03) != 0 ) /*0xffe41fac*/
{
ReportStatusCodePpi = LocateReportStatusCodePpi(); /*0xffe41fae*/
if ( ReportStatusCodePpi ) /*0xffe41fb5*/
(*(void ( **)(const char *, int, const char *))(ReportStatusCodePpi + 4))( /*0xffe41fc6*/
"e:\\hs\\MdePkg\\Library\\BasePciCf8Lib\\PciCf8Lib.c",
1114,
"((Address) & (~0xffff0ff | (3))) == 0");
}
v3 = __readeflags(); /*0xffe41fcc*/
v7 = v3; /*0xffe41fce*/
_disable(); /*0xffe41fd1*/
v4 = IoPortRead32(0xCF8u); /*0xffe41ff1*/
IoPortWrite32(0xCF8u, a1 & 0xFC | (a1 >> 4) & 0xFFFF00 | 0x80000000); /*0xffe41ffb*/
v5 = IoPortRead32(0xCFCu); /*0xffe4200c*/
IoPortWrite32(0xCF8u, v4); /*0xffe4200e*/
if ( (v7 & 0x200) != 0 ) /*0xffe4201b*/
_enable(); /*0xffe4201d*/
else
_disable(); /*0xffe42020*/
return v5; /*0xffe42023*/
}
unsigned int IoAnd32(unsigned int a1, unsigned int OrMask)
{
int ReportStatusCodePpi; // eax
__int16 v5; // kr00_2
unsigned int v6; // esi
unsigned int v7; // edi
__int16 v9; // [esp+10h] [ebp-4h]
if ( (a1 & 0xF0000F03) != 0 ) /*0xffe42039*/
{
ReportStatusCodePpi = LocateReportStatusCodePpi(); /*0xffe4203b*/
if ( ReportStatusCodePpi ) /*0xffe42042*/
(*(void ( **)(const char *, int, const char *))(ReportStatusCodePpi + 4))( /*0xffe42053*/
"e:\\hs\\MdePkg\\Library\\BasePciCf8Lib\\PciCf8Lib.c",
1153,
"((Address) & (~0xffff0ff | (3))) == 0");
}
v5 = __readeflags(); /*0xffe42059*/
v9 = v5; /*0xffe4205b*/
_disable(); /*0xffe4205f*/
v6 = IoPortRead32(0xCF8u); /*0xffe4207f*/
IoPortWrite32(0xCF8u, a1 & 0xFC | (a1 >> 4) & 0xFFFF00 | 0x80000000); /*0xffe42089*/
v7 = IoPortWrite32(0xCFCu, OrMask); /*0xffe4209c*/
IoPortWrite32(0xCF8u, v6); /*0xffe4209e*/
if ( (v9 & 0x200) != 0 ) /*0xffe420ac*/
_enable(); /*0xffe420ae*/
else
_disable(); /*0xffe420b1*/
return v7; /*0xffe420b4*/
}
int IoOr32Ex(int PciHandle, __int16 RegMask)
{
unsigned __int8 ShiftCount; // bl
unsigned __int16 SlotIndex; // di
__int16 SlotValue; // ax
unsigned __int16 Temp; // cx
unsigned __int8 BitCount; // al
unsigned __int16 n4; // cx
unsigned int OrMask; // esi
ShiftCount = 0; /*0xffe420c7*/
for ( SlotIndex = 0; SlotIndex < 4u; ++SlotIndex ) /*0xffe420c9*/
{
SlotValue = IoRead32(4 *SlotIndex + 1015940); /*0xffe420d6*/
if ( (SlotValue & 1) == 0 ) /*0xffe420dd*/
break; /*0xffe420dd*/
if ( (SlotValue & 0xFFFC) == RegMask ) /*0xffe420e7*/
break; /*0xffe420e7*/
}
if ( SlotIndex == 4 ) /*0xffe420f2*/
return -2147483639; /*0xffe420f4*/
Temp = 4; /*0xffe42102*/
BitCount = 0; /*0xffe42105*/
do /*0xffe42114*/
{
Temp >>= 1; /*0xffe42107*/
++BitCount; /*0xffe4210a*/
}
while ( (Temp & 1) == 0 ); /*0xffe42114*/
n4 = 4; /*0xffe4211a*/
do /*0xffe42122*/
{
++ShiftCount; /*0xffe4211d*/
n4 >>= 1; /*0xffe4211f*/
}
while ( n4 ); /*0xffe42122*/
if ( BitCount == ShiftCount - 1 ) /*0xffe4212d*/
--ShiftCount; /*0xffe4212f*/
OrMask = ((((1 << ShiftCount) - 1) & 0xFFFC) << 16) | (unsigned __int16)(RegMask & ~((1 << ShiftCount) - 1)) | 1; /*0xffe4215c*/
IoAnd32(4 *SlotIndex + 1015940, OrMask); /*0xffe42168*/
*(_DWORD *)((unsigned __int16)(4 *SlotIndex + 10032) | 0xFDEF0000) = OrMask; /*0xffe4217c*/
return 0; /*0xffe42180*/
}
int IoReadEx(int PciHandle, __int16 Register, char SubFunction, int Width)
{
__int16 MaskLow; // bx
__int16 MaskHigh; // bp
__int16 WidthMask; // si
__int16 DefaultValue; // di
unsigned __int8 Index; // cl
__int16 SearchReg; // ax
__int16 MaskLow_2; // ax
unsigned __int8 MaskLow_1; // cl
__int16 n1016; // ax
unsigned __int8 v14; // cl
__int16 n1008; // ax
__int16 AccessWidth; // [esp-4h] [ebp-40h]
int n57672688; // [esp+14h] [ebp-28h]
__int16 v18; // [esp+18h] [ebp-24h]
_DWORD v19[2]; // [esp+1Ch] [ebp-20h]
_DWORD v20[5]; // [esp+24h] [ebp-18h]
__int16 v21; // [esp+38h] [ebp-4h]
__int16 n5; // [esp+44h] [ebp+8h]
__int16 ConfigLow; // [esp+44h] [ebp+8h]
v20[0] = 49808376; /*0xffe4218e*/
v21 = 0; /*0xffe42198*/
MaskLow = 0; /*0xffe4219d*/
v18 = 0; /*0xffe4219f*/
MaskHigh = -1; /*0xffe421a4*/
WidthMask = 0; /*0xffe421ad*/
v20[1] = 36176416; /*0xffe421af*/
v20[2] = 48759352; /*0xffe421b7*/
v20[3] = 65536824; /*0xffe421bf*/
v20[4] = 48235248; /*0xffe421c7*/
v19[0] = 41419640; /*0xffe421cf*/
v19[1] = 956; /*0xffe421d7*/
n57672688 = 57672688; /*0xffe421df*/
DefaultValue = -1; /*0xffe421e8*/
if ( Width == 1 ) /*0xffe421ed*/
{
if ( !Register ) /*0xffe42378*/
{
DefaultValue = -9; /*0xffe4237a*/
goto LABEL_47; /*0xffe4237f*/
}
v14 = 0; /*0xffe42381*/
n1008 = 1008; /*0xffe42383*/
do /*0xffe4239a*/
{
if ( n1008 == Register ) /*0xffe4238b*/
break; /*0xffe4238b*/
n1008 = *((_WORD *)&n57672688 + ++v14); /*0xffe42392*/
}
while ( n1008 ); /*0xffe4239a*/
if ( !*((_WORD *)&n57672688 + v14) ) /*0xffe423a4*/
return -2147483645; /*0xffe423a4*/
MaskHigh = -4097; /*0xffe423ad*/
AccessWidth = 8; /*0xffe423b2*/
MaskLow_2 = v14 << 12; /*0xffe423b4*/
goto LABEL_46; /*0xffe423b4*/
}
if ( Width <= 1 ) /*0xffe421f3*/
return -2147483645; /*0xffe421f3*/
if ( Width <= 5 )
{
DefaultValue = Register == 0 ? -1025 : -1;
WidthMask = Register != 0 ? 0x400 : 0;
goto LABEL_47; /*0xffe42373*/
}
switch ( Width ) /*0xffe42205*/
{
case 6: /*0xffe42205*/
if ( !Register ) /*0xffe422eb*/
{
DefaultValue = (SubFunction == 0) - 3; /*0xffe422fb*/
goto LABEL_47; /*0xffe422fe*/
}
MaskLow_1 = 0; /*0xffe42303*/
n1016 = 1016; /*0xffe42305*/
do /*0xffe4231c*/
{
if ( n1016 == Register ) /*0xffe4230d*/
break; /*0xffe4230d*/
n1016 = *((_WORD *)v20 + ++MaskLow_1); /*0xffe42314*/
}
while ( n1016 ); /*0xffe4231c*/
if ( !*((_WORD *)v20 + MaskLow_1) ) /*0xffe42326*/
return -2147483645; /*0xffe42326*/
if ( !SubFunction ) /*0xffe42330*/
{
MaskLow = MaskLow_1; /*0xffe42344*/
WidthMask = 1; /*0xffe42347*/
MaskHigh = -8; /*0xffe42348*/
goto LABEL_47; /*0xffe4234d*/
}
MaskHigh = -113; /*0xffe42335*/
AccessWidth = 2; /*0xffe4233a*/
MaskLow_2 = 16 *MaskLow_1; /*0xffe4233c*/
goto LABEL_46; /*0xffe42340*/
case 7: /*0xffe42205*/
if ( !Register ) /*0xffe422a4*/
{
DefaultValue = -5; /*0xffe422a6*/
goto LABEL_47; /*0xffe422ab*/
}
Index = 0; /*0xffe422b0*/
SearchReg = 888; /*0xffe422b2*/
do /*0xffe422c9*/
{
if ( SearchReg == Register ) /*0xffe422ba*/
break; /*0xffe422ba*/
SearchReg = *((_WORD *)v19 + ++Index); /*0xffe422c1*/
}
while ( SearchReg ); /*0xffe422c9*/
if ( !*((_WORD *)v19 + Index) ) /*0xffe422d3*/
return -2147483645; /*0xffe422d3*/
MaskHigh = -769; /*0xffe422d8*/
AccessWidth = 4; /*0xffe422dd*/
MaskLow_2 = Index << 8; /*0xffe422df*/
LABEL_46:
WidthMask = AccessWidth; /*0xffe423b8*/
MaskLow = MaskLow_2; /*0xffe423b9*/
goto LABEL_47; /*0xffe423b9*/
case 8: /*0xffe42205*/
if ( !Register ) /*0xffe42266*/
{
DefaultValue = -769; /*0xffe42268*/
goto LABEL_47; /*0xffe4226d*/
}
WidthMask = 512; /*0xffe42272*/
if ( Register == 512 ) /*0xffe4227a*/
{
WidthMask = 256; /*0xffe4227c*/
goto LABEL_47; /*0xffe42281*/
}
if ( Register == 520 ) /*0xffe4228e*/
goto LABEL_47; /*0xffe4228e*/
return -2147483645; /*0xffe4228e*/
}
if ( Width != 255 ) /*0xffe4221e*/
return -2147483645; /*0xffe4221e*/
if ( Register != 46 ) /*0xffe42224*/
{
if ( Register == 78 ) /*0xffe42234*/
{
WidthMask = 0x2000; /*0xffe42236*/
goto LABEL_47; /*0xffe4223b*/
}
if ( Register == 98 ) /*0xffe42244*/
{
WidthMask = 2048; /*0xffe42246*/
goto LABEL_47; /*0xffe4224b*/
}
if ( Register ) /*0xffe42253*/
{
IoOr32Ex(PciHandle, Register); /*0xffe42257*/
goto LABEL_47; /*0xffe4225e*/
}
return -2147483645; /*0xffe422a0*/
}
WidthMask = 4096; /*0xffe42226*/
LABEL_47:
n5 = MaskLow | MaskHigh & MmioRead16(0xF8080u); /*0xffe423bc*/
MmioWrite32(0xF8080u, n5); /*0xffe423d9*/
IoPortWrite8((_WORD *)0xFDEF2770, n5); /*0xffe423e7*/
ConfigLow = WidthMask | DefaultValue & MmioRead16(0xF8082u); /*0xffe42404*/
MmioWrite32(0xF8082u, ConfigLow); /*0xffe42408*/
IoPortWrite8((_WORD *)0xFDEF2774, ConfigLow); /*0xffe42416*/
return 0; /*0xffe42299*/
}
unsigned __int8 CopyMemWrapper(int This, int ConfigTable)
{
unsigned __int8 *v2; // esi
int n11; // edi
unsigned __int8 v4; // bl
unsigned __int8 v5; // al
unsigned __int8 result; // al
v2 = (unsigned __int8 *)(ConfigTable + 3); /*0xffe42427*/
n11 = 11; /*0xffe4242a*/
do /*0xffe4244e*/
{
if ( *(v2 - 1) ) /*0xffe4242b*/
{
v5 = __inbyte(*(_WORD *)(v2 - 3)); /*0xffe42439*/
v4 = *v2 | v5 & *(v2 - 1); /*0xffe4243f*/
}
else
{
v4 = *v2; /*0xffe42431*/
}
result = v4; /*0xffe42445*/
__outbyte(*(_WORD *)(v2 - 3), v4); /*0xffe42447*/
v2 += 4; /*0xffe42448*/
--n11; /*0xffe4244b*/
}
while ( n11 ); /*0xffe4244e*/
return result; /*0xffe42450*/
}
_BYTE *__usercall SetMemWrapper@<eax>(int value@<eax>, _BYTE *buf, char a3, unsigned int n255)
{
unsigned int n255_1; // ecx
_BYTE *buf_1; // edi
__int16 value_1; // bx
int value_2; // eax
int v8; // edx
char n255_2; // dl
unsigned int count; // ecx
n255_1 = n255; /*0xffe4245c*/
LOBYTE(value) = a3; /*0xffe42460*/
buf_1 = buf; /*0xffe4246f*/
BYTE1(value) = a3; /*0xffe42478*/
value_1 = value; /*0xffe4247a*/
value_2 = value << 16; /*0xffe4247d*/
LOWORD(value_2) = value_1; /*0xffe42480*/
if ( n255 >= 4 ) /*0xffe42486*/
{
v8 = (unsigned __int8)buf & 3; /*0xffe4248a*/
if ( ((unsigned __int8)buf & 3) != 0 ) /*0xffe4248d*/
{
memset(buf, value_1, 4 - v8); /*0xffe42498*/
buf_1 = &buf[4 - v8]; /*0xffe42498*/
n255_1 = n255 - (4 - v8); /*0xffe4249a*/
}
n255_2 = n255_1; /*0xffe4249c*/
count = n255_1 >> 2; /*0xffe4249e*/
memset32(buf_1, value_2, count); /*0xffe424a1*/
buf_1 += 4 *count; /*0xffe424a1*/
n255_1 = n255_2 & 3; /*0xffe424a6*/
}
memset(buf_1, value_1, n255_1); /*0xffe424a8*/
return buf; /*0xffe424ad*/
}
unsigned int ZeroMem(unsigned int dst, char *src, unsigned int n16)
{
char *src_1; // esi
unsigned int dst_1; // edi
unsigned int n16_1; // ecx
char v10; // dl
char *n4; // eax
unsigned int count; // eax
int count_1; // ebx
char n16_2; // al
unsigned int v15; // ecx
int n16_3; // eax
__asm { pushfw } /*0xffe424c2*/
src_1 = src; /*0xffe424c7*/
dst_1 = dst; /*0xffe424ca*/
n16_1 = n16; /*0xffe424cd*/
v10 = 0; /*0xffe424d0*/
n4 = &src[-dst]; /*0xffe424d4*/
if ( (unsigned int)src < dst ) /*0xffe424d6*/
{
n4 = (char *)(dst - (_DWORD)src); /*0xffe424db*/
if ( (unsigned int)&src[n16] >= dst ) /*0xffe424df*/
{
src_1 = &src[n16]; /*0xffe424e1*/
dst_1 = n16 + dst; /*0xffe424e3*/
v10 = 1; /*0xffe424e6*/
}
}
if ( n16 < 4 || (unsigned int)n4 < 4 ) /*0xffe424f1*/
goto LABEL_19; /*0xffe424f1*/
count = (unsigned __int8)src_1 & 3; /*0xffe424f7*/
count_1 = dst_1 & 3; /*0xffe424fa*/
if ( v10 ) /*0xffe424ff*/
{
--src_1; /*0xffe42501*/
--dst_1; /*0xffe42502*/
}
if ( count == count_1 && count ) /*0xffe42509*/
{
if ( !v10 ) /*0xffe4250d*/
count = 4 - count; /*0xffe42511*/
qmemcpy((void *)dst_1, src_1, count); /*0xffe42517*/
src_1 += count; /*0xffe42517*/
dst_1 += count; /*0xffe42517*/
n16_1 = n16 - count; /*0xffe42519*/
}
if ( v10 ) /*0xffe4251d*/
{
src_1 -= 3; /*0xffe4251f*/
dst_1 -= 3; /*0xffe42522*/
}
n16_2 = n16_1; /*0xffe42525*/
v15 = n16_1 >> 2; /*0xffe42527*/
qmemcpy((void *)dst_1, src_1, 4 *v15); /*0xffe4252a*/
src_1 += 4 *v15; /*0xffe4252a*/
dst_1 += 4 *v15; /*0xffe4252a*/
n16_3 = n16_2 & 3; /*0xffe4252c*/
if ( n16_3 ) /*0xffe4252f*/
{
if ( v10 ) /*0xffe42533*/
{
src_1 += 4; /*0xffe42535*/
dst_1 += 4; /*0xffe42538*/
}
n16_1 = n16_3; /*0xffe4253b*/
LABEL_19:
if ( v10 ) /*0xffe4253f*/
{
--src_1; /*0xffe42541*/
--dst_1; /*0xffe42542*/
}
qmemcpy((void *)dst_1, src_1, n16_1); /*0xffe42543*/
}
__asm { popfw } /*0xffe42545*/
return dst; /*0xffe42548*/
}