/*
*PeiSelStatusCode - Decompiled PeiSelStatusCode
*Source: Auto-generated from IDA Pro decompilation
*
*Decompiled from port 13400
*/
#include "PeiSelStatusCode.h"
/*
*InternalMemCopy at 0xffe5de20
*/
char *InternalMemCopy(char *dst, char *src, unsigned int count)
{
unsigned int count_1; // edx char *dst_1; // edi char *src_1; // esi count_1 = count; /*0xffe5de2a*/
if ( src < dst && &src[count - 1] >= dst ) /*0xffe5de38*/
{
src_1 = &src[count - 1]; /*0xffe5de4c*/
dst_1 = &dst[count - 1]; /*0xffe5de4e*/
}
else
{
count_1 = count & 3; /*0xffe5de3c*/
qmemcpy(dst, src, 4 * (count >> 2)); /*0xffe5de45*/
src_1 = &src[4 * (count >> 2)]; /*0xffe5de45*/
dst_1 = &dst[4 * (count >> 2)]; /*0xffe5de45*/
}
qmemcpy(dst_1, src_1, count_1); /*0xffe5de55*/
return dst; /*0xffe5de5c*/
}
/*
*InternalMemSet at 0xffe5de60
*/
void *InternalMemSet(void *buf, unsigned int count)
{
memset(buf, 0, count); /*0xffe5de77*/
return buf; /*0xffe5de7e*/
}
/*
*SetMem at 0xffe5de80
*/
void *SetMem(void *buf, unsigned int count, char value)
{
memset(buf, value, count); /*0xffe5de8d*/
return buf; /*0xffe5de93*/
}
/*
*SetMem32 at 0xffe5dea0
*/
int SetMem32(int a1, int a2, int a3, int a4)
{
do /*0xffe5deb9*/
{
*(_DWORD *)(a1 + 8 *a2 - 8) = a3; /*0xffe5deb1*/
*(_DWORD *)(a1 + 8 *a2-- - 4) = a4; /*0xffe5deb5*/
}
while ( a2 ); /*0xffe5deb9*/
return a1; /*0xffe5debd*/
}
/*
*SetMem16 at 0xffe5dec0
*/
void *SetMem16(void *buf, unsigned int count, int value)
{
memset32(buf, value, count); /*0xffe5decd*/
return buf; /*0xffe5ded3*/
}
/*
*PeiSelStatusCodeEntryPoint at 0xffe5ded5
*/
EFI_STATUS PeiSelStatusCodeEntryPoint(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
{
int v2; // ecx int ReportStatusCodePpi; // eax if ( *(_DWORD *)(LODWORD(SystemTable->Hdr.Signature) + 8) < 0x1000Au ) /*0xffe5dee3*/
{
ReportStatusCodePpi = PeiGetReportStatusCodePpi(); /*0xffe5dee5*/
if ( ReportStatusCodePpi ) /*0xffe5deec*/
(*(void ( **)(const char *, int, const char *))(ReportStatusCodePpi + 4))( /*0xffe5defa*/
"e:\\hs\\MdePkg\\Library\\PeimEntryPoint\\PeimEntryPoint.c",
46,
"(*PeiServices)->Hdr.Revision >= _gPeimRevision");
}
return PeiSelStatusCodeEntry(v2, (int)SystemTable); /*0xffe5df02*/
}
/*
*PeiSelStatusCodeInitEndpoint at 0xffe5df08
*/
int PeiSelStatusCodeInitEndpoint(_DWORD *a1)
{
_DWORD *v1; // esi int result; // eax int Result; // [esp+4h] [ebp-8h] BYREF int Result; // [esp+8h] [ebp-4h] BYREF v1 = a1; /*0xffe5df0e*/
result = (*(int ( **)(_DWORD *, void *, _DWORD, _DWORD **, int *))(*a1 + 32))(a1, &unk_FFE5EBA0, 0, &a1, &Result); /*0xffe5df23*/
if ( result >= 0 ) /*0xffe5df2b*/
{
result = (*(int ( **)(_DWORD *, void *, _DWORD, _DWORD, int *))(*v1 + 32))(v1, &unk_FFE5EB70, 0, 0, &Result); /*0xffe5df3d*/
if ( result >= 0 ) /*0xffe5df45*/
{
*(_DWORD *)(Result + 4) = Result; /*0xffe5df4d*/
a1[2] = Result; /*0xffe5df56*/
return (*(int ( **)(_DWORD *, _DWORD *, _DWORD *))(*v1 + 28))(v1, a1, a1); /*0xffe5df62*/
}
}
return result; /*0xffe5df68*/
}
/*
*PeiSelLookupDataType at 0xffe5df6d
*/
int *PeiSelLookupDataType(int a1, int n2)
{
int Index; // esi unsigned int Index; // eax Index = 0; /*0xffe5df6e*/
Index = 0; /*0xffe5df70*/
while ( a1 != dword_FFE5EBD0[Index] || n2 != dword_FFE5EBD4[Index] ) /*0xffe5df80*/
{
Index += 3; /*0xffe5df82*/
++Index; /*0xffe5df85*/
if ( Index >= 183 ) /*0xffe5df8b*/
return 0; /*0xffe5df90*/
}
return &dword_FFE5EBD0[3 *Index]; /*0xffe5df8f*/
}
/*
*PeiSelStatusCodeNotify at 0xffe5df9b
*/
int PeiSelStatusCodeNotify(int a1, int n2, int a3, int a4, int a5, int a6)
{
int n2_1; // ebx int Result; // esi n2_1 = n2; /*0xffe5df9f*/
Result = 0; /*0xffe5dfa6*/
if ( (unsigned __int8)n2 == 1 || (unsigned __int8)n2 == 2 ) /*0xffe5dfb0*/
{
if ( !PeiSelLookupDataType(a3, (unsigned __int8)n2) ) /*0xffe5dfb5*/
return -2147483634; /*0xffe5dfc3*/
Result = (*(int ( **)(int, void *, _DWORD, _DWORD, int *))(*(_DWORD *)a1 + 32))(a1, &unk_FFE5EBA0, 0, 0, &n2); /*0xffe5dfda*/
if ( Result >= 0 ) /*0xffe5dfe1*/
return (*(int ( **)(int, int, int, int, int, int, int))(n2 + 8))(a1, n2, n2_1, a3, a4, a5, a6); /*0xffe5dffb*/
}
return Result; /*0xffe5e000*/
}
/*
*PeiSelFindEventRecord at 0xffe5e004
*/
int PeiSelFindEventRecord(int a1, _BYTE *a2)
{
int n512; // esi int result; // eax int Result; // eax int v6; // [esp-20h] [ebp-3Ch]
_BYTE v7[2]; // [esp+Ch] [ebp-10h] BYREF int n5393475; // [esp+Eh] [ebp-Eh]
_BYTE *v9; // [esp+14h] [ebp-8h] BYREF char n2; // [esp+19h] [ebp-3h] BYREF char v11; // [esp+1Ah] [ebp-2h] BYREF char v12; // [esp+1Bh] [ebp-1h] BYREF v9 = a2; /*0xffe5e00d*/
n512 = 512; /*0xffe5e012*/
n2 = 2; /*0xffe5e017*/
while ( 1 ) /*0xffe5e026*/
{
v7[0] = *a2; /*0xffe5e026*/
v7[1] = a2[1]; /*0xffe5e032*/
v6 = *(_DWORD *)(a1 + 4); /*0xffe5e03e*/
n5393475 = 5393475; /*0xffe5e03f*/
v12 = 1; /*0xffe5e046*/
if ( (*(int ( **)(int, int, _DWORD, int, _BYTE *, int, char *, char *))(v6 + 12))( /*0xffe5e052*/
v6,
10,
0,
71,
v7,
6,
&v11,
&v12) < 0 )
{
Result = *(_DWORD *)(a1 + 4); /*0xffe5e061*/
if ( *(_BYTE *)(Result + 8) == 0xC5 ) /*0xffe5e068*/
{
result = (*(int ( **)(int, int, _DWORD, int, _DWORD, _DWORD, _BYTE **, char *))(Result + 12))( /*0xffe5e07a*/
Result,
10,
0,
66,
0,
0,
&v9,
&n2);
if ( result < 0 ) /*0xffe5e082*/
return result; /*0xffe5e082*/
}
}
else if ( (v11 & 0xF) == 1 ) /*0xffe5e05b*/
{
return 0; /*0xffe5e05f*/
}
if ( !--n512 ) /*0xffe5e087*/
break; /*0xffe5e087*/
a2 = v9; /*0xffe5e089*/
}
return -2147483632; /*0xffe5e093*/
}
/*
*PeiSelWriteEventRecord at 0xffe5e09a
*/
int __usercall PeiSelWriteEventRecord@<eax>(int a1@<edx>, int n2)
{
int result; // eax char v4; // al char v5; // cl char v6; // dl int v7; // eax int v8; // eax int v9; // ecx char n0x80; // al bool v11; // zf _BYTE v12[13]; // [esp+8h] [ebp-28h] BYREF char v13; // [esp+15h] [ebp-1Bh]
_BYTE v14[2]; // [esp+18h] [ebp-18h] BYREF int v15; // [esp+1Ah] [ebp-16h]
_BYTE v16[2]; // [esp+20h] [ebp-10h] BYREF __int16 v17; // [esp+22h] [ebp-Eh]
_BYTE v18[4]; // [esp+24h] [ebp-Ch] BYREF __int16 v19; // [esp+28h] [ebp-8h] BYREF char n2_2; // [esp+2Ch] [ebp-4h] BYREF char v21; // [esp+2Dh] [ebp-3h] BYREF char n2_1; // [esp+2Eh] [ebp-2h] BYREF char n14; // [esp+2Fh] [ebp-1h] BYREF n14 = 14; /*0xffe5e0a7*/
n2_1 = 2; /*0xffe5e0ad*/
v19 = 0; /*0xffe5e0b1*/
v21 = 1; /*0xffe5e0b5*/
n2_2 = 2; /*0xffe5e0b9*/
if ( (_BYTE)n2 != 1 && (_BYTE)n2 != 2 ) /*0xffe5e0c5*/
return -2147483646; /*0xffe5e0cc*/
result = (*(int ( **)(_DWORD, int, _DWORD, int, _DWORD, _DWORD, _BYTE *, char *))(*(_DWORD *)(a1 + 4) + 12))( /*0xffe5e0e4*/
*(_DWORD *)(a1 + 4),
10,
0,
64,
0,
0,
v12,
&n14);
if ( result >= 0 )
{
v4 = v13; /*0xffe5e0f2*/
if ( (v13 & 2) != 0 ) /*0xffe5e0f7*/
{
result = (*(int ( **)(_DWORD, int, _DWORD, int, _DWORD, _DWORD, __int16 *, char *))(*(_DWORD *)(a1 + 4) + 12))( /*0xffe5e10e*/
*(_DWORD *)(a1 + 4),
10,
0,
66,
0,
0,
&v19,
&n2_1);
if ( result < 0 ) /*0xffe5e116*/
return result; /*0xffe5e116*/
v5 = HIBYTE(v19); /*0xffe5e11c*/
v6 = v19; /*0xffe5e11f*/
v4 = v13; /*0xffe5e122*/
}
else
{
v6 = 0; /*0xffe5e127*/
v19 = 0; /*0xffe5e129*/
v5 = 0; /*0xffe5e12f*/
}
if ( (_BYTE)n2 == 1 ) /*0xffe5e134*/
{
v7 = *(_DWORD *)(a1 + 4); /*0xffe5e136*/
v14[1] = v5; /*0xffe5e139*/
v14[0] = v6; /*0xffe5e143*/
v15 = -1437447101; /*0xffe5e14c*/
if ( (*(int ( **)(int, int, _DWORD, int, _BYTE *, int, char *, char *))(v7 + 12))( /*0xffe5e16c*/
v7,
10,
0,
71,
v14,
6,
(char *)&n2 + 3,
&v21) >= 0
&& (HIBYTE(n2) & 0xF) == 1 )
{
return 0; /*0xffe5e16e*/
}
else
{
return PeiSelFindEventRecord(a1, &v19); /*0xffe5e177*/
}
}
if ( (v4 & 8) == 0 )
{
PeiReportStatusWithAssert(0x80000000, " Deleting Single record is not supported. Status: EFI_UNSUPPORTED\n");
return -2147483645; /*0xffe5e198*/
}
v8 = *(_DWORD *)(a1 + 4); /*0xffe5e19a*/
v16[1] = v5; /*0xffe5e19d*/
v16[0] = v6; /*0xffe5e1a7*/
v17 = 0; /*0xffe5e1b9*/
v9 = (*(int ( **)(int, int, _DWORD, int, _BYTE *, int, _BYTE *, char *))(v8 + 12))( /*0xffe5e1c0*/
v8,
10,
0,
70,
v16,
4,
v18,
&n2_2);
if ( v9 >= 0 ) /*0xffe5e1c7*/
{
n0x80 = *(_BYTE *)(*(_DWORD *)(a1 + 4) + 8); /*0xffe5e1cc*/
if ( n0x80 == (char)0x80 ) /*0xffe5e1cf*/
return -2147483645; /*0xffe5e1d1*/
v11 = n0x80 == -127; /*0xffe5e1d3*/
result = -2147483642; /*0xffe5e1d5*/
if ( v11 ) /*0xffe5e1da*/
return result; /*0xffe5e1da*/
}
return v9; /*0xffe5e1dc*/
}
return result; /*0xffe5e1de*/
}
/*
*PeiSelIsBootProgress at 0xffe5e1e4
*/
char __thiscall PeiSelIsBootProgress(_DWORD *this)
{
int v1; // eax void *v2; // ecx int PcdPpi; // eax _BYTE v5[13]; // [esp+0h] [ebp-18h] BYREF unsigned __int8 Result; // [esp+Dh] [ebp-Bh]
int v7; // [esp+10h] [ebp-8h]
char n14; // [esp+17h] [ebp-1h] BYREF v1 = *(this + 1); /*0xffe5e1ea*/
n14 = 14; /*0xffe5e1f4*/
if ( (*(int ( **)(int, int, _DWORD, int, _DWORD, _DWORD, _BYTE *, char *))(v1 + 12))( /*0xffe5e20b*/
v1,
10,
0,
64,
0,
0,
v5,
&n14) < 0 )
return 0; /*0xffe5e20d*/
LOBYTE(v7) = Result & 8; /*0xffe5e216*/
PcdPpi = PeiGetPcdPpi(v2); /*0xffe5e219*/
(*(void ( **)(int, int))(PcdPpi + 60))(17, v7); /*0xffe5e223*/
return Result >> 7; /*0xffe5e22e*/
}
/*
*PeiSelBuildSmbiosRecord at 0xffe5e232
*/
int __usercall PeiSelBuildSmbiosRecord@<eax>(_DWORD *a1@<edx>, int a2, int n2, int a4)
{
int *v5; // edi void *v6; // ecx int PcdPpi; // eax int v8; // eax int v9; // eax void *v11; // [esp-4h] [ebp-10h]
void *v12; // [esp-4h] [ebp-10h]
v5 = PeiSelLookupDataType(a2, n2); /*0xffe5e244*/
if ( v5 ) /*0xffe5e248*/
{
if ( PeiSelIsBootProgress(a1) != 1 ) /*0xffe5e25a*/
{
LABEL_8:
*(_DWORD *)(a4 + 3) = 0; /*0xffe5e296*/
*(_WORD *)a4 = 0; /*0xffe5e29f*/
*(_BYTE *)(a4 + 2) = 2; /*0xffe5e2a2*/
*(_WORD *)(a4 + 7) = 1; /*0xffe5e2a6*/
*(_BYTE *)(a4 + 9) = 4; /*0xffe5e2aa*/
*(_BYTE *)(a4 + 10) = *((_BYTE *)v5 + 8); /*0xffe5e2b1*/
*(_WORD *)(a4 + 11) = 28416; /*0xffe5e2b4*/
*(_BYTE *)(a4 + 13) = *((_BYTE *)v5 + 9); /*0xffe5e2bd*/
*(_BYTE *)(a4 + 14) = *((_BYTE *)v5 + 10); /*0xffe5e2c3*/
*(_BYTE *)(a4 + 15) = *((_BYTE *)v5 + 11); /*0xffe5e2c9*/
return 0; /*0xffe5e2ce*/
}
PcdPpi = PeiGetPcdPpi(v6); /*0xffe5e25c*/
if ( (*(unsigned __int8 ( **)(int))(PcdPpi + 4))(16) == 1 ) /*0xffe5e269*/
{
PeiSelWriteEventRecord((int)a1, 1); /*0xffe5e26c*/
goto LABEL_8; /*0xffe5e26c*/
}
v8 = PeiGetPcdPpi(v11); /*0xffe5e26e*/
if ( (*(unsigned __int8 ( **)(int))(v8 + 4))(17) ) /*0xffe5e275*/
{
v9 = PeiGetPcdPpi(v12); /*0xffe5e27d*/
if ( (*(unsigned __int8 ( **)(int))(v9 + 4))(16) == 2 ) /*0xffe5e28a*/
{
PeiSelWriteEventRecord((int)a1, 2); /*0xffe5e290*/
goto LABEL_8; /*0xffe5e290*/
}
}
}
return -2147483641; /*0xffe5e2d5*/
}
/*
*PeiSelReportStatusCode at 0xffe5e2d9
*/
int PeiSelReportStatusCode(int a1, _BYTE *a2, unsigned __int8 n2, int a4)
{
_BYTE *v5; // esi char v6; // cl char n3; // al bool v8; // dl bool v9; // zf int v10; // eax _BYTE Table[16]; // [esp+Ch] [ebp-18h] BYREF int v12; // [esp+1Ch] [ebp-8h] BYREF v12 = 0; /*0xffe5e2df*/
if ( !a1 ) /*0xffe5e2e9*/
return 0; /*0xffe5e2e9*/
v5 = a2; /*0xffe5e2ef*/
v6 = 1; /*0xffe5e2f4*/
n3 = *a2; /*0xffe5e2f5*/
v8 = *a2 == 1 || n3 == 3; /*0xffe5e303*/
if ( n3 != 1 && n3 != 2 ) /*0xffe5e30b*/
v6 = 0; /*0xffe5e30d*/
if ( n2 == 1 ) /*0xffe5e318*/
{
v9 = !v8; /*0xffe5e323*/
}
else
{
if ( n2 != 2 ) /*0xffe5e31d*/
goto LABEL_15; /*0xffe5e31d*/
v9 = v6 == 0; /*0xffe5e31f*/
}
if ( v9 ) /*0xffe5e325*/
return 0; /*0xffe5e2ed*/
LABEL_15:
if ( PeiSelBuildSmbiosRecord(a2, a4, n2, (int)Table) < 0 ) /*0xffe5e33b*/
return 0; /*0xffe5e33b*/
v10 = *((_DWORD *)v5 + 1); /*0xffe5e33d*/
HIBYTE(a1) = 2; /*0xffe5e347*/
return (*(int ( **)(int, int, _DWORD, int, _BYTE *, int, int *, char *))(v10 + 12))( /*0xffe5e35f*/
v10,
10,
0,
68,
Table,
16,
&v12,
(char *)&a1 + 3);
}
/*
*PeiSelStatusCodeEntry at 0xffe5e365
*/
int PeiSelStatusCodeEntry(int a1, int SystemTable)
{
int result; // eax int Status; // eax int ReportStatusCodePpi; // eax void *v6; // ecx char v7; // al int PcdPpi; // eax int v9; // eax void *v10; // ecx int v11; // edi _DWORD *v12; // eax int Status; // eax int v14; // eax void *v15; // [esp-4h] [ebp-45Ch]
int n1072; // [esp+14h] [ebp-444h] BYREF int ( **v17)(_DWORD, const __int16 *, void *, _DWORD, int *, _BYTE *); // [esp+18h] [ebp-440h] BYREF int v18; // [esp+1Ch] [ebp-43Ch]
int v19; // [esp+20h] [ebp-438h] BYREF void ( **v20)(int ( *)(int, int, int, int, int, int)); // [esp+24h] [ebp-434h] BYREF _BYTE v21[2]; // [esp+28h] [ebp-430h] BYREF __int16 v22; // [esp+2Ah] [ebp-42Eh]
char v23; // [esp+2Ch] [ebp-42Ch]
char n2; // [esp+2Dh] [ebp-42Bh]
result = (*(int ( **)(int, void *, _DWORD, _DWORD, int *))(*(_DWORD *)SystemTable + 32))( /*0xffe5e388*/
SystemTable,
&unk_FFE5EB70,
0,
0,
&v19);
if ( result < 0 ) /*0xffe5e390*/
return result; /*0xffe5e390*/
Status = (*(int ( **)(int, void *, _DWORD, _DWORD, int ( ***)(_DWORD, const __int16 *, void *, _DWORD, int *, _BYTE *)))(*(_DWORD *)SystemTable + 32))( /*0xffe5e3a5*/
SystemTable,
&unk_FFE5EB50,
0,
0,
&v17);
if ( Status >= 0 ) /*0xffe5e3b2*/
{
n1072 = 1072; /*0xffe5e3e7*/
if ( (*v17)(v17, L"ServerSetup", &unk_FFE5EB90, 0, &n1072, v21) >= 0 ) /*0xffe5e40c*/
{
v7 = v23; /*0xffe5e422*/
goto LABEL_8; /*0xffe5e422*/
}
}
else
{
PeiReportStatusWithAssert(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", Status); /*0xffe5e3bf*/
ReportStatusCodePpi = PeiGetReportStatusCodePpi(); /*0xffe5e3c7*/
if ( ReportStatusCodePpi ) /*0xffe5e3ce*/
(*(void ( **)(const char *, int, const char *))(ReportStatusCodePpi + 4))( /*0xffe5e3db*/
"e:\\hs\\AmiIpmiPkg\\Ipmi\\PeiSelStatusCode\\PeiSelStatusCode.c",
746,
"!EFI_ERROR (Status)");
}
v7 = 0; /*0xffe5e40e*/
v22 = 1; /*0xffe5e410*/
v23 = 0; /*0xffe5e417*/
n2 = 2; /*0xffe5e41b*/
LABEL_8:
LOBYTE(v18) = v7; /*0xffe5e426*/
PcdPpi = PeiGetPcdPpi(v6); /*0xffe5e42a*/
(*(void ( **)(int, int))(PcdPpi + 60))(16, v18); /*0xffe5e435*/
if ( !(_BYTE)v22 || !n2 ) /*0xffe5e448*/
return -2147483645; /*0xffe5e506*/
v9 = PeiPcdAllocZeroBufChecked(v15); /*0xffe5e44e*/
v11 = v9; /*0xffe5e453*/
if ( !v9 ) /*0xffe5e457*/
return -2147483639; /*0xffe5e457*/
*(_BYTE *)v9 = n2; /*0xffe5e467*/
*(_DWORD *)(v9 + 4) = v19; /*0xffe5e46d*/
*(_DWORD *)(v9 + 8) = PeiSelReportStatusCode; /*0xffe5e470*/
v12 = (_DWORD *)PeiPcdAllocZeroBufChecked(v10); /*0xffe5e477*/
if ( !v12 ) /*0xffe5e480*/
return -2147483639; /*0xffe5e459*/
*v12 = -2147483632; /*0xffe5e482*/
v12[1] = &unk_FFE5EBA0; /*0xffe5e488*/
v12[2] = v11; /*0xffe5e48f*/
result = (*(int ( **)(int, _DWORD *))(*(_DWORD *)SystemTable + 24))(SystemTable, v12); /*0xffe5e496*/
if ( result >= 0 ) /*0xffe5e49d*/
{
Status = (*(int ( **)(int, void *))(*(_DWORD *)SystemTable + 36))(SystemTable, &unk_FFE5EBC0); /*0xffe5e4a7*/
if ( Status < 0 ) /*0xffe5e4ae*/
{
PeiReportStatusWithAssert(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", Status); /*0xffe5e4bb*/
v14 = PeiGetReportStatusCodePpi(); /*0xffe5e4c3*/
if ( v14 ) /*0xffe5e4ca*/
(*(void ( **)(const char *, int, const char *))(v14 + 4))( /*0xffe5e4d7*/
"e:\\hs\\AmiIpmiPkg\\Ipmi\\PeiSelStatusCode\\PeiSelStatusCode.c",
826,
"!EFI_ERROR (Status)");
}
if ( (*(int ( **)(int, void *, _DWORD, _DWORD, void ( ***)(int ( *)(int, int, int, int, int, int))))(*(_DWORD *)SystemTable + 32))( /*0xffe5e4f4*/
SystemTable,
&unk_FFE5EB40,
0,
0,
&v20) >= 0 )
(*v20)(PeiSelStatusCodeNotify); /*0xffe5e4ff*/
return 0; /*0xffe5e502*/
}
return result; /*0xffe5e50b*/
}
/*
*PeiGetPcdPpi at 0xffe5e513
*/
void *__thiscall PeiGetPcdPpi(void *this)
{
int ServicesTable; // eax int Status; // eax int ReportStatusCodePpi; // eax void *this_1; // [esp+0h] [ebp-4h]
this_1 = this; /*0xffe5e516*/
ServicesTable = PeiGetServicesTable(); /*0xffe5e517*/
Status = (*(int (__stdcall **)(int))(*(_DWORD *)ServicesTable + 32))(ServicesTable); /*0xffe5e52c*/
if ( Status < 0 ) /*0xffe5e534*/
{
PeiReportStatusWithAssert(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", Status); /*0xffe5e541*/
ReportStatusCodePpi = PeiGetReportStatusCodePpi(); /*0xffe5e549*/
if ( ReportStatusCodePpi ) /*0xffe5e550*/
(*(void ( **)(const char *, int, const char *))(ReportStatusCodePpi + 4))( /*0xffe5e55e*/
"e:\\hs\\MdePkg\\Library\\PeiPcdLib\\PeiPcdLib.c",
49,
"!EFI_ERROR (Status)");
}
return this_1; /*0xffe5e569*/
}
/*
*PeiPcdAllocZeroBuffer at 0xffe5e56b
*/
void *__thiscall PeiPcdAllocZeroBuffer(void *this)
{
int ServicesTable; // eax ServicesTable = PeiGetServicesTable(); /*0xffe5e56f*/
if ( (*(int (__stdcall **)(int))(*(_DWORD *)ServicesTable + 76))(ServicesTable) >= 0 ) /*0xffe5e585*/
return this; /*0xffe5e58b*/
else return 0; /*0xffe5e587*/
}
/*
*PeiPcdAllocZeroBufChecked at 0xffe5e592
*/
int __thiscall PeiPcdAllocZeroBufChecked(void *this)
{
int buf_1; // eax void *buf; // esi int ReportStatusCodePpi; // eax buf_1 = (int)PeiPcdAllocZeroBuffer(this); /*0xffe5e592*/
if ( buf_1 ) /*0xffe5e599*/
{
buf = (void *)buf_1; /*0xffe5e66c*/
if ( (unsigned int)-buf_1 < 0xC ) /*0xffe5e696*/
{
ReportStatusCodePpi = PeiGetReportStatusCodePpi(); /*0xffe5e698*/
if ( ReportStatusCodePpi ) /*0xffe5e69f*/
(*(void ( **)(const char *, int, const char *))(ReportStatusCodePpi + 4))( /*0xffe5e6a9*/
"e:\\hs\\MdePkg\\Library\\BaseMemoryLibRepStr\\ZeroMemWrapper.c",
54,
"Length <= (0xFFFFFFFF - (UINTN)Buffer + 1)");
}
return (int)InternalMemSet(buf, 0xCu); /*0xffe5e6b2*/
}
return buf_1; /*0xffe5e5a2*/
}
/*
*PeiGetReportStatusCodePpi at 0xffe5e5a3
*/
int PeiGetReportStatusCodePpi()
{
int ServicesTable; // eax int v2; // [esp+0h] [ebp-8h] BYREF int Result; // [esp+4h] [ebp-4h] BYREF ServicesTable = PeiGetServicesTable(); /*0xffe5e5a8*/
if ( (*(int ( **)(int, void *, _DWORD, int *, int *))(*(_DWORD *)ServicesTable + 32))( /*0xffe5e5c7*/
ServicesTable,
&unk_FFE5EB60,
0,
&v2,
&Result) >= 0 )
return Result; /*0xffe5e5cd*/
else return 0; /*0xffe5e5c9*/
}
/*
*PeiReportStatusWithAssert at 0xffe5e5d4
*/
int PeiReportStatusWithAssert(int a1, const char *_nASSERT_EFI_ERROR_(Status___%r)_n, ...)
{
int result; // eax int ( **v3)(int, const char *, char *); // esi va_list va; // [esp+10h] [ebp+Ch] BYREF va_start(va, _nASSERT_EFI_ERROR_(Status___%r)_n);
result = PeiGetReportStatusCodePpi(); /*0xffe5e5d5*/
v3 = (int ( **)(int, const char *, char *))result; /*0xffe5e5da*/
if ( result ) /*0xffe5e5de*/
{
result = PeiCheckManufacturingMode(); /*0xffe5e5e0*/
if ( (result & a1) != 0 ) /*0xffe5e5eb*/
return (*v3)(a1, _nASSERT_EFI_ERROR_(Status___%r)_n, (char *)va); /*0xffe5e5f7*/
}
return result; /*0xffe5e5fc*/
}
/*
*PeiAssertWithReport at 0xffe5e5fe
*/
int PeiAssertWithReport(
int e:__hs__MdePkg__Library__PeiServicesTablePointerLibIdt__PeiServ,
int n48,
int PeiServices____((void__)_0))
{
int result; // eax result = PeiGetReportStatusCodePpi(); /*0xffe5e604*/
if ( result ) /*0xffe5e60b*/
return (*(int ( **)(int, int, int))(result + 4))( /*0xffe5e613*/
e:__hs__MdePkg__Library__PeiServicesTablePointerLibIdt__PeiServ,
n48,
PeiServices____((void__)_0));
return result; /*0xffe5e619*/
}
/*
*PeiCheckManufacturingMode at 0xffe5e61c
*/
int PeiCheckManufacturingMode()
{
unsigned __int8 v0; // al char Result; // al char n3_1; // cl v0 = __inbyte(0x70u); /*0xffe5e622*/
__outbyte(0x70u, v0 & 0x80 | 0x4A); /*0xffe5e627*/
Result = __inbyte(0x71u); /*0xffe5e62e*/
n3_1 = Result; /*0xffe5e62f*/
if ( (unsigned __int8)Result <= 3u ) /*0xffe5e634*/
{
LABEL_4:
if ( !n3_1 ) /*0xffe5e64f*/
return 0; /*0xffe5e64f*/
goto LABEL_5; /*0xffe5e64f*/
}
n3_1 = Result; /*0xffe5e636*/
if ( !Result ) /*0xffe5e63e*/
{
n3_1 = MEMORY[0xFDAF0490] & 2 | 1; /*0xffe5e64a*/
goto LABEL_4; /*0xffe5e64a*/
}
LABEL_5:
if ( n3_1 != -1 )
return n3_1 != 1 ? -2147483578 : -2147483644;
return 0; /*0xffe5e667*/
}
/*
*PeiGetServicesTable at 0xffe5e6bc
*/
int PeiGetServicesTable()
{
int Result; // esi _BYTE v2[2]; // [esp+4h] [ebp-8h] BYREF int v3; // [esp+6h] [ebp-6h]
PeiReadIdtForServices(v2); /*0xffe5e6c5*/
Result = *(_DWORD *)(v3 - 4); /*0xffe5e6cd*/
if ( !Result ) /*0xffe5e6d2*/
PeiAssertWithReport( /*0xffe5e6e1*/
(int)"e:\\hs\\MdePkg\\Library\\PeiServicesTablePointerLibIdt\\PeiServicesTablePointer.c",
48,
(int)"PeiServices != ((void *) 0)");
return Result; /*0xffe5e6e9*/
}
/*
*PeiReadIdtForServices at 0xffe5e6ee
*/
void *__thiscall PeiReadIdtForServices(void *this)
{
void *this_1; // eax if ( !this ) /*0xffe5e6f4*/
PeiAssertWithReport((int)"e:\\hs\\MdePkg\\Library\\BaseLib\\X86ReadIdtr.c", 37, (int)"Idtr != ((void *) 0)"); /*0xffe5e703*/
this_1 = this; /*0xffe5e709*/
__sidt(this); /*0xffe5e70c*/
return this_1; /*0xffe5e710*/
}