#include <Uefi.h>
#include <PiPei.h>
void *CopyMem(char *dst, char *src, unsigned int count)
{
unsigned int count_1;
char *dst_1;
char *src_1;
count_1 = count;
if (src < dst && &src[count - 1] >= dst) {
src_1 = &src[count - 1];
dst_1 = &dst[count - 1];
} else {
count_1 = count & 3;
qmemcpy(dst, src, 4 * (count >> 2));
src_1 = &src[4 * (count >> 2)];
dst_1 = &dst[4 * (count >> 2)];
}
qmemcpy(dst_1, src_1, count_1);
return dst;
}
void *SetMem(void *buf, unsigned int count, char value)
{
memset(buf, value, count);
return buf;
}
int fn_addr(int a1, int a2, int a3, int a4)
{
do {
*(_DWORD *)(a1 + 8 * a2 - 8) = a3;
*(_DWORD *)(a1 + 8 * a2-- - 4) = a4;
} while (a2);
return a1;
}
void *SetMem32(void *buf, unsigned int count, int value)
{
memset32(buf, value, count);
return buf;
}
EFI_STATUS ModuleEntryPoint(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
{
return PiSmmCommunicationPeiModuleEntryPoint();
}
int InitCommunicationContext(void)
{
_DWORD *v2;
_DWORD *v3;
unsigned int v4;
int i_1;
int v6;
int j;
int v9;
unsigned int v10;
int v11;
int i;
v3 = v2;
if (0) {
DebugPrint(64, "InitCommunicationContext - SmmConfigurationTable: %x\n", v2[23]);
DebugPrint(64, "InitCommunicationContext - NumberOfTableEntries: %x\n", v3[22]);
v10 = v3[22];
i_1 = v3[23];
v11 = 0;
if (v10) {
for (i = i_1; !sub_FFE33012(i, (int)&unk_FFE337C0); i += 20) {
if (++v11 >= v10)
return 0;
}
v9 = 20 * v11;
return *(_DWORD *)(v9 + i_1 + 16);
}
return 0;
}
DebugPrint(64, "InitCommunicationContext - SmmConfigurationTable: %x\n", v2[40]);
DebugPrint(64, "InitCommunicationContext - NumberOfTableEntries: %x\n", v3[38]);
v4 = v3[38];
i_1 = v3[40];
v6 = 0;
if (!v4)
return 0;
for (j = i_1; !sub_FFE33012(j, (int)&unk_FFE337C0); j += 24) {
if (++v6 >= v4)
return 0;
}
v9 = 24 * v6;
return *(_DWORD *)(v9 + i_1 + 16);
}
char *InitCommunicationContext_1(void)
{
_WORD *v0;
int v1;
int *p_n1397574995;
void *v3;
char *src;
int v5;
char *dst;
int v7;
v0 = sub_FFE32ED1(&unk_FFE337A0);
if (!v0) {
v1 = sub_FFE32DA5();
if (v1)
(*(void (**)(const char *, int, const char *))(v1 + 4))(
"e:\\hs\\UefiCpuPkg\\PiSmmCommunication\\PiSmmCommunicationPei.c",
250,
"GuidHob != ((void *) 0)");
}
p_n1397574995 = (int *)*((_DWORD *)v0 + 8);
DebugPrint(64, "InitCommunicationContext - SmmS3ResumeState: %x\n", p_n1397574995);
DebugPrint(64, "InitCommunicationContext - Smst: %x\n", *(int *)((char *)p_n1397574995 + 90));
src = (char *)sub_FFE329BA(*p_n1397574995, p_n1397574995[1]);
if (!src) {
v5 = sub_FFE32DA5();
if (v5)
(*(void (**)(const char *, int, const char *))(v5 + 4))(
"e:\\hs\\UefiCpuPkg\\PiSmmCommunication\\PiSmmCommunicationPei.c",
262,
"SmmCommunicationContext != ((void *) 0)");
}
dst = (char *)sub_FFE32F54(v3);
if (!dst) {
v7 = sub_FFE32DA5();
if (v7)
(*(void (**)(const char *, int, const char *))(v7 + 4))(
"e:\\hs\\UefiCpuPkg\\PiSmmCommunication\\PiSmmCommunicationPei.c",
180,
"Hob.Raw");
}
return sub_FFE32F72(dst, src, 0x10u);
}
EFI_STATUS PiSmmCommunicationPeiCommunicate(int a1, int a2)
{
int v3;
int v4;
_WORD *v5;
int v6;
_DWORD *v7;
int v8;
int v9;
int v10;
_DWORD *v11;
int (**v12)(int, _DWORD, _BYTE *, int *, _DWORD, _DWORD);
char v13;
int (**v14)(int, _DWORD, char *, int *, _DWORD, _DWORD);
int v15;
int v16;
DebugPrint(64, "PiSmmCommunicationPei Communicate Enter\n");
if (!a2)
return -2147483646;
v3 = sub_FFE330D1();
if ((*(int (**)(int, void *, _DWORD, _DWORD, int (***)(int, _DWORD, char *, int *, _DWORD, _DWORD)))(*(_DWORD *)v3 + 32))(
v3, &unk_FFE337B0, 0, 0, &v14) < 0)
return -2147483629;
v4 = sub_FFE330D1();
if ((*(int (**)(int, void *, _DWORD, _DWORD, int *))(*(_DWORD *)v4 + 32))(v4, &unk_FFE33780, 0, 0, &v15) < 0)
return -2147483629;
if (!*(_BYTE *)(v15 + 16)) {
DebugPrint(64, "PiSmmCommunicationPei LockState - %x\n", 0);
return -2147483629;
}
v5 = sub_FFE32ED1(&unk_FFE337C0);
if (!v5) {
v6 = sub_FFE32DA5();
if (v6)
(*(void (**)(const char *, int, const char *))(v6 + 4))(
"e:\\hs\\UefiCpuPkg\\PiSmmCommunication\\PiSmmCommunicationPei.c",
155,
"GuidHob != ((void *) 0)");
}
DebugPrint(
64,
"PiSmmCommunicationPei BufferPtrAddress - 0x%016lx, BufferPtr: 0x%016lx\n",
*((_DWORD *)v5 + 8),
*((_DWORD *)v5 + 9));
v7 = (_DWORD *)*((_DWORD *)v5 + 8);
*v7 = a2;
v7[1] = 0;
DebugPrint(64, "PiSmmCommunicationPei CommBuffer - %x\n", a2);
v13 = *((_BYTE *)v5 + 28);
v16 = 1;
v12 = v14;
v8 = sub_FFE330D1();
v9 = (*v14)(v8, v12, &v13, &v16, 0, 0);
if (v9 < 0) {
DebugPrint(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v9);
v10 = sub_FFE32DA5();
if (v10)
(*(void (**)(const char *, int, const char *))(v10 + 4))(
"e:\\hs\\UefiCpuPkg\\PiSmmCommunication\\PiSmmCommunicationPei.c",
357,
"!EFI_ERROR (Status)");
}
v11 = (_DWORD *)*((_DWORD *)v5 + 8);
*v11 = 0;
v11[1] = 0;
DebugPrint(64, "PiSmmCommunicationPei Communicate Exit\n");
return 0;
}
EFI_STATUS PiSmmCommunicationPeiModuleEntryPoint(void)
{
int v0;
int v1;
int v2;
int v4;
int v5;
int v6;
unsigned __int8 v7;
int v8;
int v9;
int v10;
int v11;
int n17;
int v13;
v0 = sub_FFE330D1();
v1 = (*(int (**)(int, int *))(*(_DWORD *)v0 + 40))(v0, &n17);
if (v1 < 0) {
DebugPrint(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v1);
v2 = sub_FFE32DA5();
if (v2)
(*(void (**)(const char *, int, const char *))(v2 + 4))(
"e:\\hs\\MdePkg\\Library\\PeiHobLib\\HobLib.c",
216,
"!EFI_ERROR (Status)");
}
if (n17 != 17)
return -2147483645;
v4 = sub_FFE330D1();
v5 = 0;
if ((*(int (**)(int, void *, _DWORD, _DWORD, int *))(*(_DWORD *)v4 + 32))(v4, &unk_FFE33780, 0, 0, &v13) < 0)
return -2147483629;
v6 = v13;
v7 = *(_BYTE *)(v13 + 16);
if (v7) {
DebugPrint(64, "PiSmmCommunicationPei LockState - %x\n", v7);
return -2147483633;
}
while (1) {
v11 = v6;
v8 = sub_FFE330D1();
v9 = (*(int (**)(int, int, int))v13)(v8, v11, v5++);
if (v9 < 0)
break;
v6 = v13;
}
InitCommunicationContext_1();
v10 = sub_FFE330D1();
(*(void (**)(int, void *))(*(_DWORD *)v10 + 24))(v10, &unk_FFE337D0);
return 0;
}