]> git.proxmox.com Git - mirror_edk2.git/blame - EmbeddedPkg/Include/Library/TimeBaseLib.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / EmbeddedPkg / Include / Library / TimeBaseLib.h
CommitLineData
b4895995
LL
1/** @file\r
2*\r
3* Copyright (c) 2016, Hisilicon Limited. All rights reserved.\r
1d757116 4* Copyright (c) 2016-2019, Linaro Limited. All rights reserved.\r
48de23e5 5* Copyright (c) 2021, Ampere Computing LLC. All rights reserved.\r
b4895995 6*\r
878b807a 7* SPDX-License-Identifier: BSD-2-Clause-Patent\r
b4895995
LL
8*\r
9**/\r
10\r
11#ifndef _TIME_BASE_LIB_H_\r
12#define _TIME_BASE_LIB_H_\r
13\r
14#include <Uefi/UefiBaseType.h>\r
15\r
bbb8a818
PB
16//\r
17// Convenience macros to obtain a build date\r
18//\r
19// These macros should work for any compiler that follows ISO/IEC 9899,\r
20// in which case __DATE__ is defined as a "Mmm dd yyyy" 11 chars string,\r
21// but add an explicit filter for compilers that have been validated.\r
22//\r
e7108d0e
MK
23#if (defined (__GNUC__) || defined (_MSC_VER) || defined (__clang__))\r
24#define TIME_BUILD_YEAR (__DATE__[7] == '?' ? 1900\\r
bbb8a818
PB
25 : (((__DATE__[7] - '0') * 1000 ) \\r
26 + (__DATE__[8] - '0') * 100 \\r
27 + (__DATE__[9] - '0') * 10 \\r
28 + __DATE__[10] - '0'))\r
e7108d0e 29#define TIME_BUILD_MONTH ( __DATE__ [2] == '?' ? 1 \\r
bbb8a818
PB
30 : __DATE__ [2] == 'n' ? ( \\r
31 __DATE__ [1] == 'a' ? 1 : 6) \\r
32 : __DATE__ [2] == 'b' ? 2 \\r
33 : __DATE__ [2] == 'r' ? ( \\r
34 __DATE__ [0] == 'M' ? 3 : 4) \\r
35 : __DATE__ [2] == 'y' ? 5 \\r
36 : __DATE__ [2] == 'l' ? 7 \\r
37 : __DATE__ [2] == 'g' ? 8 \\r
38 : __DATE__ [2] == 'p' ? 9 \\r
39 : __DATE__ [2] == 't' ? 10 \\r
40 : __DATE__ [2] == 'v' ? 11 \\r
41 : 12)\r
e7108d0e 42#define TIME_BUILD_DAY ( __DATE__[4] == '?' ? 1 \\r
bbb8a818
PB
43 : ((__DATE__[4] == ' ' ? 0 : \\r
44 ((__DATE__[4] - '0') * 10)) \\r
45 + __DATE__[5] - '0'))\r
46#endif\r
47\r
b4895995 48// Define EPOCH (1970-JANUARY-01) in the Julian Date representation\r
e7108d0e 49#define EPOCH_JULIAN_DATE 2440588\r
b4895995
LL
50\r
51// Seconds per unit\r
e7108d0e
MK
52#define SEC_PER_MIN ((UINTN) 60)\r
53#define SEC_PER_HOUR ((UINTN) 3600)\r
54#define SEC_PER_DAY ((UINTN) 86400)\r
b4895995 55\r
48de23e5
NP
56/**\r
57 Check if it is a leap year.\r
58\r
59 @param Time The UEFI time to be checked.\r
60\r
61 @retval TRUE It is a leap year.\r
62 @retval FALSE It is NOT a leap year.\r
63\r
64**/\r
b4895995
LL
65BOOLEAN\r
66EFIAPI\r
67IsLeapYear (\r
68 IN EFI_TIME *Time\r
69 );\r
70\r
48de23e5
NP
71/**\r
72 Check if the day in the UEFI time is valid.\r
73\r
74 @param Time The UEFI time to be checked.\r
75\r
76 @retval TRUE Valid.\r
77 @retval FALSE Invalid.\r
78\r
79**/\r
b4895995
LL
80BOOLEAN\r
81EFIAPI\r
82IsDayValid (\r
83 IN EFI_TIME *Time\r
84 );\r
85\r
e31dc471
NP
86/**\r
87 Check if the time zone is valid.\r
88 Valid values are between -1440 and 1440 or 2047 (EFI_UNSPECIFIED_TIMEZONE).\r
89\r
90 @param TimeZone The time zone to be checked.\r
91\r
92 @retval TRUE Valid.\r
93 @retval FALSE Invalid.\r
94\r
95**/\r
96BOOLEAN\r
97EFIAPI\r
98IsValidTimeZone (\r
99 IN INT16 TimeZone\r
100 );\r
101\r
102/**\r
103 Check if the daylight is valid.\r
104 Valid values are:\r
105 0 : Time is not affected.\r
106 1 : Time is affected, and has not been adjusted for daylight savings.\r
107 3 : Time is affected, and has been adjusted for daylight savings.\r
108 All other values are invalid.\r
109\r
110 @param Daylight The daylight to be checked.\r
111\r
112 @retval TRUE Valid.\r
113 @retval FALSE Invalid.\r
114\r
115**/\r
116BOOLEAN\r
117EFIAPI\r
118IsValidDaylight (\r
119 IN INT8 Daylight\r
120 );\r
121\r
48de23e5
NP
122/**\r
123 Check if the UEFI time is valid.\r
124\r
125 @param Time The UEFI time to be checked.\r
126\r
127 @retval TRUE Valid.\r
128 @retval FALSE Invalid.\r
129\r
130**/\r
b4895995
LL
131BOOLEAN\r
132EFIAPI\r
133IsTimeValid (\r
134 IN EFI_TIME *Time\r
135 );\r
136\r
137/**\r
48de23e5
NP
138 Converts Epoch seconds (elapsed since 1970 JANUARY 01, 00:00:00 UTC) to EFI_TIME.\r
139\r
140 @param EpochSeconds Epoch seconds.\r
141 @param Time The time converted to UEFI format.\r
142\r
143**/\r
b4895995
LL
144VOID\r
145EFIAPI\r
146EpochToEfiTime (\r
147 IN UINTN EpochSeconds,\r
148 OUT EFI_TIME *Time\r
149 );\r
150\r
151/**\r
48de23e5
NP
152 Converts EFI_TIME to Epoch seconds (elapsed since 1970 JANUARY 01, 00:00:00 UTC).\r
153\r
154 @param Time The UEFI time to be converted.\r
155\r
156 @return Number of seconds.\r
157\r
158**/\r
c06635ea 159UINTN\r
b4895995
LL
160EFIAPI\r
161EfiTimeToEpoch (\r
162 IN EFI_TIME *Time\r
163 );\r
164\r
91c31ff0 165/**\r
48de23e5
NP
166 Get the day of the week from the UEFI time.\r
167\r
168 @param Time The UEFI time to be calculated.\r
169\r
170 @return The day of the week: Sunday=0, Monday=1, ... Saturday=6\r
171\r
172**/\r
91c31ff0
MA
173UINTN\r
174EfiTimeToWday (\r
175 IN EFI_TIME *Time\r
176 );\r
177\r
b4895995 178#endif\r