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