Newer
Older
AMI-Aptio-BIOS-Reversed / Platform / DxePlatformDriverEntry.c
@Ajax Dong Ajax Dong 2 days ago 5 KB Init
// DxePlatformDriverEntry - decompiled from Platform.efi
__int64 __fastcall DxePlatformDriverEntry(__int64 *Length__1)
{
  __int64 ImageHandle; // rbx
  char v2; // r14
  bool v3; // r12
  char v4; // r13
  unsigned __int16 n4; // r15
  signed __int64 v6; // rax
  __int64 result; // rax
  UINTN Length; // r8
  __int64 v9; // rdi
  __int64 v10; // rdx
  unsigned __int64 i; // rbx
  char *v12; // rsi
  char n93; // al
  unsigned __int8 v14; // al
  __int64 *Length__2; // rsi
  __int64 v16; // rdi
  CHAR16 *v17; // rbx
  UINTN AllocationSize; // rcx
  void *DevicePath; // rdi
  __int64 v20; // rax
  __int64 v21; // rax
  _QWORD v22[3]; // [rsp+30h] [rbp-18h] BYREF
  __int64 *Length_; // [rsp+90h] [rbp+48h] BYREF
  __int64 v24; // [rsp+98h] [rbp+50h] BYREF
  __int64 v25; // [rsp+A0h] [rbp+58h] BYREF
  __int64 v26; // [rsp+A8h] [rbp+60h] BYREF

  Length_ = Length__1; /*0x14b4*/
  ImageHandle = ImageHandle_0; /*0x14cc*/
  LOWORD(Length_) = 1; /*0x14e6*/
  v2 = 0; /*0x14ed*/
  v3 = 0; /*0x14f0*/
  ZeroMem(&SourceBuffer__0, 0x2A4u); /*0x14f3*/
  CopyMem(&SourceBuffer__0, &DestinationBuffer__3, 0x2A4u); /*0x1505*/
  v4 = 0; /*0x150a*/
  n4 = 4; /*0x150d*/
  if ( n4 == 4 ) /*0x151f*/
  {
    v4 = 1; /*0x152b*/
    (*(void (__fastcall **)(void *))(qword_14590 + 40))(&SourceBuffer__0); /*0x152e*/
    v6 = RegisterHiiPackage((__int64)&unk_FB40, (__int64)&SourceBuffer__0); /*0x153b*/
    if ( v6 < 0 ) /*0x1543*/
    {
      DebugPrint(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v6); /*0x1551*/
      Assert( /*0x1569*/
        (__int64)"e:\\hs\\PurleyRpPkg\\Platform\\Dxe\\Setup\\SetupPlatform.c",
        1018,
        (__int64)"!EFI_ERROR (Status)");
    }
  }
  result = (*(__int64 (__fastcall **)(__int64, void *, __int64 *, __int64, _QWORD, int))(BootServices + 280))( /*0x1594*/
             ImageHandle,
             &unk_FA20,
             &v24,
             ImageHandle,
             0,
             2);
  if ( result < 0 ) /*0x159d*/
    return result; /*0x159d*/
  result = (*(__int64 (__fastcall **)(void *, _QWORD, _QWORD *))(BootServices + 320))(&unk_FB10, 0, v22); /*0x15b7*/
  v9 = result; /*0x15bd*/
  if ( result < 0 ) /*0x15c3*/
    return result; /*0x15c3*/
  v10 = v24; /*0x15c9*/
  for ( i = v24 + 20; /*0x15d0*/
        i < v24 + (unsigned __int64)*(unsigned int *)(v24 + 16) && *(_BYTE *)(i + 3) != 2;
        i += *(_DWORD *)i & 0xFFFFFF )
  {
    ; /*0x15e6*/
  }
  v12 = (char *)(i + 4); /*0x15f0*/
  if ( (*(_DWORD *)i & 0xFFFFFFu) <= 4 ) /*0x15fc*/
  {
LABEL_22:
    Length__2 = Length_; /*0x167b*/
    goto LABEL_23; /*0x167b*/
  }
  while ( 1 ) /*0x15fe*/
  {
    n93 = *v12; /*0x15fe*/
    if ( *v12 != 14 ) /*0x1602*/
      break; /*0x1602*/
    if ( (unsigned __int8)CompareMem(v12 + 2, &SourceBuffer__1, Length) ) /*0x160f*/
    {
      v2 = 1; /*0x1618*/
      goto LABEL_19; /*0x161b*/
    }
    v2 = 0; /*0x161d*/
LABEL_20:
    v14 = v12[1] & 0x7F; /*0x1652*/
    v12 += v14; /*0x165d*/
    n4 += v14; /*0x166b*/
    if ( n4 >= (*(_DWORD *)i & 0xFFFFFFu) ) /*0x1675*/
    {
      v10 = v24; /*0x1677*/
      goto LABEL_22; /*0x1677*/
    }
  }
  if ( n93 == 1 || n93 == 93 ) /*0x1628*/
    v3 = StrCmpS(v12 + 2, (UINTN)&Length_, 2) == 0; /*0x1640*/
  if ( !v2 ) /*0x1647*/
    goto LABEL_20; /*0x1647*/
LABEL_19:
  if ( !v3 ) /*0x164c*/
    goto LABEL_20; /*0x164c*/
  DebugPrint(0x80000000, "INTELRCSETUP page FOUND in IFRPACK \n"); /*0x1779*/
  ++word_FCBC; /*0x178a*/
  DevicePath = CreateDevicePath(AllocationSize, 0x1Au, (__int64)&SourceBuffer__2); /*0x1799*/
  if ( !DevicePath ) /*0x179f*/
    Assert( /*0x17b4*/
      (__int64)"e:\\hs\\PurleyRpPkg\\Platform\\Dxe\\Setup\\SetupPlatform.c",
      1079,
      (__int64)"VendorDevicePath != ((void *) 0)");
  v25 = 0; /*0x17c7*/
  v20 = (*(__int64 (__fastcall **)(__int64 *, void *, void *, _QWORD))(BootServices + 328))( /*0x17d6*/
          &v25,
          &unk_FA90,
          DevicePath,
          0);
  v9 = v20; /*0x17dc*/
  if ( v20 < 0 ) /*0x17e2*/
  {
    DebugPrint(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v20); /*0x17f1*/
    Assert((__int64)"e:\\hs\\PurleyRpPkg\\Platform\\Dxe\\Setup\\SetupPlatform.c", 1088, (__int64)"!EFI_ERROR (Status)"); /*0x1809*/
  }
  qword_FE70 = v25; /*0x1819*/
  v26 = v25; /*0x1827*/
  psub_1B18 = (__int64)HiiExtractConfig; /*0x1839*/
  Length__2 = &qword_FEA8; /*0x1840*/
  psub_1EEC = (__int64)HiiConfigRouting; /*0x184e*/
  psub_20C0 = (__int64)SetupFormCallback; /*0x185c*/
  v21 = (*(__int64 (__fastcall **)(__int64 *, void *, _QWORD, __int64 *))(BootServices + 128))( /*0x186a*/
          &v26,
          &unk_FBA0,
          0,
          &psub_1B18);
  if ( v21 < 0 ) /*0x1873*/
  {
    DebugPrint(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v21); /*0x1882*/
    Assert((__int64)"e:\\hs\\PurleyRpPkg\\Platform\\Dxe\\Setup\\SetupPlatform.c", 2657, (__int64)"!EFI_ERROR (Status)"); /*0x189a*/
  }
  v10 = v24; /*0x189f*/
LABEL_23:
  if ( n4 >= (*(_DWORD *)i & 0xFFFFFFu) ) /*0x1696*/
  {
    DebugPrint(0x80000000, "INTELRCSETUP page not found in IFRPACK \n"); /*0x16a2*/
    if ( v9 < 0 ) /*0x16aa*/
    {
      DebugPrint(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v9); /*0x16b9*/
      Assert( /*0x16d1*/
        (__int64)"e:\\hs\\PurleyRpPkg\\Platform\\Dxe\\Setup\\SetupPlatform.c",
        1105,
        (__int64)"!EFI_ERROR (Status)");
    }
    v10 = v24; /*0x16d6*/
  }
  v16 = (*(__int64 (__fastcall **)(_QWORD, __int64, __int64, __int64 *))v22[0])(v22[0], v10, v25, Length__2); /*0x16fc*/
  v17 = ConstructConfigHdr( /*0x1704*/
          (__int64)&SourceBuffer__1,
          aIntelsetup, // "IntelSetup"
          v25);
  if ( !v17 ) /*0x170a*/
    Assert( /*0x171f*/
      (__int64)"e:\\hs\\PurleyRpPkg\\Platform\\Dxe\\Setup\\SetupPlatform.c",
      1112,
      (__int64)"ConfigRequestHdr != ((void *) 0)");
  if ( v4 ) /*0x1727*/
  {
    if ( !CheckActionFlag((__int64)v17) ) /*0x172c*/
      Assert((__int64)"e:\\hs\\PurleyRpPkg\\Platform\\Dxe\\Setup\\SetupPlatform.c", 1115, (__int64)"ActionFlag"); /*0x1748*/
  }
  ExtractConfig(); /*0x1750*/
  return v16; /*0x1758*/
}