]> git.proxmox.com Git - mirror_edk2.git/blame - PcAtChipsetPkg/PcRtc/RealTimeClock.h
supply comments on data structure to follow spec.
[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
c69dd9df 294EFI_STATUS\r
295RtcTimeFieldsValid (\r
296 IN EFI_TIME *Time\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 Time - 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
315UINT8\r
316DecimaltoBcd (\r
317 IN UINT8 DecValue\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 DecValue - 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
336VOID\r
337ConvertEfiTimeToRtcTime (\r
338 IN EFI_TIME *Time,\r
339 IN RTC_REGISTER_B RegisterB,\r
340 IN UINT8 *Century\r
341 )\r
342/*++\r
343\r
344Routine Description:\r
345\r
346 TODO: Add function description\r
347\r
348Arguments:\r
349\r
350 Time - TODO: add argument description\r
351 RegisterB - TODO: add argument description\r
352 Century - TODO: add argument description\r
353\r
354Returns:\r
355\r
356 TODO: add return values\r
357\r
358--*/\r
359;\r
360\r
c69dd9df 361VOID\r
362ConvertRtcTimeToEfiTime (\r
363 IN EFI_TIME *Time,\r
364 IN RTC_REGISTER_B RegisterB\r
365 )\r
366/*++\r
367\r
368Routine Description:\r
369\r
370 TODO: Add function description\r
371\r
372Arguments:\r
373\r
374 Time - TODO: add argument description\r
375 RegisterB - TODO: add argument description\r
376\r
377Returns:\r
378\r
379 TODO: add return values\r
380\r
381--*/\r
382;\r
383\r
384EFI_STATUS\r
385RtcWaitToUpdate (\r
386 UINTN Timeout\r
387 )\r
388/*++\r
389\r
390Routine Description:\r
391\r
392 TODO: Add function description\r
393\r
394Arguments:\r
395\r
396 Timeout - TODO: add argument description\r
397\r
398Returns:\r
399\r
400 TODO: add return values\r
401\r
402--*/\r
403;\r
404\r
405UINT8\r
406RtcSaveContext (\r
407 IN PC_RTC_MODULE_GLOBALS *Global\r
408 )\r
409/*++\r
410\r
411Routine Description:\r
412\r
413 TODO: Add function description\r
414\r
415Arguments:\r
416\r
417 Global - 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
426VOID\r
427RtcRestoreContext (\r
428 IN UINT8 SavedAddressRegister,\r
429 IN PC_RTC_MODULE_GLOBALS *Global\r
430 )\r
431/*++\r
432\r
433Routine Description:\r
434\r
435 TODO: Add function description\r
436\r
437Arguments:\r
438\r
439 SavedAddressRegister - TODO: add argument description\r
440 Global - TODO: add argument description\r
441\r
442Returns:\r
443\r
444 TODO: add return values\r
445\r
446--*/\r
447;\r
448\r
449#endif\r