Newer
Older
AMI-Aptio-BIOS-Reversed / Platform / MeExtractSpsConfigOnSetupEnter.c
@Ajax Dong Ajax Dong 2 days ago 2 KB Init
// MeExtractSpsConfigOnSetupEnter - decompiled from Platform.efi
unsigned __int64 __fastcall MeExtractSpsConfigOnSetupEnter(_BYTE *SourceBuffer)
{
  int ManufacturingMode; // ebx
  int v4; // ebx
  int v5; // ebx
  int n240; // ebx
  const CHAR8 *ME_TYPE_UNDEF; // rdx
  __int64 v8; // rcx
  unsigned int v9; // r8d
  int n5; // ebx
  unsigned int n2; // eax

  DebugPrint(0x40u, "[ME] MeExtractSpsConfigOnSetupEnter called...\n"); /*0x4810*/
  if ( !SourceBuffer ) /*0x4818*/
  {
    Assert( /*0x482d*/
      (__int64)"e:\\hs\\PurleyRpPkg\\Platform\\Dxe\\Setup\\MeSpsSetup.c",
      408,
      (__int64)"MeRcConfiguration != ((void *) 0)");
    return 0x8000000000000002uLL; /*0x483c*/
  }
  SourceBuffer[51] = GetManufacturingMode(); /*0x4846*/
  ManufacturingMode = GetManufacturingMode(); /*0x485f*/
  DebugPrint(0x40u, "[HECI] %s (MeType is ", (const char *)L"Set MeType on SetupEnter"); /*0x4861*/
  if ( !ManufacturingMode ) /*0x4868*/
  {
    ME_TYPE_UNDEF = "ME_TYPE_UNDEF"; /*0x48b1*/
    goto LABEL_14; /*0x48b1*/
  }
  v4 = ManufacturingMode - 1; /*0x486a*/
  if ( !v4 ) /*0x486d*/
  {
    ME_TYPE_UNDEF = "ME_TYPE_SPS"; /*0x48a8*/
    goto LABEL_14; /*0x48af*/
  }
  v5 = v4 - 1; /*0x486f*/
  if ( !v5 ) /*0x4872*/
  {
    ME_TYPE_UNDEF = "ME_TYPE_WS"; /*0x489f*/
    goto LABEL_14; /*0x48a6*/
  }
  n240 = v5 - 13; /*0x4874*/
  if ( !n240 ) /*0x4877*/
  {
    ME_TYPE_UNDEF = "ME_TYPE_DFX"; /*0x4896*/
LABEL_14:
    DebugPrint(0x40u, ME_TYPE_UNDEF); /*0x48b8*/
    goto LABEL_15; /*0x48bb*/
  }
  if ( n240 == 240 ) /*0x4882*/
    DebugPrint(0x40u, "ME_TYPE_DISABLED"); /*0x4894*/
  else
    DebugPrint(0x40u, "UNKNOWN"); /*0x488b*/
LABEL_15:
  DebugPrint(0x40u, ")\n"); /*0x48c0*/
  v9 = *(_DWORD *)(ReadCpuPciCfg(v8, 22, 0) + 64); /*0x48db*/
  if ( (v9 & 0xF) == 0xF ) /*0x48e7*/
  {
    n5 = 5; /*0x48e9*/
  }
  else
  {
    n2 = HIWORD(v9) & 0xF; /*0x48f6*/
    if ( !n2 ) /*0x48f9*/
      goto LABEL_25; /*0x48f9*/
    n5 = 2; /*0x48fb*/
    if ( n2 == 2 ) /*0x4902*/
      goto LABEL_26; /*0x4902*/
    n5 = 3; /*0x4904*/
    if ( n2 == 3 ) /*0x490b*/
      goto LABEL_26; /*0x490b*/
    if ( n2 > 3 ) /*0x490d*/
    {
      if ( n2 <= 5 ) /*0x4916*/
      {
        n5 = 4; /*0x4924*/
        goto LABEL_26; /*0x4929*/
      }
      if ( n2 == 15 ) /*0x491b*/
      {
LABEL_25:
        n5 = 0; /*0x492b*/
        goto LABEL_26; /*0x492b*/
      }
    }
    n5 = 6; /*0x491d*/
  }
LABEL_26:
  DebugPrint(0x40u, "[HECI] MEFS1: %08X -> MeMode %d\n", v9, n5);
  SourceBuffer[52] = n5; /*0x494d*/
  DebugPrint(0x40u, "[ME] MeFirmwareMode is set to %d\n", (unsigned __int8)n5); /*0x4950*/
  ExtractMeSpsConfig((__int64)SourceBuffer); /*0x4958*/
  return 0; /*0x4969*/
}