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