HalpAcquireCmosSpinLock

INT64 __fastcall HalpAcquireCmosSpinLock(INT64 a1, INT64 a2, INT64 a3){
  unsigned int v3; 
  __int64 v4; 
  INT64 result; 
  __int16 v6; 
  v3 = 0;
  while( 1 )
  {
    _disable();
    LODWORD(a1) = *((_DWORD *)KeGetPcr() + 105);
    v4 = v6 & 0x200;
    LOBYTE(a3) = (v6 & 0x200) != 0;
    result = (unsigned int)_InterlockedCompareExchange(&HalpSystemHardwareLock, a1, -1);
    if( (_DWORD)result == -1 )
      break;
    if( (v6 & 0x200) != 0 )
      _enable();
    while( HalpSystemHardwareLock != -1 )
    {
      if( HalpRebootNow )
        HalpRebootNow(a1, v4, a3);
      if( (++v3 & dword_140C4A13C) != 0 || !qword_140C4A140 )
        _mm_pause();
      else
        qword_140C4A140(v3, v4, a3);
    }
  }
  LOBYTE(HalpSystemHardwareLockInterruptsEnabled) = (v6 & 0x200) != 0;
  return result;
}

Referenced by:

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