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>
41 } PC_RTC_MODULE_GLOBALS
;
43 #define PCAT_RTC_ADDRESS_REGISTER 0x70
44 #define PCAT_RTC_DATA_REGISTER 0x71
47 // Dallas DS12C887 Real Time Clock
49 #define RTC_ADDRESS_SECONDS 0 // R/W Range 0..59
50 #define RTC_ADDRESS_SECONDS_ALARM 1 // R/W Range 0..59
51 #define RTC_ADDRESS_MINUTES 2 // R/W Range 0..59
52 #define RTC_ADDRESS_MINUTES_ALARM 3 // R/W Range 0..59
53 #define RTC_ADDRESS_HOURS 4 // R/W Range 1..12 or 0..23 Bit 7 is AM/PM
54 #define RTC_ADDRESS_HOURS_ALARM 5 // R/W Range 1..12 or 0..23 Bit 7 is AM/PM
55 #define RTC_ADDRESS_DAY_OF_THE_WEEK 6 // R/W Range 1..7
56 #define RTC_ADDRESS_DAY_OF_THE_MONTH 7 // R/W Range 1..31
57 #define RTC_ADDRESS_MONTH 8 // R/W Range 1..12
58 #define RTC_ADDRESS_YEAR 9 // R/W Range 0..99
59 #define RTC_ADDRESS_REGISTER_A 10 // R/W[0..6] R0[7]
60 #define RTC_ADDRESS_REGISTER_B 11 // R/W
61 #define RTC_ADDRESS_REGISTER_C 12 // RO
62 #define RTC_ADDRESS_REGISTER_D 13 // RO
63 #define RTC_ADDRESS_CENTURY 50 // R/W Range 19..20 Bit 8 is R/W
65 // Date and time initial values.
66 // They are used if the RTC values are invalid during driver initialization
68 #define RTC_INIT_SECOND 0
69 #define RTC_INIT_MINUTE 0
70 #define RTC_INIT_HOUR 0
71 #define RTC_INIT_DAY 1
72 #define RTC_INIT_MONTH 1
73 #define RTC_INIT_YEAR 2001
76 // Register initial values
78 #define RTC_INIT_REGISTER_A 0x26
79 #define RTC_INIT_REGISTER_B 0x02
80 #define RTC_INIT_REGISTER_D 0x0
87 UINT8 RS
: 4; // Rate Selection Bits
88 UINT8 DV
: 3; // Divisor
89 UINT8 UIP
: 1; // Update in progress
90 } RTC_REGISTER_A_BITS
;
93 RTC_REGISTER_A_BITS Bits
;
101 UINT8 DSE
: 1; // 0 - Daylight saving disabled 1 - Daylight savings enabled
102 UINT8 MIL
: 1; // 0 - 12 hour mode 1 - 24 hour mode
103 UINT8 DM
: 1; // 0 - BCD Format 1 - Binary Format
104 UINT8 SQWE
: 1; // 0 - Disable SQWE output 1 - Enable SQWE output
105 UINT8 UIE
: 1; // 0 - Update INT disabled 1 - Update INT enabled
106 UINT8 AIE
: 1; // 0 - Alarm INT disabled 1 - Alarm INT Enabled
107 UINT8 PIE
: 1; // 0 - Periodic INT disabled 1 - Periodic INT Enabled
108 UINT8 SET
: 1; // 0 - Normal operation. 1 - Updates inhibited
109 } RTC_REGISTER_B_BITS
;
112 RTC_REGISTER_B_BITS Bits
;
120 UINT8 Reserved
: 4; // Read as zero. Can not be written.
121 UINT8 UF
: 1; // Update End Interrupt Flag
122 UINT8 AF
: 1; // Alarm Interrupt Flag
123 UINT8 PF
: 1; // Periodic Interrupt Flag
124 UINT8 IRQF
: 1; // Iterrupt Request Flag = PF & PIE | AF & AIE | UF & UIE
125 } RTC_REGISTER_C_BITS
;
128 RTC_REGISTER_C_BITS Bits
;
136 UINT8 Reserved
: 7; // Read as zero. Can not be written.
137 UINT8 VRT
: 1; // Valid RAM and Time
138 } RTC_REGISTER_D_BITS
;
141 RTC_REGISTER_D_BITS Bits
;
149 IN PC_RTC_MODULE_GLOBALS
*Global
155 GC_TODO: Add function description
159 Global - GC_TODO: add argument description
163 GC_TODO: add return values
171 IN PC_RTC_MODULE_GLOBALS
*Global
177 GC_TODO: Add function description
181 Time - GC_TODO: add argument description
182 Global - GC_TODO: add argument description
186 GC_TODO: add return values
194 IN EFI_TIME_CAPABILITIES
*Capabilities
,
195 IN PC_RTC_MODULE_GLOBALS
*Global
201 GC_TODO: Add function description
205 Time - GC_TODO: add argument description
206 Capabilities - GC_TODO: add argument description
207 Global - GC_TODO: add argument description
211 GC_TODO: add return values
220 IN PC_RTC_MODULE_GLOBALS
*Global
226 GC_TODO: Add function description
230 Enable - GC_TODO: add argument description
231 Time - GC_TODO: add argument description
232 Global - GC_TODO: add argument description
236 GC_TODO: add return values
243 OUT BOOLEAN
*Enabled
,
244 OUT BOOLEAN
*Pending
,
246 IN PC_RTC_MODULE_GLOBALS
*Global
252 GC_TODO: Add function description
256 Enabled - GC_TODO: add argument description
257 Pending - GC_TODO: add argument description
258 Time - GC_TODO: add argument description
259 Global - GC_TODO: add argument description
263 GC_TODO: add return values
271 IN EFI_HANDLE ImageHandle
,
272 IN EFI_SYSTEM_TABLE
*SystemTable
278 GC_TODO: Add function description
282 ImageHandle - GC_TODO: add argument description
283 SystemTable - GC_TODO: add argument description
287 GC_TODO: add return values
300 GC_TODO: Add function description
304 BcdValue - GC_TODO: add argument description
308 GC_TODO: add return values
321 GC_TODO: Add function description
325 Time - GC_TODO: add argument description
329 GC_TODO: add return values
342 GC_TODO: Add function description
346 DecValue - GC_TODO: add argument description
350 GC_TODO: add return values
356 ConvertEfiTimeToRtcTime (
358 IN RTC_REGISTER_B RegisterB
,
365 GC_TODO: Add function description
369 Time - GC_TODO: add argument description
370 RegisterB - GC_TODO: add argument description
371 Century - GC_TODO: add argument description
375 GC_TODO: add return values
381 RtcTestCenturyRegister (
388 GC_TODO: Add function description
396 GC_TODO: add return values
402 ConvertRtcTimeToEfiTime (
404 IN RTC_REGISTER_B RegisterB
410 GC_TODO: Add function description
414 Time - GC_TODO: add argument description
415 RegisterB - GC_TODO: add argument description
419 GC_TODO: add return values
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