__int64 sub_5110()
{
unsigned __int8 v0; // r13
__int64 result; // rax
unsigned __int64 i; // r15
__int64 v3; // rdx
__int64 v4; // rcx
__int64 v5; // r8
__int64 v6; // r9
__int64 v7; // rdi
unsigned __int8 v8; // r14
__int64 v9; // rbx
unsigned __int8 v10; // bl
char v11; // r9
__int64 v12; // rsi
__int64 v13; // rdx
__int64 v14; // rcx
__int64 v15; // rdx
__int64 v16; // rcx
__int64 v17; // rdx
__int64 v18; // rcx
__int64 v19; // rcx
__int64 v20; // rcx
__int64 v21; // rbx
unsigned __int16 v22; // ax
const char *[System_Inventory]_Pci_Device_is_found_in_Pcie_Slot_is_of_Riser; // rdx
__int64 v24; // [rsp+20h] [rbp-A9h]
__int64 v25; // [rsp+28h] [rbp-A1h]
_DWORD v26[2]; // [rsp+30h] [rbp-99h]
char v27; // [rsp+38h] [rbp-91h]
_DWORD v28[3]; // [rsp+40h] [rbp-89h]
__int16 v29; // [rsp+4Ch] [rbp-7Dh]
char v30; // [rsp+4Eh] [rbp-7Bh]
_DWORD v31[6]; // [rsp+50h] [rbp-79h]
__int16 v32; // [rsp+68h] [rbp-61h]
char v33; // [rsp+6Ah] [rbp-5Fh]
__int64 v34; // [rsp+70h] [rbp-59h] BYREF
__int64 v35; // [rsp+78h] [rbp-51h] BYREF
unsigned __int64 i_1; // [rsp+80h] [rbp-49h] BYREF
__int64 v37; // [rsp+88h] [rbp-41h] BYREF
_BYTE v38[144]; // [rsp+90h] [rbp-39h] BYREF
unsigned __int8 v39; // [rsp+130h] [rbp+67h] BYREF
__int128 v40; // [rsp+138h] [rbp+6Fh] BYREF
__int64 v41; // [rsp+148h] [rbp+7Fh] BYREF
v29 = -1; /*0x5129*/
v32 = -1; /*0x5133*/
v28[0] = 536937216; /*0x5156*/
v0 = 0; /*0x515e*/
v28[1] = 54526211; /*0x5161*/
v28[2] = 16998401; /*0x516e*/
v30 = -1; /*0x5179*/
v31[0] = 65792; /*0x517d*/
v31[1] = 20972033; /*0x5184*/
v31[2] = 33636353; /*0x518b*/
v31[3] = 1610809664; /*0x5192*/
v31[4] = 23068929; /*0x5199*/
v31[5] = 50421762; /*0x51a0*/
v33 = -1; /*0x51a7*/
v26[0] = 536936736; /*0x51ab*/
v26[1] = -65023; /*0x51b3*/
v27 = -1; /*0x51bb*/
v37 = 0; /*0x51c0*/
result = (*(__int64 (__fastcall **)(__int64, void *, _QWORD, unsigned __int64 *, __int64 *))(qword_96A8 + 312))( /*0x51c4*/
2,
&unk_9400,
0,
&i_1,
&v35);
if ( result >= 0 ) /*0x51cd*/
{
for ( i = 0; i < i_1; ++i ) /*0x51da*/
{
if ( (*(__int64 (__fastcall **)(_QWORD, void *, __int64 *))(qword_96A8 + 152))( /*0x5203*/
*(_QWORD *)(v35 + 8 * i),
&unk_9400,
&v34) >= 0 )
{
(*(void (__fastcall **)(__int64, __int64, _QWORD))(v34 + 48))(v34, 2, 0); /*0x5226*/
if ( (v38[30] & 0x7F) == 1 ) /*0x5230*/
{
(*(void (__fastcall **)(__int64, _BYTE *, __int128 *, char *, __int64 *))(v34 + 112))( /*0x5252*/
v34,
v38,
&v40,
(char *)&v40 + 8,
&v41);
if ( (unsigned __int8)((__int64 (*)(void))sub_7F8)() && (unsigned __int8)sub_804(64) ) /*0x5261*/
sub_740( /*0x5285*/
64,
"[System Inventory] Pci Device found in root bridge Bus = %x Dev = %x Fun = %x\n",
(_DWORD)v40,
DWORD2(v40),
v41);
LOBYTE(v5) = v41; /*0x528a*/
LOBYTE(v6) = 16; /*0x528e*/
LOBYTE(v3) = BYTE8(v40); /*0x5291*/
LOBYTE(v4) = v40; /*0x5294*/
v7 = sub_28CC(v4, v3, v5, v6); /*0x529c*/
if ( (unsigned __int8)((__int64 (*)(void))sub_7F8)() && (unsigned __int8)sub_804(64) ) /*0x52ab*/
sub_740(64, "[System Inventory] PciExpReg %x\n", v7); /*0x52c1*/
if ( (unsigned __int8)((__int64 (*)(void))sub_7F8)() && (unsigned __int8)sub_804(64) ) /*0x52d2*/
sub_740(64, "PciExpReg->SlotStatus.Bits.PresenceDetect = %x\n", (*(unsigned __int16 *)(v7 + 26) >> 6) & 1); /*0x52f2*/
if ( (unsigned __int8)((__int64 (*)(void))sub_7F8)() && (unsigned __int8)sub_804(64) ) /*0x5303*/
sub_740(64, "PciExpReg->SlotCapability.Bits.PhysicalSlotNumber = %x\n", *(_DWORD *)(v7 + 20) >> 19); /*0x531e*/
if ( (*(_BYTE *)(v7 + 26) & 0x40) != 0 ) /*0x5327*/
{
(*(void (__fastcall **)(__int64, _QWORD, __int64, __int64, unsigned __int8 *))(v34 + 48))( /*0x5347*/
v34,
0,
26,
1,
&v39);
v8 = v39; /*0x5360*/
v9 = (*(__int64 (__fastcall **)(_QWORD, void *, __int64 *))(qword_96A8 + 152))( /*0x536e*/
*(_QWORD *)(v35 + 8 * i),
&unk_9470,
&v37);
if ( (unsigned __int8)((__int64 (*)(void))sub_7F8)() && (unsigned __int8)sub_804(64) ) /*0x537d*/
sub_740(64, "Locate DevicePathProtocol Status - %r\n", v9); /*0x5393*/
if ( (unsigned __int8)sub_7EC() && v9 < 0 ) /*0x53a4*/
{
if ( (unsigned __int8)((__int64 (*)(void))sub_7F8)() && (unsigned __int8)sub_804(0x80000000LL) ) /*0x53b4*/
sub_740(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", v9); /*0x53cc*/
sub_788("e:\\hs\\LenovoServerPkg\\SystemInventory\\SystemInventory.c", 1231, "!EFI_ERROR (Status)"); /*0x53e4*/
}
if ( (*(_DWORD *)(v7 + 20) & 0xFFF80000) != 0 ) /*0x53f0*/
{
v10 = 0; /*0x53f6*/
while ( (unsigned __int16)sub_2500(((32LL * v8) | v10 & 0x1F) << 15) == 0xFFFF ) /*0x541e*/
{
if ( ++v10 > 0x1Fu ) /*0x5425*/
goto LABEL_48; /*0x5425*/
}
v11 = *(_DWORD *)(v7 + 20) >> 19; /*0x543e*/
v12 = 19LL * v0; /*0x5441*/
*(_BYTE *)(v12 + qword_9680 + 2275) = v11; /*0x544f*/
sub_3488(v8, v10, 0, v11); /*0x545a*/
v13 = 0; /*0x546a*/
v14 = 0; /*0x5471*/
do /*0x54a5*/
{
if ( __PAIR128__(*((unsigned __int8 *)v28 + v14 + 1), *((unsigned __int8 *)v28 + v14)) == v40 /*0x5493*/
&& *((unsigned __int8 *)v28 + v14 + 2) == v41 )
{
if ( (unsigned __int8)sub_7F8(v14, v13, v41, *((_QWORD *)&v40 + 1)) && (unsigned __int8)sub_804(64) ) /*0x56f0*/
{
[System_Inventory]_Pci_Device_is_found_in_Pcie_Slot_is_of_Riser = "[System Inventory] Pci Device is f" /*0x56f9*/
"ound in Pcie Slot is of Riser Type"
" - %d, Location Bus = %x Dev = %x Fun = %x\n";
LABEL_53:
LODWORD(v25) = 0; /*0x5700*/
LODWORD(v24) = v10; /*0x5712*/
sub_740(64, [System_Inventory]_Pci_Device_is_found_in_Pcie_Slot_is_of_Riser, 0, v8, v24, v25); /*0x5716*/
}
goto LABEL_54; /*0x5716*/
}
++v13; /*0x5499*/
v14 = 3 * v13; /*0x549c*/
}
while ( *((_BYTE *)v28 + 3 * v13 + 2) != 0xFF ); /*0x54a5*/
v15 = 0; /*0x54a7*/
v16 = 0; /*0x54aa*/
while ( __PAIR128__(*((unsigned __int8 *)v31 + v16 + 1), *((unsigned __int8 *)v31 + v16)) != v40 /*0x54c9*/
|| *((unsigned __int8 *)v31 + v16 + 2) != v41 )
{
++v15; /*0x54cf*/
v16 = 3 * v15; /*0x54d2*/
if ( *((_BYTE *)v31 + 3 * v15 + 2) == 0xFF ) /*0x54db*/
{
v17 = 0; /*0x54dd*/
v18 = 0; /*0x54e0*/
while ( __PAIR128__(*((unsigned __int8 *)v26 + v18 + 1), *((unsigned __int8 *)v26 + v18)) != v40 /*0x54ff*/
|| *((unsigned __int8 *)v26 + v18 + 2) != v41 )
{
++v17; /*0x5505*/
v18 = 3 * v17; /*0x5508*/
if ( *((_BYTE *)v26 + 3 * v17 + 2) == 0xFF ) /*0x5511*/
{
if ( (unsigned __int8)sub_7F8(v18, v17, v41, *((_QWORD *)&v40 + 1)) ) /*0x5513*/
{
if ( (unsigned __int8)sub_804(64) ) /*0x5523*/
sub_740( /*0x5542*/
64,
"[System Inventory] Pci Device found is in Onboard Slot, Location Bus = %x Dev = %x Fun = %x\n",
v8,
v10,
0);
}
goto LABEL_47; /*0x5542*/
}
}
if ( (unsigned __int8)sub_7F8(v18, v17, v41, *((_QWORD *)&v40 + 1)) && (unsigned __int8)sub_804(64) ) /*0x5761*/
sub_740( /*0x5780*/
64,
"[System Inventory] Pci Device found is a MEZZ card, Location Bus = %x Dev = %x Fun = %x\n",
v8,
v10,
0);
*(_BYTE *)(v12 + qword_9680 + 2276) = 9; /*0x578c*/
goto LABEL_47; /*0x5794*/
}
}
if ( (unsigned __int8)sub_7F8(v16, v15, v41, *((_QWORD *)&v40 + 1)) && (unsigned __int8)sub_804(64) ) /*0x573f*/
{
[System_Inventory]_Pci_Device_is_found_in_Pcie_Slot_is_of_Riser = "[System Inventory] Pci Device is found" /*0x5748*/
" in NVME Slot is of Riser Type - %d, L"
"ocation Bus = %x Dev = %x Fun = %x\n";
goto LABEL_53; /*0x574f*/
}
LABEL_54:
*(_BYTE *)(v12 + qword_9680 + 2276) = 0; /*0x571b*/
LABEL_47:
*(_BYTE *)(v12 + qword_9680 + 2277) = v8; /*0x5547*/
v19 = qword_9680; /*0x5558*/
*(_BYTE *)(v12 + qword_9680 + 2278) &= 7u; /*0x5562*/
*(_BYTE *)(v12 + v19 + 2278) |= 8 * v10; /*0x556a*/
*(_BYTE *)(v12 + qword_9680 + 2278) &= 0xF8u; /*0x557e*/
v20 = ((32 * v8) | v10 & 0x1Fu) << 15; /*0x558f*/
v21 = (unsigned int)v20; /*0x5592*/
*(_WORD *)(v12 + qword_9680 + 2279) = sub_2500(v20); /*0x55a0*/
*(_WORD *)(v12 + qword_9680 + 2281) = sub_2500((unsigned int)v21 | 2LL); /*0x55ba*/
*(_WORD *)(v12 + qword_9680 + 2283) = sub_2500((unsigned int)v21 | 0x2CLL); /*0x55d4*/
*(_WORD *)(v12 + qword_9680 + 2285) = sub_2500((unsigned int)v21 | 0x2ELL); /*0x55ee*/
*(_BYTE *)(v12 + qword_9680 + 2287) = sub_24F0((unsigned int)v21 | 9LL); /*0x560e*/
*(_BYTE *)(v12 + qword_9680 + 2288) = sub_24F0((unsigned int)v21 | 0xALL); /*0x5628*/
*(_BYTE *)(v12 + qword_9680 + 2289) = sub_24F0(v21 | 0xB); /*0x563b*/
v22 = sub_2500(((v41 & 7 | (8 * (BYTE8(v40) & 0x1F | (32LL * (unsigned __int8)v40)))) << 12) | 0xA2); /*0x566d*/
++v0; /*0x5684*/
*(_BYTE *)(v12 + qword_9680 + 2290) = v22 & 0xF; /*0x5687*/
*(_BYTE *)(v12 + qword_9680 + 2291) = (v22 >> 4) & 0x3F; /*0x5695*/
}
}
}
}
LABEL_48:
; /*0x56a1*/
}
*(_BYTE *)(qword_9680 + 2274) = 4; /*0x56b5*/
(*(void (__fastcall **)(__int64))(qword_96A8 + 72))(v35); /*0x56c7*/
return 0; /*0x56ca*/
}
return result; /*0x56cc*/
}