Newer
Older
AMI-Aptio-BIOS-Reversed / PurleyPlatPkg / Platform / Pei / EarlyVideoPei / VgaModeConfigPll.c
@Ajax Dong Ajax Dong 2 days ago 3 KB Full restructure
int __fastcall VgaModeConfigPll(int *this, __int16 a2)
{
  int v2; // ebp
  unsigned int n15_4; // edi
  unsigned int n5; // ebx
  unsigned int n15; // esi
  int v6; // ecx
  int n15_3; // eax
  int v8; // ecx
  int v9; // edx
  int v10; // ecx
  int v11; // ecx
  int v12; // edx
  int v13; // ecx
  int v14; // edx
  int v15; // ecx
  int v16; // eax
  unsigned int n15_2; // eax
  unsigned int n15_5; // ecx
  unsigned int n255_1; // ecx
  int v20; // esi
  int v21; // edx
  int v22; // ecx
  int v23; // ecx
  unsigned int n15_7; // edx
  unsigned int v25; // ecx
  unsigned int n15_8; // ecx
  int v27; // ecx
  int v28; // edx
  int v29; // ebx
  int v30; // ecx
  int v31; // ecx
  unsigned int n15_6; // [esp+18h] [ebp-14h]
  unsigned int n15_1; // [esp+1Ch] [ebp-10h]
  int v36; // [esp+20h] [ebp-Ch]
  unsigned int n255; // [esp+24h] [ebp-8h]
  unsigned int n2; // [esp+28h] [ebp-4h]

  v2 = *this;
  n15_4 = (unsigned __int8)PciRegRead(*this, 510525540);
  n5 = 0;
  while ( 2 )
  {
    n255 = 255;
    n15 = 0;
    n15_1 = 0;
    v36 = 0;
    n2 = 0;
    n15_6 = n15_4;
    if ( !n15_4 )
      goto LABEL_13;
    while ( 1 )
    {
      PciRegWrite(v2, 510525464, 33072);
      n15_3 = n15;
      if ( n15 >= n15_4 )
        n15_3 = n15 - n15_4;
      PciRegWrite(v6, 510525544, n15_3);
      PciRegRead(v8, 510525440);
      PciRegWrite(v10, v9 + 24, 304);
      PciRegRead(v11, 510525440);
      PciRegRead(v13, v12);
      v16 = PciRegRead(v15, v14 + 28);
      if ( (BYTE2(v16) & 0x96) == 0x96 )
        break;
      n15_2 = n15_1;
      if ( n15_1 )
      {
        if ( (unsigned int)++v36 >= 2 )
        {
          n15_5 = n15;
          n15_6 = n15;
          goto LABEL_10;
        }
      }
LABEL_9:
      n15_5 = n15_6;
LABEL_10:
      if ( ++n15 >= n15_5 )
      {
        n255_1 = n255;
        goto LABEL_12;
      }
    }
    if ( !n15 )
    {
      n15_6 += 16;
      n15 = 15;
LABEL_8:
      n15_2 = n15_1;
      goto LABEL_9;
    }
    if ( BYTE2(v16) != 150 )
    {
LABEL_17:
      if ( n255 > n15 )
        n255 = n15;
      if ( n15_1 < n15 )
        n15_1 = n15;
      v36 = 0;
      goto LABEL_8;
    }
    if ( n2 < 2 )
    {
      ++n2;
      goto LABEL_17;
    }
    n255_1 = n15;
    n15_2 = n15;
LABEL_12:
    if ( !n15_2 )
    {
LABEL_13:
      v20 = PciRegRead(v2, 510525540) & 0x3FFFF;
      PciRegWrite(v22, v21, v20);
      PciRegWrite(v23, 510525544, 0);
      MicroSecondDelay(10);
      PciRegWrite(v2, 510525540, v20 | 0xC0000);
      MicroSecondDelay(10);
      continue;
    }
    break;
  }
  n15_7 = (n15_2 + n255_1) >> 1;
  if ( n15_7 >= n15_4 )
    n15_7 -= n15_4;
  v25 = n15_4 >> 2;
  if ( a2 == 1 )
  {
    n15_8 = n15_7 + v25 + 5;
    if ( n15_8 >= n15_4 )
      n15_8 -= n15_4;
  }
  else
  {
    n15_8 = n15_7 + v25;
    if ( n15_8 >= n15_4 )
      n15_8 -= n15_4;
    if ( (n15_8 & 8) != 0 )
    {
      while ( (n15_8 & 8) != 0 || n5 < 5 )
      {
        ++n5;
        if ( ++n15_8 >= n15_4 )
          n15_8 -= n15_4;
      }
    }
    else
    {
      while ( (n15_8 & 7) != 7 && n5 < 5 )
      {
        ++n5;
        if ( ++n15_8 >= n15_4 )
          n15_8 -= n15_4;
      }
    }
  }
  PciRegWrite(v2, 510525544, n15_7 | (n15_8 << 8));
  PciRegRead(v27, 510525440);
  v29 = v28 + 24;
  PciRegWrite(v30, v28 + 24, 33072);
  return PciRegWrite(v31, v29, 304);
}