__int64 __fastcall sub_5A7C(_BYTE *p_n145, __int16 a2, unsigned __int16 n4, __int64 a4, unsigned int a5)
{
unsigned __int64 n4_4; // rbx
unsigned int v8; // r15d
__int16 v9; // r14
unsigned __int16 n4_3; // bp
__int64 v11; // rsi
__int64 v12; // rdx
__int64 v13; // rcx
__int64 v14; // rdi
__int64 v15; // r8
__int64 v16; // r9
unsigned int v17; // esi
__int64 v18; // rdx
__int64 v19; // r8
__int64 v20; // r9
unsigned __int16 n4_2; // si
__int64 v23; // r8
__int16 v24; // [rsp+72h] [rbp+Ah] BYREF
_BYTE v25[4]; // [rsp+74h] [rbp+Ch] BYREF
unsigned int v26; // [rsp+78h] [rbp+10h]
unsigned __int16 n4_1; // [rsp+80h] [rbp+18h]
n4_1 = n4; /*0x5a81*/
n4_4 = a2 & 3; /*0x5aaa*/
v8 = a5 + 2; /*0x5aad*/
v26 = a5 + 4; /*0x5ab4*/
v9 = a2 & 0xFFFC; /*0x5abd*/
n4_3 = 0; /*0x5ac3*/
if ( !n4 ) /*0x5aca*/
return 0; /*0x5bd5*/
LABEL_2:
v24 = v9 & 0x7FFF; /*0x5ad3*/
v11 = 0; /*0x5afb*/
v14 = (*(__int64 (__fastcall **)(__int64, __int64, _QWORD, __int64, __int16 *))(a4 + 56))(a4, 1, v8, 1, &v24); /*0x5afd*/
if ( v14 >= 0 )
{
while ( 1 )
{
(*(void (__fastcall **)(__int64))(qword_96A8 + 248))(100); /*0x5b15*/
v14 = (*(__int64 (__fastcall **)(__int64, __int64, _QWORD, __int64, __int16 *))(a4 + 48))(a4, 1, v8, 1, &v24); /*0x5b39*/
if ( v14 < 0 ) /*0x5b3f*/
break; /*0x5b3f*/
if ( v24 >= 0 && (unsigned __int64)++v11 < 0x57E40 ) /*0x5b5e*/
continue; /*0x5b5e*/
if ( (v24 & 0x8000) == 0 )
{
if ( (unsigned __int8)sub_7F8(
"Create DisableBmcVirtualCD Event with legacy boot fail, Status: %r\n",
v12,
v15,
v16)
&& (unsigned __int8)sub_804(64) )
{
sub_740(64, "PciConfigReadVpd: Unable to see F bit go TRUE\n");
}
return 0x8000000000000007uLL; /*0x5c3e*/
}
v17 = v26; /*0x5b6e*/
v14 = (*(__int64 (__fastcall **)(__int64, __int64, _QWORD, __int64, _BYTE *))(a4 + 48))(a4, 2, v26, 1, v25); /*0x5b8f*/
if ( v14 < 0 ) /*0x5b95*/
{
if ( (unsigned __int8)sub_7F8(0, v18, v19, v20) && (unsigned __int8)sub_804(64) ) /*0x5bff*/
{
v23 = v17; /*0x5c08*/
goto LABEL_23; /*0x5c0b*/
}
return v14; /*0x5c06*/
}
n4_2 = n4_1; /*0x5b97*/
do /*0x5bc3*/
{
if ( n4_3 >= n4_2 ) /*0x5ba8*/
break; /*0x5ba8*/
++n4_3; /*0x5bae*/
*p_n145++ = v25[n4_4++]; /*0x5bb1*/
}
while ( n4_4 < 4 ); /*0x5bc3*/
v9 += 4; /*0x5bc5*/
n4_4 = 0; /*0x5bc9*/
if ( n4_3 < n4_2 ) /*0x5bcf*/
goto LABEL_2; /*0x5bcf*/
return 0; /*0x5bcf*/
}
}
if ( (unsigned __int8)sub_7F8(v13, v12, v15, v16) && (unsigned __int8)sub_804(64) )
{
v23 = v8; /*0x5c59*/
LABEL_23:
sub_740(64, "PciConfigReadVpd: Error reading PciIo space at offset %x - code = %r\n", v23, v14);
}
return v14; /*0x5bdf*/
}