HalpBlkPoReadPerfIoPort
INT64 __fastcall HalpBlkPoReadPerfIoPort(UINT64 P3, INT16 a2, INT16 a3, _DWORD *a4){
ULONG_PTR v5;
__int64 v8;
unsigned __int8 v9;
unsigned __int64 v10;
int v11;
__int64(__fastcall *v12)(_QWORD, int *, __int128 *, __int64, int *);
int v13;
int v15[2];
int v16[2];
__int128 v17;
__int64 v18;
int v19;
v5 = (unsigned int)P3;
v8 = *(_QWORD *)(HalpBlkPcr + 8i64 * (unsigned int)P3);
KeAcquireSpinLockRaiseToDpc((UINT64 *)(v8 + 2216), a2);
v10 = v9;
HalpBlkPoBusyWait(3ui64, (unsigned int)v5, v8 + 2216);
*(_QWORD *)(v8 + 2240) = 0i64;
*(_QWORD *)(v8 + 2248) = 0i64;
*(_WORD *)(v8 + 2238) = a3;
*(_DWORD *)(v8 + 2228) = 1;
*(_DWORD *)(v8 + 2232) = 2;
*(_WORD *)(v8 + 2236) = a2;
_InterlockedExchange((volatile __int32 *)(v8 + 2224), 1);
v11 = *(_DWORD *)(v8 + 20);
v15[0] = -1;
v18 = 0i64;
v17 = 0i64;
DWORD2(v17) = v11;
LODWORD(v17) = 4;
v15[1] = 1;
v16[1] = *(_DWORD *)(HalpInterruptIpiLines + 20);
v16[0] = *(_DWORD *)(HalpInterruptIpiLines + 16);
v12 = *(__int64(__fastcall **)(_QWORD, int *, __int128 *, __int64, int *))(HalpInterruptController + 120);
_disable();
v13 = v12(*(_QWORD *)(HalpInterruptController + 16), v16, &v17, 225i64, v15);
if( (v19 & 0x200) != 0 )
_enable();
if( v13 < 0 )
KeBugCheckEx(0x1DAu, 4ui64, 3ui64, v5, v8 + 2216);
HalpBlkPoBusyWait(3ui64, (unsigned int)v5, v8 + 2216);
*a4 = *(_DWORD *)(v8 + 2240);
KxReleaseSpinLock((UINT64 *)(v8 + 2216));
__writecr8(v10);
return(unsigned int)v13;
}Referenced by:
No references.