//
// LnvPurleyDriverPei.efi - Full Decompilation
// Source: IDA Pro MCP port 13391
// Functions: 13
//
#include <Uefi.h>
#include <PiPei.h>
{"addr":"0xffe3e7bc","code":"void *memset(void *buf, unsigned int count, char value)\n{\n memset(buf, value, count); /*0xffe3e7c9*/\n return buf; /*0xffe3e7cf*/\n}"}
{"addr":"0xffe3e7dc","code":"int InternalFillMemory(int a1, int a2, int a3, int a4)\n{\n do /*0xffe3e7f5*/\n {\n *(_DWORD *)(a1 + 8 *a2 - 8) = a3; /*0xffe3e7ed*/\n *(_DWORD *)(a1 + 8 *a2-- - 4) = a4; /*0xffe3e7f1*/\n }\n while ( a2 ); /*0xffe3e7f5*/\n return a1; /*0xffe3e7f9*/\n}"}
{"addr":"0xffe3e7fc","code":"void *memset32(void *buf, unsigned int count, int value)\n{\n memset32(buf, value, count); /*0xffe3e809*/\n return buf; /*0xffe3e80f*/\n}"}
{"addr":"0xffe3e81c","code":"char *CopyMem(char *dst, char *src, unsigned int count)\n{\n unsigned int count_1; // edx\n char *dst_1; // edi\n char *src_1; // esi\n\n count_1 = count; /*0xffe3e826*/\n if ( src < dst && &src[count - 1] >= dst ) /*0xffe3e834*/\n {\n src_1 = &src[count - 1]; /*0xffe3e848*/\n dst_1 = &dst[count - 1]; /*0xffe3e84a*/\n }\n else\n {\n count_1 = count & 3; /*0xffe3e838*/\n qmemcpy(dst, src, 4 * (count >> 2)); /*0xffe3e841*/\n src_1 = &src[4 * (count >> 2)]; /*0xffe3e841*/\n dst_1 = &dst[4 * (count >> 2)]; /*0xffe3e841*/\n }\n qmemcpy(dst_1, src_1, count_1); /*0xffe3e851*/\n return dst; /*0xffe3e858*/\n}"}
{"addr":"0xffe3e87c","code":"EFI_STATUS ModuleEntryPoint(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)\n{\n int v2; // eax\n int v3; // edi\n int v4; // eax\n EFI_STATUS v5; // esi\n\n if ( (*(int ( **)(EFI_SYSTEM_TABLE *, void *, _DWORD, _DWORD, void *))(LODWORD(SystemTable->Hdr.Signature) + 32))( /*0xffe3e89a*/\n SystemTable,\n &unk_FFE3EDEC,\n 0,\n 0,\n &unk_FFE3EE60) < 0 )\n {\n v2 = (*(int ( **)(EFI_SYSTEM_TABLE *, void *))(LODWORD(SystemTable->Hdr.Signature) + 36))( /*0xffe3e8a5*/\n SystemTable,\n &unk_FFE3EE50);\n v3 = v2; /*0xffe3e8a8*/\n if ( v2 < 0 ) /*0xffe3e8ae*/\n {\n DebugPrint(-1, \"PEI - PeiLnvSendIpmiCmdLibConstructor NotifyPpi Status = %r \\n\", v2); /*0xffe3e8b8*/\n DebugPrint(-1, \"PeiLnvSendIpmiCmdLibConstructor Status = %r \\n\", v3); /*0xffe3e8c5*/\n }\n }\n v4 = (*(int ( **)(EFI_SYSTEM_TABLE *, void *))(LODWORD(SystemTable->Hdr.Signature) + 36))( /*0xffe3e8d6*/\n SystemTable,\n &unk_FFE3EE2C);\n v5 = v4; /*0xffe3e8d9*/\n if ( v4 < 0 ) /*0xffe3e8df*/\n DebugPrint(-1, \"PEI - LnvPurleyDriverPEI_Init Notify PPI Status = %r \\n\", v4); /*0xffe3e8e9*/\n return v5; /*0xffe3e8f3*/\n}","refs":[{"addr":"0xffe3ee50","name":"gLnvPurleyNotifyPpiDescriptor2"},{"addr":"0xffe3e929","name":"DebugPrint"},{"addr":"0xffe3eb34","name":"aPeiPeilnvsendi","string":"PEI - PeiLnvSendIpmiCmdLibConstructor NotifyPpi Status = %r \n"},{"addr":"0xffe3eb74","name":"aPeilnvsendipmi","string":"PeiLnvSendIpmiCmdLibConstructor Status = %r \n"},{"addr":"0xffe3edec","name":"gLnvPurleyDriverPpiGuid"},{"addr":"0xffe3ee60","name":"gLnvPurleyInstallPpiDescriptor"},{"addr":"0xffe3ee2c","name":"gLnvPurleyNotifyPpiDescriptor1"},{"addr":"0xffe3eab4","name":"aPeiLnvpurleydr","string":"PEI - LnvPurleyDriverPEI_Init Notify PPI Status = %r \n"}]}
{"addr":"0xffe3e8f5","code":"int PpiNotifyCallbackStub()\n{\n return 0; /*0xffe3e8f7*/\n}"}
{"addr":"0xffe3e8f8","code":"int GetDebugPpiInterface()\n{\n int PeiServicesTablePointer; // eax\n int v2; // [esp+0h] [ebp-8h] BYREF\n int v3; // [esp+4h] [ebp-4h] BYREF\n\n PeiServicesTablePointer = GetPeiServicesTablePointer(); /*0xffe3e8fd*/\n if ( (*(int ( **)(int, void *, _DWORD, int *, int *))(*(_DWORD *)PeiServicesTablePointer + 32))( /*0xffe3e91c*/\n PeiServicesTablePointer,\n &unk_FFE3EDDC,\n 0,\n &v2,\n &v3) >= 0 )\n return v3; /*0xffe3e922*/\n else\n return 0; /*0xffe3e91e*/\n}","refs":[{"addr":"0xffe3ea17","name":"GetPeiServicesTablePointer"},{"addr":"0xffe3eddc","name":"gLnvPurleyDebugPpiGuid"}]}
{"addr":"0xffe3e929","code":"int DebugPrint(int a1, const char *PEI___PeiLnvSendIpmiCmdLibConstructor_NotifyPpi_Status___%r__n, ...)\n{\n int result; // eax\n int ( **v3)(int, const char *, char *); // esi\n va_list va; // [esp+10h] [ebp+Ch] BYREF\n\n va_start(va, PEI___PeiLnvSendIpmiCmdLibConstructor_NotifyPpi_Status___%r__n);\n result = GetDebugPpiInterface(); /*0xffe3e92a*/\n v3 = (int ( **)(int, const char *, char *))result; /*0xffe3e92f*/\n if ( result ) /*0xffe3e933*/\n {\n result = PeiGetPlatformType(); /*0xffe3e935*/\n if ( (result & a1) != 0 ) /*0xffe3e940*/\n return (*v3)(a1, PEI___PeiLnvSendIpmiCmdLibConstructor_NotifyPpi_Status___%r__n, (char *)va); /*0xffe3e94c*/\n }\n return result; /*0xffe3e951*/\n}","refs":[{"addr":"0xffe3e8f8","name":"GetDebugPpiInterface"},{"addr":"0xffe3e9c8","name":"PeiGetPlatformType"}]}
{"addr":"0xffe3e953","code":"int DebugAssert(\n int e:__hs__MdePkg__Library__PeiServicesTablePointerLibIdt__PeiServ,\n int n48,\n int PeiServices____((void__)_0))\n{\n int result; // eax\n\n result = GetDebugPpiInterface(); /*0xffe3e959*/\n if ( result ) /*0xffe3e960*/\n return (*(int ( **)(int, int, int))(result + 4))( /*0xffe3e968*/\n e:__hs__MdePkg__Library__PeiServicesTablePointerLibIdt__PeiServ,\n n48,\n PeiServices____((void__)_0));\n return result; /*0xffe3e96e*/\n}","refs":[{"addr":"0xffe3e8f8","name":"GetDebugPpiInterface"}]}
{"addr":"0xffe3e971","code":"int LnvSendIpmiCmd(int a1)\n{\n int v1; // eax\n int v2; // esi\n int DebugPpiInterface; // eax\n\n v1 = (*(int ( **)(int, void *, _DWORD, _DWORD, void *))(*(_DWORD *)a1 + 32))( /*0xffe3e987*/\n a1,\n &unk_FFE3EDEC,\n 0,\n 0,\n &unk_FFE3EE60);\n v2 = v1; /*0xffe3e98a*/\n if ( v1 < 0 ) /*0xffe3e991*/\n {\n DebugPrint(0x80000000, \"\\nASSERT_EFI_ERROR (Status = %r)\\n\", v1); /*0xffe3e99e*/\n DebugPpiInterface = GetDebugPpiInterface(); /*0xffe3e9a6*/\n if ( DebugPpiInterface ) /*0xffe3e9ad*/\n (*(void ( **)(const char *, int, const char *))(DebugPpiInterface + 4))( /*0xffe3e9be*/\n \"e:\\\\hs\\\\LenovoServerPkg\\\\Library\\\\LnvIpmiLib\\\\IpmiCmd\\\\PeiLnvSendIpmiCmdLib.c\",\n 218,\n \"!EFI_ERROR (Status)\");\n }\n return v2; /*0xffe3e9c6*/\n}","refs":[{"addr":"0xffe3edec","name":"gLnvPurleyDriverPpiGuid"},{"addr":"0xffe3ee60","name":"gLnvPurleyInstallPpiDescriptor"},{"addr":"0xffe3e929","name":"DebugPrint"},{"addr":"0xffe3e8f8","name":"GetDebugPpiInterface"},{"addr":"0xffe3eaec","name":"aEHsLenovoserve","string":"e:\\hs\\LenovoServerPkg\\Library\\LnvIpmiLib\\IpmiCmd\\PeiLnvSendIpmiCmdLib.c"},{"addr":"0xffe3eaa0","name":"aEfiErrorStatus","string":"!EFI_ERROR (Status)"}]}
{"addr":"0xffe3e9c8","code":"int PeiGetPlatformType()\n{\n unsigned __int8 v0; // al\n char n3; // al\n char n3_1; // cl\n\n v0 = __inbyte(0x70u); /*0xffe3e9ce*/\n __outbyte(0x70u, v0 & 0x80 | 0x4A); /*0xffe3e9d3*/\n n3 = __inbyte(0x71u); /*0xffe3e9da*/\n n3_1 = n3; /*0xffe3e9db*/\n if ( (unsigned __int8)n3 <= 3u ) /*0xffe3e9e0*/\n {\nLABEL_4:\n if ( !n3_1 ) /*0xffe3e9fb*/\n return 0; /*0xffe3e9fb*/\n goto LABEL_5; /*0xffe3e9fb*/\n }\n n3_1 = n3; /*0xffe3e9e2*/\n if ( !n3 ) /*0xffe3e9ea*/\n {\n n3_1 = MEMORY[0xFDAF0490] & 2 | 1; /*0xffe3e9f6*/\n goto LABEL_4; /*0xffe3e9f6*/\n }\nLABEL_5:\n if ( n3_1 != -1 )\n return n3_1 != 1 ? -2147483578 : -2147483644;\n return 0; /*0xffe3ea13*/\n}","refs":[{"addr":"0xffe3ee5c","name":"n3"}]}
{"addr":"0xffe3ea17","code":"int GetPeiServicesTablePointer()\n{\n int v0; // esi\n _BYTE v2[8]; // [esp+4h] [ebp-8h] BYREF\n\n InternalX86ReadIdtr(v2); /*0xffe3ea20*/\n v0 = *(_DWORD *)(*(_DWORD *)&v2[2] - 4); /*0xffe3ea28*/\n if ( !v0 ) /*0xffe3ea2d*/\n DebugAssert( /*0xffe3ea3c*/\n (int)\"e:\\\\hs\\\\MdePkg\\\\Library\\\\PeiServicesTablePointerLibIdt\\\\PeiServicesTablePointer.c\",\n 48,\n (int)\"PeiServices != ((void *) 0)\");\n return v0; /*0xffe3ea44*/\n}","refs":[{"addr":"0xffe3ea49","name":"InternalX86ReadIdtr"},{"addr":"0xffe3e953","name":"DebugAssert"}]}
{"addr":"0xffe3ea49","code":"void *__thiscall InternalX86ReadIdtr(void *this)\n{\n void *this_1; // eax\n\n if ( !this ) /*0xffe3ea4f*/\n DebugAssert((int)\"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseLib\\\\X86ReadIdtr.c\", 37, (int)\"Idtr != ((void *) 0)\"); /*0xffe3ea5e*/\n this_1 = this; /*0xffe3ea64*/\n __sidt(this); /*0xffe3ea67*/\n return this_1; /*0xffe3ea6b*/\n}","refs":[{"addr":"0xffe3e953","name":"DebugAssert"}]}