]> git.proxmox.com Git - mirror_edk2.git/blame - EmbeddedPkg/Include/Library/TimeBaseLib.h
EmbeddedPkg/TimeBaseLib: Update comment blocks for API functions
[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
23#if (defined(__GNUC__) || defined(_MSC_VER) || defined(__clang__))\r
24#define TIME_BUILD_YEAR (__DATE__[7] == '?' ? 1900 \\r
25 : (((__DATE__[7] - '0') * 1000 ) \\r
26 + (__DATE__[8] - '0') * 100 \\r
27 + (__DATE__[9] - '0') * 10 \\r
28 + __DATE__[10] - '0'))\r
29#define TIME_BUILD_MONTH ( __DATE__ [2] == '?' ? 1 \\r
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
42#define TIME_BUILD_DAY ( __DATE__[4] == '?' ? 1 \\r
43 : ((__DATE__[4] == ' ' ? 0 : \\r
44 ((__DATE__[4] - '0') * 10)) \\r
45 + __DATE__[5] - '0'))\r
46#endif\r
47\r
b4895995
LL
48// Define EPOCH (1970-JANUARY-01) in the Julian Date representation\r
49#define EPOCH_JULIAN_DATE 2440588\r
50\r
51// Seconds per unit\r
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
48de23e5
NP
86/**\r
87 Check if the UEFI time is valid.\r
88\r
89 @param Time The UEFI time to be checked.\r
90\r
91 @retval TRUE Valid.\r
92 @retval FALSE Invalid.\r
93\r
94**/\r
b4895995
LL
95BOOLEAN\r
96EFIAPI\r
97IsTimeValid (\r
98 IN EFI_TIME *Time\r
99 );\r
100\r
101/**\r
48de23e5
NP
102 Converts Epoch seconds (elapsed since 1970 JANUARY 01, 00:00:00 UTC) to EFI_TIME.\r
103\r
104 @param EpochSeconds Epoch seconds.\r
105 @param Time The time converted to UEFI format.\r
106\r
107**/\r
b4895995
LL
108VOID\r
109EFIAPI\r
110EpochToEfiTime (\r
111 IN UINTN EpochSeconds,\r
112 OUT EFI_TIME *Time\r
113 );\r
114\r
115/**\r
48de23e5
NP
116 Converts EFI_TIME to Epoch seconds (elapsed since 1970 JANUARY 01, 00:00:00 UTC).\r
117\r
118 @param Time The UEFI time to be converted.\r
119\r
120 @return Number of seconds.\r
121\r
122**/\r
c06635ea 123UINTN\r
b4895995
LL
124EFIAPI\r
125EfiTimeToEpoch (\r
126 IN EFI_TIME *Time\r
127 );\r
128\r
91c31ff0 129/**\r
48de23e5
NP
130 Get the day of the week from the UEFI time.\r
131\r
132 @param Time The UEFI time to be calculated.\r
133\r
134 @return The day of the week: Sunday=0, Monday=1, ... Saturday=6\r
135\r
136**/\r
91c31ff0
MA
137UINTN\r
138EfiTimeToWday (\r
139 IN EFI_TIME *Time\r
140 );\r
141\r
b4895995 142#endif\r