Newer
Older
AMI-Aptio-BIOS-Reversed / PurleySktPkg / SouthClusterLbg / SiInit / Pei / SiInitPreMem / decompiled / ffd87eed.c
@Ajax Dong Ajax Dong 7 days ago 2 KB Recovering names
int PchWdtInit()
{
  int v0; // eax
  int v1; // ebx
  __int16 v2; // bp
  int v3; // eax
  int result; // eax
  char v5; // cl
  _DWORD *v6; // edi
  unsigned int v7; // ebx
  unsigned int v8; // ebx
  int v9; // eax
  int v10; // eax
  int v11; // esi
  int v12; // eax
  int v13; // [esp+14h] [ebp-8h] BYREF
  int v14; // [esp+18h] [ebp-4h]

  v0 = sub_FFD8EEB6(); /*0xffd87ef4*/
  v1 = sub_FFD8CD6B(v0); /*0xffd87f00*/
  DebugPrint(64, (int)"(WDT) Readback = 0x%08x\n", v1); /*0xffd87f0a*/
  if ( (v1 & 0x4000) != 0 ) /*0xffd87f18*/
  {
    LOBYTE(v14) = 1; /*0xffd87f1c*/
    v2 = (v1 & 0x3FF) + 1; /*0xffd87f27*/
  }
  else
  {
    v14 = 0; /*0xffd87f2e*/
    v2 = 0; /*0xffd87f32*/
  }
  v3 = sub_FFD8AD54(); /*0xffd87f34*/
  result = (*(int (__cdecl **)(int, int, int, int *))(*(_DWORD *)v3 + 52))(v3, 4, 28, &v13); /*0xffd87f45*/
  if ( result >= 0 ) /*0xffd87f4d*/
  {
    v5 = v14; /*0xffd87f5c*/
    v6 = (_DWORD *)(v13 + 8); /*0xffd87f60*/
    *(_DWORD *)(v13 + 8) = unk_FFD97F0C; /*0xffd87f63*/
    *++v6 = unk_FFD97F10; /*0xffd87f64*/
    *++v6 = unk_FFD97F14; /*0xffd87f65*/
    v6[1] = unk_FFD97F18; /*0xffd87f66*/
    *(_BYTE *)(v13 + 26) = v5; /*0xffd87f75*/
    *(_WORD *)(v13 + 24) = v2; /*0xffd87f7c*/
    if ( (v1 & 0x3000000) != 0 ) /*0xffd87f82*/
    {
      DebugPrint(0x80000000, (int)"(WDT) Expiration detected.\n", v1); /*0xffd87f8b*/
      v7 = v1 & 0xFC3FFFFF | 0x3800000; /*0xffd87f99*/
    }
    else
    {
      if ( (v1 & 0x400000) == 0 || PchWdtIsUnexpectedReset() ) /*0xffd87fa9*/
      {
        DebugPrint(64, (int)"(WDT) Status OK.\n", v1); /*0xffd87fcf*/
        v8 = v1 & 0xFF7FFFFF; /*0xffd87fd7*/
      }
      else
      {
        DebugPrint(0x80000000, (int)"(WDT) Unexpected reset detected and ignored.\n"); /*0xffd87fb8*/
        v8 = v1 & 0xFF3FFFFF; /*0xffd87fbf*/
      }
      v7 = v8 | 0x3000000; /*0xffd87fdd*/
    }
    v9 = sub_FFD8EEB6(); /*0xffd87fdf*/
    sub_FFD8CD97(v9, v7); /*0xffd87fe8*/
    InstallPpi(&unk_FFD9816C); /*0xffd87ff2*/
    v10 = InstallPpi(&unk_FFD98144); /*0xffd87ffc*/
    v11 = v10; /*0xffd88001*/
    if ( v10 < 0 ) /*0xffd88005*/
    {
      DebugPrint(0x80000000, (int)"\nASSERT_EFI_ERROR (Status = %r)\n", v10); /*0xffd8800e*/
      v12 = GetReportStatusCodePpi(); /*0xffd88016*/
      if ( v12 ) /*0xffd8801d*/
        (*(void (__cdecl **)(const char *, int, const char *))(v12 + 4))( /*0xffd8802e*/
          "e:\\hs\\PurleySktPkg\\SouthClusterLbg\\LibraryPrivate\\PeiPchInitLib\\Wdt.c",
          216,
          "!EFI_ERROR (Status)");
    }
    return v11; /*0xffd88034*/
  }
  return result; /*0xffd88036*/
}