2 Header file for real time clock driver.
4 Copyright (c) 2006 - 2007, Intel Corporation
5 All rights reserved. This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
22 #include <Protocol/RealTimeClock.h>
23 #include <Guid/GenericPlatformVariable.h>
25 #include <Library/BaseLib.h>
26 #include <Library/DebugLib.h>
27 #include <Library/UefiLib.h>
28 #include <Library/BaseMemoryLib.h>
29 #include <Library/IoLib.h>
30 #include <Library/TimerLib.h>
31 #include <Library/UefiDriverEntryPoint.h>
32 #include <Library/UefiBootServicesTableLib.h>
33 #include <Library/UefiRuntimeLib.h>
34 #include <Library/UefiRuntimeServicesTableLib.h>
35 #include <Library/PcdLib.h>
42 } PC_RTC_MODULE_GLOBALS
;
44 #define PCAT_RTC_ADDRESS_REGISTER 0x70
45 #define PCAT_RTC_DATA_REGISTER 0x71
48 // Dallas DS12C887 Real Time Clock
50 #define RTC_ADDRESS_SECONDS 0 // R/W Range 0..59
51 #define RTC_ADDRESS_SECONDS_ALARM 1 // R/W Range 0..59
52 #define RTC_ADDRESS_MINUTES 2 // R/W Range 0..59
53 #define RTC_ADDRESS_MINUTES_ALARM 3 // R/W Range 0..59
54 #define RTC_ADDRESS_HOURS 4 // R/W Range 1..12 or 0..23 Bit 7 is AM/PM
55 #define RTC_ADDRESS_HOURS_ALARM 5 // R/W Range 1..12 or 0..23 Bit 7 is AM/PM
56 #define RTC_ADDRESS_DAY_OF_THE_WEEK 6 // R/W Range 1..7
57 #define RTC_ADDRESS_DAY_OF_THE_MONTH 7 // R/W Range 1..31
58 #define RTC_ADDRESS_MONTH 8 // R/W Range 1..12
59 #define RTC_ADDRESS_YEAR 9 // R/W Range 0..99
60 #define RTC_ADDRESS_REGISTER_A 10 // R/W[0..6] R0[7]
61 #define RTC_ADDRESS_REGISTER_B 11 // R/W
62 #define RTC_ADDRESS_REGISTER_C 12 // RO
63 #define RTC_ADDRESS_REGISTER_D 13 // RO
64 #define RTC_ADDRESS_CENTURY 50 // R/W Range 19..20 Bit 8 is R/W
66 // Date and time initial values.
67 // They are used if the RTC values are invalid during driver initialization
69 #define RTC_INIT_SECOND 0
70 #define RTC_INIT_MINUTE 0
71 #define RTC_INIT_HOUR 0
72 #define RTC_INIT_DAY 1
73 #define RTC_INIT_MONTH 1
74 #define RTC_INIT_YEAR 2001
77 // Register initial values
79 #define RTC_INIT_REGISTER_A 0x26
80 #define RTC_INIT_REGISTER_B 0x02
81 #define RTC_INIT_REGISTER_D 0x0
88 UINT8 RS
: 4; // Rate Selection Bits
89 UINT8 DV
: 3; // Divisor
90 UINT8 UIP
: 1; // Update in progress
91 } RTC_REGISTER_A_BITS
;
94 RTC_REGISTER_A_BITS Bits
;
102 UINT8 DSE
: 1; // 0 - Daylight saving disabled 1 - Daylight savings enabled
103 UINT8 MIL
: 1; // 0 - 12 hour mode 1 - 24 hour mode
104 UINT8 DM
: 1; // 0 - BCD Format 1 - Binary Format
105 UINT8 SQWE
: 1; // 0 - Disable SQWE output 1 - Enable SQWE output
106 UINT8 UIE
: 1; // 0 - Update INT disabled 1 - Update INT enabled
107 UINT8 AIE
: 1; // 0 - Alarm INT disabled 1 - Alarm INT Enabled
108 UINT8 PIE
: 1; // 0 - Periodic INT disabled 1 - Periodic INT Enabled
109 UINT8 SET
: 1; // 0 - Normal operation. 1 - Updates inhibited
110 } RTC_REGISTER_B_BITS
;
113 RTC_REGISTER_B_BITS Bits
;
121 UINT8 Reserved
: 4; // Read as zero. Can not be written.
122 UINT8 UF
: 1; // Update End Interrupt Flag
123 UINT8 AF
: 1; // Alarm Interrupt Flag
124 UINT8 PF
: 1; // Periodic Interrupt Flag
125 UINT8 IRQF
: 1; // Iterrupt Request Flag = PF & PIE | AF & AIE | UF & UIE
126 } RTC_REGISTER_C_BITS
;
129 RTC_REGISTER_C_BITS Bits
;
137 UINT8 Reserved
: 7; // Read as zero. Can not be written.
138 UINT8 VRT
: 1; // Valid RAM and Time
139 } RTC_REGISTER_D_BITS
;
142 RTC_REGISTER_D_BITS Bits
;
150 IN PC_RTC_MODULE_GLOBALS
*Global
156 GC_TODO: Add function description
160 Global - GC_TODO: add argument description
164 GC_TODO: add return values
172 IN PC_RTC_MODULE_GLOBALS
*Global
178 GC_TODO: Add function description
182 Time - GC_TODO: add argument description
183 Global - GC_TODO: add argument description
187 GC_TODO: add return values
195 IN EFI_TIME_CAPABILITIES
*Capabilities
,
196 IN PC_RTC_MODULE_GLOBALS
*Global
202 GC_TODO: Add function description
206 Time - GC_TODO: add argument description
207 Capabilities - GC_TODO: add argument description
208 Global - GC_TODO: add argument description
212 GC_TODO: add return values
221 IN PC_RTC_MODULE_GLOBALS
*Global
227 GC_TODO: Add function description
231 Enable - GC_TODO: add argument description
232 Time - GC_TODO: add argument description
233 Global - GC_TODO: add argument description
237 GC_TODO: add return values
244 OUT BOOLEAN
*Enabled
,
245 OUT BOOLEAN
*Pending
,
247 IN PC_RTC_MODULE_GLOBALS
*Global
253 GC_TODO: Add function description
257 Enabled - GC_TODO: add argument description
258 Pending - GC_TODO: add argument description
259 Time - GC_TODO: add argument description
260 Global - GC_TODO: add argument description
264 GC_TODO: add return values
272 IN EFI_HANDLE ImageHandle
,
273 IN EFI_SYSTEM_TABLE
*SystemTable
279 GC_TODO: Add function description
283 ImageHandle - GC_TODO: add argument description
284 SystemTable - GC_TODO: add argument description
288 GC_TODO: add return values
301 GC_TODO: Add function description
305 BcdValue - GC_TODO: add argument description
309 GC_TODO: add return values
322 GC_TODO: Add function description
326 Time - GC_TODO: add argument description
330 GC_TODO: add return values
343 GC_TODO: Add function description
347 DecValue - GC_TODO: add argument description
351 GC_TODO: add return values
357 ConvertEfiTimeToRtcTime (
359 IN RTC_REGISTER_B RegisterB
,
366 GC_TODO: Add function description
370 Time - GC_TODO: add argument description
371 RegisterB - GC_TODO: add argument description
372 Century - GC_TODO: add argument description
376 GC_TODO: add return values
382 RtcTestCenturyRegister (
389 GC_TODO: Add function description
397 GC_TODO: add return values
403 Converts time read from RTC to EFI_TIME format defined by UEFI spec.
405 This function converts raw time data read from RTC to the EFI_TIME format
406 defined by UEFI spec.
407 If data mode of RTC is BCD, then converts it to decimal,
408 If RTC is in 12-hour format, then converts it to 24-hour format.
410 @param Time On input, the time data read from RTC to convert
411 On output, the time converted to UEFI format
412 @param Century Value of century read from RTC.
413 @param RegisterB Value of Register B of RTC, indicating data mode
418 ConvertRtcTimeToEfiTime (
419 IN OUT EFI_TIME
*Time
,
421 IN RTC_REGISTER_B RegisterB
432 GC_TODO: Add function description
436 Timeout - GC_TODO: add argument description
440 GC_TODO: add return values
447 IN PC_RTC_MODULE_GLOBALS
*Global
453 GC_TODO: Add function description
457 Global - GC_TODO: add argument description
461 GC_TODO: add return values
468 IN UINT8 SavedAddressRegister
,
469 IN PC_RTC_MODULE_GLOBALS
*Global
475 GC_TODO: Add function description
479 SavedAddressRegister - GC_TODO: add argument description
480 Global - GC_TODO: add argument description
484 GC_TODO: add return values