Newer
Older
AMI-Aptio-BIOS-Reversed / RegAccessPeim / decompiled / CpuTypeToDeviceIndex.c
@Ajax Dong Ajax Dong 2 days ago 5 KB Init
// CpuTypeToDeviceIndex - addr:0xffdafb26
int __cdecl CpuTypeToDeviceIndex(int a1, unsigned __int8 n20, unsigned __int8 n0x1C, int n2, int a5)
{
  char v5; // cl
  unsigned int n0x1F; // esi
  unsigned __int8 n0x1C_1; // al
  int n0x1C_2; // eax
  int n9; // [esp-4h] [ebp-14h]
  int v11; // [esp+0h] [ebp-10h]

  v5 = *(_BYTE *)(a5 + 44);
  n0x1F = 0;
  switch ( n20 )
  {
    case 0u:
      n0x1C_1 = n0x1C;
      if ( v5 || n0x1C >= 0x1Cu )
        goto LABEL_27;
      if ( n0x1C < 8u )
        goto LABEL_23;
      if ( n0x1C < 0x10u )
      {
        n9 = 9;
        goto LABEL_8;
      }
      return 11 - (n0x1C < 0x18u);
    case 1u:
      n0x1C_1 = n0x1C;
      if ( v5 || n0x1C >= 0x1Cu )
        goto LABEL_27;
      if ( n0x1C < 8u )
      {
        n9 = 14;
        goto LABEL_8;
      }
      if ( n0x1C < 0x10u )
      {
        n9 = 15;
        goto LABEL_8;
      }
      return 17 - (n0x1C < 0x18u);
    case 2u:
      n0x1C_1 = n0x1C;
      if ( v5 || n0x1C >= 0x1Cu )
      {
LABEL_27:
        CpuDeadLoopEx(a1, "\nInvalid CHA Box Instance Number %d. \n", n0x1C_1);
      }
      else
      {
        if ( n0x1C < 8u )
        {
          n9 = 20;
          goto LABEL_8;
        }
        if ( n0x1C < 0x10u )
        {
          n9 = 21;
          goto LABEL_8;
        }
        return 23 - (n0x1C < 0x18u);
      }
      return n0x1F;
    case 3u:
      if ( !v5 && !n0x1C )
      {
        n9 = 29;
        goto LABEL_8;
      }
      CpuDeadLoopEx(a1, "\nInvalid CHABC Box Instance Number %d. \n", n0x1C);
      return n0x1F;
    case 4u:
      if ( !v5 && !n0x1C )
      {
        n9 = 30;
        goto LABEL_8;
      }
      CpuDeadLoopEx(a1, "\nInvalid PCU Box Instance Number %d. \n", n0x1C);
      return n0x1F;
    case 5u:
      if ( !v5 && !n0x1C )
      {
        n9 = 31;
        goto LABEL_8;
      }
      CpuDeadLoopEx(a1, "\nInvalid VCU Box Instance Number %d. \n", n0x1C);
      return n0x1F;
    case 6u:
      if ( v5 || n0x1C >= 2u )
        CpuDeadLoopEx(a1, "\nInvalid M2MEM Box Instance Number %d. \n", n0x1C);
      else
        n0x1F = n0x1C + 8;
      goto LABEL_94;
    case 7u:
    case 0xBu:
      if ( v5 )
        goto LABEL_12;
      if ( n0x1C <= 1u )
      {
        n9 = 10;
      }
      else if ( n0x1C == 2 )
      {
        n9 = 11;
      }
      else if ( n0x1C <= 4u )
      {
        n9 = 12;
      }
      else
      {
        if ( n0x1C != 5 )
          return n0x1F;
        n9 = 13;
      }
      goto LABEL_8;
    case 8u:
      if ( v5 )
        goto LABEL_15;
      n0x1F = n0x1C / (unsigned int)*(unsigned __int8 *)(a5 + 60) + 22;
      goto LABEL_94;
    case 9u:
      if ( v5 )
        goto LABEL_15;
      if ( n0x1C < 3u )
      {
        n0x1F = n0x1C + 14;
        goto LABEL_94;
      }
      n0x1C_2 = n0x1C;
      goto LABEL_58;
    case 0xAu:
      if ( v5 )
      {
LABEL_12:
        CpuDeadLoopEx(a1, "\nInvalid Cpu type.\n", v11);
        return n0x1F;
      }
      if ( n0x1C < 2u )
      {
        n9 = 18;
        goto LABEL_8;
      }
      CpuDeadLoopEx(a1, "\nInvalid Box instance.\n", v11);
      return n0x1F;
    case 0xCu:
      if ( v5 )
      {
LABEL_15:
        CpuDeadLoopEx(a1, "\nInvalid Cpu type.\n", v11);
      }
      else
      {
        n0x1C_2 = n0x1C;
        if ( n0x1C >= 5u )
LABEL_58:
          CpuDeadLoopEx(a1, "\nInvalid KTI Box Instance Number %d. \n", n0x1C_2);
        else
          n0x1F = (unsigned __int8)byte_FFDB09B4[n0x1C];
      }
      goto LABEL_94;
    case 0xDu:
      if ( v5 || n0x1C >= 4u )
        CpuDeadLoopEx(a1, "\nInvalid IIO PCIE DMI Box Instance Number %d. \n", n0x1C);
      return n0x1F;
    case 0xEu:
      if ( v5 || n0x1C >= 0x15u )
      {
        CpuDeadLoopEx(a1, "\nInvalid IIO PCIE Box Instance Number %d. \n", n0x1C);
      }
      else
      {
        if ( !n0x1C )
          return n0x1F;
        n0x1F = (n0x1C - 1) % 4;
      }
LABEL_94:
      if ( n0x1F > 0x1F )
        CpuDeadLoopEx(a1, "\nInvalid Device %d accessed for Box Type %d and Box Instance %d. \n", n0x1F);
      return n0x1F;
    case 0xFu:
      if ( v5 )
        CpuDeadLoopEx(a1, "\nInvalid IIO PCIE Box Instance Number %d. \n", n0x1C);
      return n0x1F;
    case 0x10u:
      if ( !v5 )
      {
        n9 = 4;
        goto LABEL_8;
      }
      CpuDeadLoopEx(a1, "\nInvalid IIO CB Box Instance Number %d. \n", n0x1C);
      return n0x1F;
    case 0x11u:
      if ( !v5 )
      {
        n9 = 5;
        goto LABEL_8;
      }
      CpuDeadLoopEx(a1, "\nInvalid IIO VTD Box Instance Number %d. \n", n0x1C);
      return n0x1F;
    case 0x12u:
      if ( !v5 && n0x1C < 0x15u )
      {
        n9 = 7;
        goto LABEL_8;
      }
      CpuDeadLoopEx(a1, "\nInvalid IIO DFX Box Instance Number %d. \n", n0x1C);
      return n0x1F;
    case 0x13u:
      if ( !v5 && !n0x1C )
      {
LABEL_23:
        n9 = 8;
        goto LABEL_8;
      }
      CpuDeadLoopEx(a1, "\nInvalid Ubox Instance Number %d. \n", n0x1C);
      break;
    case 0x14u:
      if ( v5 || n0x1C )
      {
        CpuDeadLoopEx(a1, "\nInvalid FPGA Instance number %d. \n", n0x1C);
      }
      else
      {
        n9 = 16;
LABEL_8:
        n0x1F = n9;
      }
      break;
    default:
      CpuDeadLoopEx(a1, "\nInvalid Box Type %d. \n", n20);
      goto LABEL_94;
  }
  return n0x1F;
}