]> git.proxmox.com Git - mirror_edk2.git/blob - DuetPkg/PcRtc/RealTimeClock.h
Porting Duet module from EDKI to EDKII
[mirror_edk2.git] / DuetPkg / PcRtc / RealTimeClock.h
1 /*++
2
3 Copyright (c) 2005, Intel Corporation
4 All rights reserved. This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
8
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11
12 Module Name:
13 PcRtc.h
14
15 Abstract:
16
17 Include for real time clock driver
18
19 Revision History
20
21
22 --*/
23
24 #ifndef _RTC_H_
25 #define _RTC_H_
26
27 #include <FrameworkDxe.h>
28
29 #include <Protocol/RealTimeClock.h>
30
31 #include <Library/UefiLib.h>
32 #include <Library/UefiBootServicesTableLib.h>
33 #include <Library/IoLib.h>
34 #include <Library/TimerLib.h>
35 #include <Library/BaseMemoryLib.h>
36
37 typedef struct {
38 EFI_LOCK RtcLock;
39 UINT16 SavedTimeZone;
40 UINT8 Daylight;
41 } PC_RTC_MODULE_GLOBALS;
42
43 #define PCAT_RTC_ADDRESS_REGISTER 0x70
44 #define PCAT_RTC_DATA_REGISTER 0x71
45
46 //
47 // Dallas DS12C887 Real Time Clock
48 //
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
64 //
65 // Date and time initial values.
66 // They are used if the RTC values are invalid during driver initialization
67 //
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
74
75 //
76 // Register initial values
77 //
78 #define RTC_INIT_REGISTER_A 0x26
79 #define RTC_INIT_REGISTER_B 0x02
80 #define RTC_INIT_REGISTER_D 0x0
81
82 #pragma pack(1)
83 //
84 // Register A
85 //
86 typedef struct {
87 UINT8 RS : 4; // Rate Selection Bits
88 UINT8 DV : 3; // Divisor
89 UINT8 UIP : 1; // Update in progress
90 } RTC_REGISTER_A_BITS;
91
92 typedef union {
93 RTC_REGISTER_A_BITS Bits;
94 UINT8 Data;
95 } RTC_REGISTER_A;
96
97 //
98 // Register B
99 //
100 typedef struct {
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;
110
111 typedef union {
112 RTC_REGISTER_B_BITS Bits;
113 UINT8 Data;
114 } RTC_REGISTER_B;
115
116 //
117 // Register C
118 //
119 typedef struct {
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;
126
127 typedef union {
128 RTC_REGISTER_C_BITS Bits;
129 UINT8 Data;
130 } RTC_REGISTER_C;
131
132 //
133 // Register D
134 //
135 typedef struct {
136 UINT8 Reserved : 7; // Read as zero. Can not be written.
137 UINT8 VRT : 1; // Valid RAM and Time
138 } RTC_REGISTER_D_BITS;
139
140 typedef union {
141 RTC_REGISTER_D_BITS Bits;
142 UINT8 Data;
143 } RTC_REGISTER_D;
144
145 #pragma pack()
146
147 EFI_STATUS
148 PcRtcInit (
149 IN PC_RTC_MODULE_GLOBALS *Global
150 )
151 /*++
152
153 Routine Description:
154
155 TODO: Add function description
156
157 Arguments:
158
159 Global - TODO: add argument description
160
161 Returns:
162
163 TODO: add return values
164
165 --*/
166 ;
167
168 EFI_STATUS
169 PcRtcSetTime (
170 IN EFI_TIME *Time,
171 IN PC_RTC_MODULE_GLOBALS *Global
172 )
173 /*++
174
175 Routine Description:
176
177 TODO: Add function description
178
179 Arguments:
180
181 Time - TODO: add argument description
182 Global - TODO: add argument description
183
184 Returns:
185
186 TODO: add return values
187
188 --*/
189 ;
190
191 EFI_STATUS
192 PcRtcGetTime (
193 OUT EFI_TIME *Time,
194 IN EFI_TIME_CAPABILITIES *Capabilities,
195 IN PC_RTC_MODULE_GLOBALS *Global
196 )
197 /*++
198
199 Routine Description:
200
201 TODO: Add function description
202
203 Arguments:
204
205 Time - TODO: add argument description
206 Capabilities - TODO: add argument description
207 Global - TODO: add argument description
208
209 Returns:
210
211 TODO: add return values
212
213 --*/
214 ;
215
216 EFI_STATUS
217 EFIAPI
218 PcRtcSetWakeupTime (
219 IN BOOLEAN Enable,
220 OUT EFI_TIME *Time,
221 IN PC_RTC_MODULE_GLOBALS *Global
222 )
223 /*++
224
225 Routine Description:
226
227 TODO: Add function description
228
229 Arguments:
230
231 Enable - TODO: add argument description
232 Time - TODO: add argument description
233 Global - TODO: add argument description
234
235 Returns:
236
237 TODO: add return values
238
239 --*/
240 ;
241
242 EFI_STATUS
243 EFIAPI
244 PcRtcGetWakeupTime (
245 OUT BOOLEAN *Enabled,
246 OUT BOOLEAN *Pending,
247 OUT EFI_TIME *Time,
248 IN PC_RTC_MODULE_GLOBALS *Global
249 )
250 /*++
251
252 Routine Description:
253
254 TODO: Add function description
255
256 Arguments:
257
258 Enabled - TODO: add argument description
259 Pending - TODO: add argument description
260 Time - TODO: add argument description
261 Global - TODO: add argument description
262
263 Returns:
264
265 TODO: add return values
266
267 --*/
268 ;
269
270 EFI_STATUS
271 EFIAPI
272 InitializePcRtc (
273 IN EFI_HANDLE ImageHandle,
274 IN EFI_SYSTEM_TABLE *SystemTable
275 )
276 /*++
277
278 Routine Description:
279
280 TODO: Add function description
281
282 Arguments:
283
284 ImageHandle - TODO: add argument description
285 SystemTable - TODO: add argument description
286
287 Returns:
288
289 TODO: add return values
290
291 --*/
292 ;
293
294 UINT8
295 BcdToDecimal (
296 IN UINT8 BcdValue
297 )
298 /*++
299
300 Routine Description:
301
302 TODO: Add function description
303
304 Arguments:
305
306 BcdValue - TODO: add argument description
307
308 Returns:
309
310 TODO: add return values
311
312 --*/
313 ;
314
315 EFI_STATUS
316 RtcTimeFieldsValid (
317 IN EFI_TIME *Time
318 )
319 /*++
320
321 Routine Description:
322
323 TODO: Add function description
324
325 Arguments:
326
327 Time - TODO: add argument description
328
329 Returns:
330
331 TODO: add return values
332
333 --*/
334 ;
335
336 UINT8
337 DecimaltoBcd (
338 IN UINT8 DecValue
339 )
340 /*++
341
342 Routine Description:
343
344 TODO: Add function description
345
346 Arguments:
347
348 DecValue - TODO: add argument description
349
350 Returns:
351
352 TODO: add return values
353
354 --*/
355 ;
356
357 VOID
358 ConvertEfiTimeToRtcTime (
359 IN EFI_TIME *Time,
360 IN RTC_REGISTER_B RegisterB,
361 IN UINT8 *Century
362 )
363 /*++
364
365 Routine Description:
366
367 TODO: Add function description
368
369 Arguments:
370
371 Time - TODO: add argument description
372 RegisterB - TODO: add argument description
373 Century - TODO: add argument description
374
375 Returns:
376
377 TODO: add return values
378
379 --*/
380 ;
381
382 EFI_STATUS
383 RtcTestCenturyRegister (
384 VOID
385 )
386 /*++
387
388 Routine Description:
389
390 TODO: Add function description
391
392 Arguments:
393
394 None
395
396 Returns:
397
398 TODO: add return values
399
400 --*/
401 ;
402
403 VOID
404 ConvertRtcTimeToEfiTime (
405 IN EFI_TIME *Time,
406 IN RTC_REGISTER_B RegisterB
407 )
408 /*++
409
410 Routine Description:
411
412 TODO: Add function description
413
414 Arguments:
415
416 Time - TODO: add argument description
417 RegisterB - TODO: add argument description
418
419 Returns:
420
421 TODO: add return values
422
423 --*/
424 ;
425
426 EFI_STATUS
427 RtcWaitToUpdate (
428 UINTN Timeout
429 )
430 /*++
431
432 Routine Description:
433
434 TODO: Add function description
435
436 Arguments:
437
438 Timeout - TODO: add argument description
439
440 Returns:
441
442 TODO: add return values
443
444 --*/
445 ;
446
447 UINT8
448 RtcSaveContext (
449 IN PC_RTC_MODULE_GLOBALS *Global
450 )
451 /*++
452
453 Routine Description:
454
455 TODO: Add function description
456
457 Arguments:
458
459 Global - TODO: add argument description
460
461 Returns:
462
463 TODO: add return values
464
465 --*/
466 ;
467
468 VOID
469 RtcRestoreContext (
470 IN UINT8 SavedAddressRegister,
471 IN PC_RTC_MODULE_GLOBALS *Global
472 )
473 /*++
474
475 Routine Description:
476
477 TODO: Add function description
478
479 Arguments:
480
481 SavedAddressRegister - TODO: add argument description
482 Global - TODO: add argument description
483
484 Returns:
485
486 TODO: add return values
487
488 --*/
489 ;
490
491 #endif