HalpInterruptSetLineSpecificOverride

INT64 __fastcall HalpInterruptSetLineSpecificOverride(UINT64 a1){
  __int64 v1; 
  int v2; 
  _QWORD *v3; 
  __int64 v4; 
  __int64 v6; 
  char v7; 
  __int64 *v8; 
  __int64 *v9; 
  __int64 v10; 
  v10 = 0i64;
  v2 = HalpInterruptGsiToLine(a1, &v10);
  if( v2 >= 0 )
  {
    v3 = (_QWORD *)HalpMmAllocCtxAlloc(v1, 40i64);
    v4 = (__int64)v3;
    if( !v3 )
      return 3221225626i64;
    *v3 = 0i64;
    v3[1] = 0i64;
    v6 = v10;
    *(_QWORD *)(v4 + 16) = v10;
    *(_QWORD *)(v4 + 24) = v6;
    *(_DWORD *)(v4 + 36) = 2;
    *(_DWORD *)(v4 + 32) = 1;
    v7 = HalpAcquireHighLevelLock(&HalpInterruptOverridesLock);
    v8 = (__int64 *)qword_140C49608;
    v9 = &HalpInterruptOverrides;
    if( *(__int64 **)qword_140C49608 != &HalpInterruptOverrides )
      __fastfail(3u);
    *(_QWORD *)v4 = &HalpInterruptOverrides;
    LOBYTE(v9) = v7;
    *(_QWORD *)(v4 + 8) = v8;
    *v8 = v4;
    qword_140C49608 = v4;
    HalpReleaseHighLevelLock(&HalpInterruptOverridesLock, (UINT64)v9);
  }
  return(unsigned int)v2;
}

Referenced by:

HalpPiix4Detect