ReactOS 0.4.16-dev-2216-ga08d639
cmos.c File Reference
#include <hal.h>
#include <debug.h>
Include dependency graph for cmos.c:

Go to the source code of this file.

Macros

#define NDEBUG
 
#define NVRAM_START   0x3FE2
 
#define NVRAM_SIZE   0x1C
 
#define NVRAM_UNUSED_REG   0x14
 
#define NVRAM_UNUSED_BIT   0x80
 

Functions

static UCHAR HalpReadNvram (_In_ UCHAR Register)
 
 _Requires_lock_held_ (HalpSystemHardwareLock)
 
UCHAR NTAPI HalpReadCmos (_In_ UCHAR Reg)
 
VOID NTAPI HalpWriteCmos (_In_ UCHAR Reg, _In_ UCHAR Value)
 
ULONG NTAPI HalpGetCmosData (_In_ ULONG BusNumber, _In_ ULONG SlotNumber, _Out_writes_bytes_(Length) PVOID Buffer, _In_ ULONG Length)
 
ULONG NTAPI HalpSetCmosData (_In_ ULONG BusNumber, _In_ ULONG SlotNumber, _In_reads_bytes_(Length) PVOID Buffer, _In_ ULONG Length)
 
VOID NTAPI HalpInitializeCmos (VOID)
 
ARC_STATUS NTAPI HalGetEnvironmentVariable (_In_ PCH Name, _In_ USHORT ValueLength, _Out_writes_z_(ValueLength) PCH Value)
 
ARC_STATUS NTAPI HalSetEnvironmentVariable (_In_ PCH Name, _In_ PCH Value)
 
BOOLEAN NTAPI HalQueryRealTimeClock (_Out_ PTIME_FIELDS Time)
 
BOOLEAN NTAPI HalSetRealTimeClock (_In_ PTIME_FIELDS Time)
 

Variables

static ULONG_PTR MappedNvram
 

Macro Definition Documentation

◆ NDEBUG

#define NDEBUG

Definition at line 12 of file cmos.c.

◆ NVRAM_SIZE

#define NVRAM_SIZE   0x1C

Definition at line 28 of file cmos.c.

◆ NVRAM_START

#define NVRAM_START   0x3FE2

Definition at line 27 of file cmos.c.

◆ NVRAM_UNUSED_BIT

#define NVRAM_UNUSED_BIT   0x80

Definition at line 30 of file cmos.c.

◆ NVRAM_UNUSED_REG

#define NVRAM_UNUSED_REG   0x14

Definition at line 29 of file cmos.c.

Function Documentation

◆ _Requires_lock_held_()

_Requires_lock_held_ ( HalpSystemHardwareLock  )

Definition at line 44 of file cmos.c.

50{
54}
static ULONG_PTR MappedNvram
Definition: cmos.c:32
PPC_QUAL void __outbyte(unsigned long const Port, const unsigned char Data)
Definition: intrin_ppc.h:605
#define GDC1_IO_o_MODE_FLIPFLOP1
Definition: video.h:238
#define GDC1_NVRAM_PROTECT
Definition: video.h:251
#define GDC1_NVRAM_UNPROTECT
Definition: video.h:252
unsigned char * PUCHAR
Definition: typedefs.h:53
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
Definition: wdfregistry.h:413
NTKERNELAPI VOID NTAPI WRITE_REGISTER_UCHAR(IN PUCHAR Register, IN UCHAR Value)

◆ HalGetEnvironmentVariable()

ARC_STATUS NTAPI HalGetEnvironmentVariable ( _In_ PCH  Name,
_In_ USHORT  ValueLength,
_Out_writes_z_(ValueLength) PCH  Value 
)

Definition at line 174 of file cmos.c.

178{
179 UCHAR Val;
180
181 /* Only variable supported on x86 */
182 if (_stricmp(Name, "LastKnownGood"))
183 return ENOENT;
184
185 if (!MappedNvram)
186 return ENOENT;
187
189
191
193
194 /* Check the flag */
195 if (Val)
196 strncpy(Value, "FALSE", ValueLength);
197 else
198 strncpy(Value, "TRUE", ValueLength);
199
200 return ESUCCESS;
201}
#define _stricmp
Definition: cat.c:22
LPWSTR Name
Definition: desk.c:124
#define ENOENT
Definition: errno.h:25
VOID NTAPI HalpReleaseCmosSpinLock(VOID)
Definition: spinlock.c:243
VOID NTAPI HalpAcquireCmosSpinLock(VOID)
Definition: spinlock.c:226
#define NVRAM_UNUSED_REG
Definition: cmos.c:29
static UCHAR HalpReadNvram(_In_ UCHAR Register)
Definition: cmos.c:38
#define NVRAM_UNUSED_BIT
Definition: cmos.c:30
@ ESUCCESS
Definition: arc.h:32
strncpy
Definition: string.h:335
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _In_ ULONG ValueLength
Definition: wdfregistry.h:275
unsigned char UCHAR
Definition: xmlstorage.h:181

◆ HalpGetCmosData()

ULONG NTAPI HalpGetCmosData ( _In_ ULONG  BusNumber,
_In_ ULONG  SlotNumber,
_Out_writes_bytes_(Length) PVOID  Buffer,
_In_ ULONG  Length 
)

Definition at line 133 of file cmos.c.

138{
139 /* Not supported by hardware */
140 return 0;
141}

◆ HalpInitializeCmos()

VOID NTAPI HalpInitializeCmos ( VOID  )

Definition at line 158 of file cmos.c.

159{
161
162 /* TODO: Detect TVRAM address */
163 if (TRUE)
165 else
168}
#define TRUE
Definition: types.h:120
#define ULONG_PTR
Definition: config.h:101
PVOID NTAPI HalpMapPhysicalMemory64(IN PHYSICAL_ADDRESS PhysicalAddress, IN PFN_COUNT PageCount)
Definition: memory.c:140
#define NVRAM_START
Definition: cmos.c:27
#define NVRAM_SIZE
Definition: cmos.c:28
#define VRAM_NORMAL_TEXT
Definition: video.h:17
#define VRAM_HI_RESO_TEXT
Definition: video.h:32
LONGLONG QuadPart
Definition: typedefs.h:114
_Must_inspect_result_ typedef _In_ PHYSICAL_ADDRESS PhysicalAddress
Definition: iotypes.h:1098
#define BYTES_TO_PAGES(Size)

◆ HalpReadCmos()

◆ HalpReadNvram()

static UCHAR HalpReadNvram ( _In_ UCHAR  Register)
static

Definition at line 38 of file cmos.c.

40{
42}
NTKERNELAPI UCHAR NTAPI READ_REGISTER_UCHAR(IN PUCHAR Register)

Referenced by HalGetEnvironmentVariable(), and HalSetEnvironmentVariable().

◆ HalpSetCmosData()

ULONG NTAPI HalpSetCmosData ( _In_ ULONG  BusNumber,
_In_ ULONG  SlotNumber,
_In_reads_bytes_(Length) PVOID  Buffer,
_In_ ULONG  Length 
)

Definition at line 145 of file cmos.c.

150{
151 /* Not supported by hardware */
152 return 0;
153}

◆ HalpWriteCmos()

VOID NTAPI HalpWriteCmos ( _In_ UCHAR  Reg,
_In_ UCHAR  Value 
)

Definition at line 123 of file cmos.c.

126{
127 /* Not supported by hardware */
128 NOTHING;
129}
#define NOTHING
Definition: input_list.c:10

Referenced by HalpInitializeClock(), HalpInitializeTsc(), HalpSetCmosData(), HalSetEnvironmentVariable(), HalSetRealTimeClock(), HalStartProfileInterrupt(), HalStopProfileInterrupt(), and RtcSetClockRate().

◆ HalQueryRealTimeClock()

BOOLEAN NTAPI HalQueryRealTimeClock ( _Out_ PTIME_FIELDS  Time)

Definition at line 246 of file cmos.c.

248{
249 UCHAR Temp;
250
252
253 HalpRtcWriteCommand(RTC_CMD_TIME_READ);
254 HalpRtcWriteCommand(RTC_CMD_REGISTER_SHIFT);
256
257 /* Set the time data */
258 Time->Second = BCD_INT(HalpRtcReadByte());
259 Time->Minute = BCD_INT(HalpRtcReadByte());
260 Time->Hour = BCD_INT(HalpRtcReadByte());
261 Time->Day = BCD_INT(HalpRtcReadByte());
262 Temp = HalpRtcReadByte();
263 Time->Weekday = Temp & 0x0F;
264 Time->Month = Temp >> 4;
265 Time->Year = BCD_INT(HalpRtcReadByte());
266 Time->Milliseconds = 0;
267
268 Time->Year += (Time->Year >= 80) ? 1900 : 2000;
269
270 HalpRtcWriteCommand(RTC_CMD_REGISTER_HOLD);
271
273
274 return TRUE;
275}
#define KeStallExecutionProcessor(MicroSeconds)
Definition: precomp.h:27
static PLARGE_INTEGER Time
Definition: time.c:105
static UCHAR BCD_INT(_In_ UCHAR Bcd)
Definition: hwinfo.c:15
#define RTC_CMD_TIME_READ
Definition: rtc.h:19
#define RTC_CMD_REGISTER_HOLD
Definition: rtc.h:16
#define RTC_CMD_REGISTER_SHIFT
Definition: rtc.h:17

◆ HalSetEnvironmentVariable()

ARC_STATUS NTAPI HalSetEnvironmentVariable ( _In_ PCH  Name,
_In_ PCH  Value 
)

Definition at line 205 of file cmos.c.

208{
209 UCHAR Val;
210
211 /* Only variable supported on x86 */
212 if (_stricmp(Name, "LastKnownGood"))
213 return ENOMEM;
214
215 if (!MappedNvram)
216 return ENOMEM;
217
218 /* Check if this is true or false */
219 if (!_stricmp(Value, "TRUE"))
220 {
222
224 }
225 else if (!_stricmp(Value, "FALSE"))
226 {
228
229 Val = HalpReadNvram(NVRAM_UNUSED_REG) & ~NVRAM_UNUSED_BIT;
230 }
231 else
232 {
233 /* Fail */
234 return ENOMEM;
235 }
236
237 HalpWriteNvram(NVRAM_UNUSED_REG, Val);
238
240
241 return ESUCCESS;
242}
#define ENOMEM
Definition: errno.h:35

◆ HalSetRealTimeClock()

BOOLEAN NTAPI HalSetRealTimeClock ( _In_ PTIME_FIELDS  Time)

Definition at line 279 of file cmos.c.

281{
282 UCHAR i, j;
283 UCHAR SysTime[6];
284
286
287 HalpRtcWriteCommand(RTC_CMD_REGISTER_SHIFT);
288
289 SysTime[0] = INT_BCD(Time->Second);
290 SysTime[1] = INT_BCD(Time->Minute);
291 SysTime[2] = INT_BCD(Time->Hour);
292 SysTime[3] = INT_BCD(Time->Day);
293 SysTime[4] = (Time->Month << 4) | (Time->Weekday & 0x0F);
294 SysTime[5] = INT_BCD(Time->Year % 100);
295
296 /* Write time fields to RTC */
297 for (i = 0; i < 6; i++)
298 {
299 for (j = 0; j < 8; j++)
300 HalpRtcWriteBit(SysTime[i] >> j);
301 }
302
303 HalpRtcWriteCommand(RTC_CMD_TIME_SET_COUNTER_HOLD);
304 HalpRtcWriteCommand(RTC_CMD_REGISTER_HOLD);
305
307
308 return TRUE;
309}
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
FORCEINLINE UCHAR INT_BCD(_In_ CSHORT Int)
Definition: halp.h:80
#define RTC_CMD_TIME_SET_COUNTER_HOLD
Definition: rtc.h:18

Variable Documentation

◆ MappedNvram