HalpAcquireCmosSpinLock

NTSTATUS __stdcall HalpAcquireCmosSpinLock(INT64 a1, INT64 a2, INT64 a3){
  unsigned int v3; 
  __int64 v4; 
  NTSTATUS result; 
  __int16 v6; 

  v3 = 0;
  while( 1 )
  {
    _disable();
    LODWORD(a1) = KeGetPcr()->Prcb.Number;
    v4 = v6 & 0x200;
    LOBYTE(a3) = (v6 & 0x200) != 0;
    result = _InterlockedCompareExchange(&HalpSystemHardwareLock, a1, -1);
    if( result == -1 )
      break;
    if( (v6 & 0x200) != 0 )
      _enable();
    while( HalpSystemHardwareLock != -1 )
    {
      if( qword_140C49EE8 )
        qword_140C49EE8(a1, v4, a3);
      if( (++v3 & dword_140C4A13C) != 0 || !qword_140C4A140 )
        _mm_pause();
      else
        qword_140C4A140(v3, v4, a3);
    }
  }
  LOBYTE(byte_140C49EE0) = (v6 & 0x200) != 0;
  return result;
}

Referenced by:

HalGetEnvironmentVariable
HalMakeBeep
HalReturnToFirmware
HalSetEnvironmentVariable
HalpAcquireCmosSpinLockAndWait
HalpGetSetCmosData
HalpReadRtcStdPCAT
HalpReadStdCmosData
HalpSetClockAfterSleep
HalpSetClockBeforeSleep
HalpWriteRtcStdPCAT
HalpWriteStdCmosData
x86BiosReadCmosPortByte
x86BiosWriteCmosPortByte