]> git.proxmox.com Git - mirror_edk2.git/blame - EmbeddedPkg/Include/Library/TimeBaseLib.h
EmbeddedPkg/TimeBaseLib: Add macros to get build year/month/day
[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
b4895995 5*\r
878b807a 6* SPDX-License-Identifier: BSD-2-Clause-Patent\r
b4895995
LL
7*\r
8**/\r
9\r
10#ifndef _TIME_BASE_LIB_H_\r
11#define _TIME_BASE_LIB_H_\r
12\r
13#include <Uefi/UefiBaseType.h>\r
14\r
bbb8a818
PB
15//\r
16// Convenience macros to obtain a build date\r
17//\r
18// These macros should work for any compiler that follows ISO/IEC 9899,\r
19// in which case __DATE__ is defined as a "Mmm dd yyyy" 11 chars string,\r
20// but add an explicit filter for compilers that have been validated.\r
21//\r
22#if (defined(__GNUC__) || defined(_MSC_VER) || defined(__clang__))\r
23#define TIME_BUILD_YEAR (__DATE__[7] == '?' ? 1900 \\r
24 : (((__DATE__[7] - '0') * 1000 ) \\r
25 + (__DATE__[8] - '0') * 100 \\r
26 + (__DATE__[9] - '0') * 10 \\r
27 + __DATE__[10] - '0'))\r
28#define TIME_BUILD_MONTH ( __DATE__ [2] == '?' ? 1 \\r
29 : __DATE__ [2] == 'n' ? ( \\r
30 __DATE__ [1] == 'a' ? 1 : 6) \\r
31 : __DATE__ [2] == 'b' ? 2 \\r
32 : __DATE__ [2] == 'r' ? ( \\r
33 __DATE__ [0] == 'M' ? 3 : 4) \\r
34 : __DATE__ [2] == 'y' ? 5 \\r
35 : __DATE__ [2] == 'l' ? 7 \\r
36 : __DATE__ [2] == 'g' ? 8 \\r
37 : __DATE__ [2] == 'p' ? 9 \\r
38 : __DATE__ [2] == 't' ? 10 \\r
39 : __DATE__ [2] == 'v' ? 11 \\r
40 : 12)\r
41#define TIME_BUILD_DAY ( __DATE__[4] == '?' ? 1 \\r
42 : ((__DATE__[4] == ' ' ? 0 : \\r
43 ((__DATE__[4] - '0') * 10)) \\r
44 + __DATE__[5] - '0'))\r
45#endif\r
46\r
b4895995
LL
47// Define EPOCH (1970-JANUARY-01) in the Julian Date representation\r
48#define EPOCH_JULIAN_DATE 2440588\r
49\r
50// Seconds per unit\r
51#define SEC_PER_MIN ((UINTN) 60)\r
52#define SEC_PER_HOUR ((UINTN) 3600)\r
53#define SEC_PER_DAY ((UINTN) 86400)\r
54#define SEC_PER_MONTH ((UINTN) 2,592,000)\r
55#define SEC_PER_YEAR ((UINTN) 31,536,000)\r
56\r
57BOOLEAN\r
58EFIAPI\r
59IsLeapYear (\r
60 IN EFI_TIME *Time\r
61 );\r
62\r
63BOOLEAN\r
64EFIAPI\r
65IsDayValid (\r
66 IN EFI_TIME *Time\r
67 );\r
68\r
69BOOLEAN\r
70EFIAPI\r
71IsTimeValid (\r
72 IN EFI_TIME *Time\r
73 );\r
74\r
75/**\r
76 Converts Epoch seconds (elapsed since 1970 JANUARY 01, 00:00:00 UTC) to EFI_TIME\r
77 **/\r
78VOID\r
79EFIAPI\r
80EpochToEfiTime (\r
81 IN UINTN EpochSeconds,\r
82 OUT EFI_TIME *Time\r
83 );\r
84\r
85/**\r
86 Converts EFI_TIME to Epoch seconds (elapsed since 1970 JANUARY 01, 00:00:00 UTC)\r
87 **/\r
1d757116 88UINT32\r
b4895995
LL
89EFIAPI\r
90EfiTimeToEpoch (\r
91 IN EFI_TIME *Time\r
92 );\r
93\r
91c31ff0
MA
94/**\r
95 returns Day of the week [0-6] 0=Sunday\r
96 **/\r
97UINTN\r
98EfiTimeToWday (\r
99 IN EFI_TIME *Time\r
100 );\r
101\r
b4895995 102#endif\r