Newer
Older
AMI-Aptio-BIOS-Reversed / SystemInventory / SystemInventory_sub_5A7C.c
@Ajax Dong Ajax Dong 2 days ago 2 KB Init
__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*/
}