Newer
Older
AMI-Aptio-BIOS-Reversed / TxtPei / ApicWriteIcr.c
@Ajax Dong Ajax Dong 2 days ago 1 KB Init
// Decompiled: 0xffe0768d
// Function: ApicWriteIcr
// Module: TxtPei.efi (TXTPEI)

int __fastcall ApicWriteIcr(unsigned int a1, unsigned int n0xFF)
{
  void *v4; // ecx
  int v5; // eax
  __int16 v6; // kr00_2
  int v7; // ecx
  int v8; // edx
  __int64 v9; // rax

  if ( ApicGetBase() == 1 ) /*0xffe076a2*/
  {
    if ( n0xFF > 0xFF ) /*0xffe076aa*/
    {
      v5 = DebugPrintProtocol(); /*0xffe076ac*/
      if ( v5 ) /*0xffe076b3*/
        (*(void (__cdecl **)(const char *, int, const char *))(v5 + 4))( /*0xffe076c4*/
          "e:\\hs\\UefiCpuPkg\\Library\\BaseXApicX2ApicLib\\BaseXApicX2ApicLib.c",
          260,
          "ApicId <= 0xff");
    }
    v6 = __readeflags(); /*0xffe076ca*/
    _disable(); /*0xffe076cc*/
    v7 = ApicGetBaseAddr(v4); /*0xffe076da*/
    v8 = *(_DWORD *)(v7 + 784); /*0xffe076e1*/
    while ( (*(_DWORD *)(v7 + 768) & 0x1000) != 0 ) /*0xffe076ef*/
      ; /*0xffe076e7*/
    *(_DWORD *)(v7 + 784) = n0xFF << 24; /*0xffe076f4*/
    *(_DWORD *)(v7 + 768) = a1; /*0xffe076fa*/
    do /*0xffe07708*/
      LODWORD(v9) = *(_DWORD *)(v7 + 768); /*0xffe07700*/
    while ( (v9 & 0x1000) != 0 ); /*0xffe07708*/
    *(_DWORD *)(v7 + 784) = v8; /*0xffe0770e*/
    if ( (v6 & 0x200) != 0 ) /*0xffe07714*/
      _enable(); /*0xffe07716*/
    else
      _disable(); /*0xffe07719*/
  }
  else
  {
    v9 = a1; /*0xffe07748*/
    __writemsr(0x830u, a1); /*0xffe07750*/
  }
  return v9; /*0xffe07752*/
}