HalpBlkPoWritePerfIoPort

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

Referenced by:

No references.