diff --git a/reactos/include/ddk/halddk.h b/reactos/include/ddk/halddk.h index 57afabe6167..ae210fd8bc5 100644 --- a/reactos/include/ddk/halddk.h +++ b/reactos/include/ddk/halddk.h @@ -1,4 +1,4 @@ -/* $Id: halddk.h,v 1.7 2000/12/30 01:41:04 ekohl Exp $ +/* $Id: halddk.h,v 1.8 2001/01/14 15:35:56 ekohl Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -348,9 +348,11 @@ BOOLEAN STDCALL HalBeginSystemInterrupt (ULONG Vector, KIRQL Irql, PKIRQL OldIrql); -/* -HalCalibratePerformanceCounter -*/ +VOID +STDCALL +HalCalibratePerformanceCounter ( + ULONG Count + ); /* FASTCALL @@ -440,9 +442,13 @@ HalGetDmaAlignmentRequirement ( VOID ); -/* -HalGetEnvironmentVariable -*/ +BOOLEAN +STDCALL +HalGetEnvironmentVariable ( + IN PCH Name, + OUT PCH Value, + IN USHORT ValueLength + ); ULONG STDCALL @@ -550,9 +556,12 @@ HalSetDisplayParameters ( ULONG CursorPosY ); -/* -HalSetEnvironmentVariable -*/ +BOOLEAN +STDCALL +HalSetEnvironmentVariable ( + IN PCH Name, + IN PCH Value + ); /* HalSetProfileInterval diff --git a/reactos/ntoskrnl/hal/x86/misc.c b/reactos/ntoskrnl/hal/x86/misc.c index 1549d6b2c4d..9a32be10dd1 100644 --- a/reactos/ntoskrnl/hal/x86/misc.c +++ b/reactos/ntoskrnl/hal/x86/misc.c @@ -1,4 +1,4 @@ -/* $Id: misc.c,v 1.6 2000/08/17 17:42:53 ekohl Exp $ +/* $Id: misc.c,v 1.7 2001/01/14 15:36:55 ekohl Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -45,6 +45,12 @@ HalProcessorIdle (VOID) #endif } +VOID STDCALL +HalRequestIpi(ULONG Unknown) +{ + return; +} + ULONG FASTCALL HalSystemVectorDispatchEntry ( ULONG Unknown1, diff --git a/reactos/ntoskrnl/hal/x86/perfcnt.c b/reactos/ntoskrnl/hal/x86/perfcnt.c index f017ab2771a..6154edc0123 100644 --- a/reactos/ntoskrnl/hal/x86/perfcnt.c +++ b/reactos/ntoskrnl/hal/x86/perfcnt.c @@ -1,4 +1,4 @@ -/* $Id: perfcnt.c,v 1.1 2000/06/09 20:05:00 ekohl Exp $ +/* $Id: perfcnt.c,v 1.2 2001/01/14 15:36:55 ekohl Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -17,16 +17,25 @@ /* FUNCTIONS **************************************************************/ -/* -HalCalibratePerformanceCounter@4 -*/ + +VOID STDCALL +HalCalibratePerformanceCounter(ULONG Count) +{ + ULONG i; + + /* save flags and disable interrupts */ + __asm__("pushf\n\t" \ + "cli\n\t"); + + for (i = 0; i < Count; i++); + + /* restore flags */ + __asm__("popf\n\t"); +} -LARGE_INTEGER -STDCALL -KeQueryPerformanceCounter ( - PLARGE_INTEGER PerformanceFreq - ) +LARGE_INTEGER STDCALL +KeQueryPerformanceCounter(PLARGE_INTEGER PerformanceFreq) /* * FUNCTION: Queries the finest grained running count avaiable in the system * ARGUMENTS: diff --git a/reactos/ntoskrnl/hal/x86/time.c b/reactos/ntoskrnl/hal/x86/time.c index 66b91f8bbf2..5a86d12eea9 100644 --- a/reactos/ntoskrnl/hal/x86/time.c +++ b/reactos/ntoskrnl/hal/x86/time.c @@ -9,6 +9,7 @@ /* INCLUDES *****************************************************************/ #include +#include #define NDEBUG #include @@ -25,6 +26,8 @@ #define RTC_REGISTER_A 0x0A #define RTC_REG_A_UIP 0x80 /* Update In Progress bit */ +#define RTC_REGISTER_B 0x0B + #define RTC_REGISTER_CENTURY 0x32 @@ -59,11 +62,8 @@ HalSetCMOS (BYTE Reg, BYTE Val) } -VOID -STDCALL -HalQueryRealTimeClock ( - PTIME_FIELDS Time - ) +VOID STDCALL +HalQueryRealTimeClock(PTIME_FIELDS Time) { /* check 'Update In Progress' bit */ while (HalQueryCMOS (RTC_REGISTER_A) & RTC_REG_A_UIP) @@ -102,11 +102,8 @@ HalQueryRealTimeClock ( } -VOID -STDCALL -HalSetRealTimeClock ( - PTIME_FIELDS Time - ) +VOID STDCALL +HalSetRealTimeClock(PTIME_FIELDS Time) { /* check 'Update In Progress' bit */ while (HalQueryCMOS (RTC_REGISTER_A) & RTC_REG_A_UIP) @@ -125,3 +122,56 @@ HalSetRealTimeClock ( HalSetCMOS (RTC_REGISTER_CENTURY, INT_BCD(Time->Year / 100)); #endif } + + +BOOLEAN STDCALL +HalGetEnvironmentVariable(PCH Name, + PCH Value, + USHORT ValueLength) +{ + if (_stricmp(Name, "LastKnownGood") != 0) + { + return FALSE; + } + + if (HalQueryCMOS(RTC_REGISTER_B) & 0x01) + { + strncpy(Value, "FALSE", ValueLength); + } + else + { + strncpy(Value, "TRUE", ValueLength); + } + + return TRUE; +} + + +BOOLEAN STDCALL +HalSetEnvironmentVariable(PCH Name, + PCH Value) +{ + UCHAR Val; + + if (_stricmp(Name, "LastKnownGood") != 0) + { + return FALSE; + } + + Val = HalQueryCMOS(RTC_REGISTER_B); + + if (_stricmp(Value, "TRUE") == 0) + { + HalSetCMOS(RTC_REGISTER_B, Val | 0x01); + } + else if (_stricmp(Value, "FALSE") == 0) + { + HalSetCMOS(RTC_REGISTER_B, Val & ~0x01); + } + else + { + return FALSE; + } + + return TRUE; +} diff --git a/reactos/ntoskrnl/ntoskrnl.def b/reactos/ntoskrnl/ntoskrnl.def index 716610acc1b..57000ae34b5 100644 --- a/reactos/ntoskrnl/ntoskrnl.def +++ b/reactos/ntoskrnl/ntoskrnl.def @@ -1,4 +1,4 @@ -; $Id: ntoskrnl.def,v 1.93 2001/01/13 18:38:08 dwelch Exp $ +; $Id: ntoskrnl.def,v 1.94 2001/01/14 15:36:32 ekohl Exp $ ; ; reactos/ntoskrnl/ntoskrnl.def ; @@ -1018,8 +1018,9 @@ HalAllocateCommonBuffer@16 ;HalAllocateCrashDumpRegisters@8 HalAssignSlotResources@32 HalBeginSystemInterrupt@12 -;HalCalibratePerformanceCounter@4 +HalCalibratePerformanceCounter@4 ;@HalClearSoftwareInterrupt@4 +;HalClearSoftwareInterrupt@4 HalDisableSystemInterrupt@8 HalDisplayString@4 HalEnableSystemInterrupt@12 @@ -1029,7 +1030,7 @@ HalFreeCommonBuffer@24 HalGetAdapter@8 HalGetBusData@20 HalGetBusDataByOffset@24 -;HalGetEnvironmentVariable@12 +HalGetEnvironmentVariable@12 HalGetInterruptVector@24 HalHandleNMI@4 HalInitSystem@8 @@ -1040,13 +1041,14 @@ HalQueryDisplayParameters@16 HalQueryRealTimeClock@4 HalReadDmaCounter@4 HalReportResourceUsage@0 -;HalRequestIpi@4 +HalRequestIpi@4 ;@HalRequestSoftwareInterrupt@4 +;HalRequestSoftwareInterrupt@4 HalReturnToFirmware@4 HalSetBusData@20 HalSetBusDataByOffset@24 HalSetDisplayParameters@8 -;HalSetEnvironmentVariable@8 +HalSetEnvironmentVariable@8 ;HalSetProfileInterval@4 HalSetRealTimeClock@4 ;HalSetTimeIncrement@4 diff --git a/reactos/ntoskrnl/ntoskrnl.edf b/reactos/ntoskrnl/ntoskrnl.edf index 72f445a168a..dd02f73f57a 100644 --- a/reactos/ntoskrnl/ntoskrnl.edf +++ b/reactos/ntoskrnl/ntoskrnl.edf @@ -1,4 +1,4 @@ -; $Id: ntoskrnl.edf,v 1.80 2001/01/13 18:38:08 dwelch Exp $ +; $Id: ntoskrnl.edf,v 1.81 2001/01/14 15:36:32 ekohl Exp $ ; ; reactos/ntoskrnl/ntoskrnl.def ; @@ -1016,7 +1016,7 @@ HalAllocateCommonBuffer=HalAllocateCommonBuffer@16 ;HalAllocateCrashDumpRegisters=HalAllocateCrashDumpRegisters@8 HalAssignSlotResource=HalAssignSlotResources@32 HalBeginSystemInterrupt=HalBeginSystemInterrupt@12 -;HalCalibratePerformanceCounter=HalCalibratePerformanceCounter@4 +HalCalibratePerformanceCounter=HalCalibratePerformanceCounter@4 ;HalClearSoftwareInterrupt=@HalClearSoftwareInterrupt@4 ;HalClearSoftwareInterrupt=HalClearSoftwareInterrupt@4 HalDisableSystemInterrupt=HalDisableSystemInterrupt@8 @@ -1028,7 +1028,7 @@ HalFreeCommonBuffer=HalFreeCommonBuffer@24 HalGetAdapter=HalGetAdapter@8 HalGetBusData=HalGetBusData@20 HalGetBusDataByOffset=HalGetBusDataByOffset@24 -;HalGetEnvironmentVariable=HalGetEnvironmentVariable@12 +HalGetEnvironmentVariable=HalGetEnvironmentVariable@12 HalGetInterruptVector=HalGetInterruptVector@24 HalHandleNMI=HalHandleNMI@4 HalInitSystem=HalInitSystem@8 @@ -1039,14 +1039,14 @@ HalQueryDisplayParameters=HalQueryDisplayParameters@16 HalQueryRealTimeClock=HalQueryRealTimeClock@4 HalReadDmaCounter=HalReadDmaCounter@4 HalReportResourceUsage=HalReportResourceUsage@0 -;HalRequestIpi=HalRequestIpi@4 +HalRequestIpi=HalRequestIpi@4 ;HalRequestSoftwareInterrupt=@HalRequestSoftwareInterrupt@4 ;HalRequestSoftwareInterrupt=HalRequestSoftwareInterrupt@4 HalReturnToFirmware=HalReturnToFirmware@4 HalSetBusData=HalSetBusData@20 HalSetBusDataByOffset=HalSetBusDataByOffset@24 HalSetDisplayParameters=HalSetDisplayParameters@8 -;HalSetEnvironmentVariable=HalSetEnvironmentVariable@8 +HalSetEnvironmentVariable=HalSetEnvironmentVariable@8 ;HalSetProfileInterval=HalSetProfileInterval@4 HalSetRealTimeClock=HalSetRealTimeClock@4 ;HalSetTimeIncrement=HalSetTimeIncrement@4