// 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*/
}