mirror of https://github.com/acidanthera/audk.git
179 lines
4.4 KiB
C
179 lines
4.4 KiB
C
/** @file
|
|
*
|
|
* Copyright (c) 2016, Hisilicon Limited. All rights reserved.
|
|
* Copyright (c) 2016-2019, Linaro Limited. All rights reserved.
|
|
* Copyright (c) 2021, Ampere Computing LLC. All rights reserved.
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
*
|
|
**/
|
|
|
|
#ifndef _TIME_BASE_LIB_H_
|
|
#define _TIME_BASE_LIB_H_
|
|
|
|
#include <Uefi/UefiBaseType.h>
|
|
|
|
//
|
|
// Convenience macros to obtain a build date
|
|
//
|
|
// These macros should work for any compiler that follows ISO/IEC 9899,
|
|
// in which case __DATE__ is defined as a "Mmm dd yyyy" 11 chars string,
|
|
// but add an explicit filter for compilers that have been validated.
|
|
//
|
|
#if (defined(__GNUC__) || defined(_MSC_VER) || defined(__clang__))
|
|
#define TIME_BUILD_YEAR (__DATE__[7] == '?' ? 1900 \
|
|
: (((__DATE__[7] - '0') * 1000 ) \
|
|
+ (__DATE__[8] - '0') * 100 \
|
|
+ (__DATE__[9] - '0') * 10 \
|
|
+ __DATE__[10] - '0'))
|
|
#define TIME_BUILD_MONTH ( __DATE__ [2] == '?' ? 1 \
|
|
: __DATE__ [2] == 'n' ? ( \
|
|
__DATE__ [1] == 'a' ? 1 : 6) \
|
|
: __DATE__ [2] == 'b' ? 2 \
|
|
: __DATE__ [2] == 'r' ? ( \
|
|
__DATE__ [0] == 'M' ? 3 : 4) \
|
|
: __DATE__ [2] == 'y' ? 5 \
|
|
: __DATE__ [2] == 'l' ? 7 \
|
|
: __DATE__ [2] == 'g' ? 8 \
|
|
: __DATE__ [2] == 'p' ? 9 \
|
|
: __DATE__ [2] == 't' ? 10 \
|
|
: __DATE__ [2] == 'v' ? 11 \
|
|
: 12)
|
|
#define TIME_BUILD_DAY ( __DATE__[4] == '?' ? 1 \
|
|
: ((__DATE__[4] == ' ' ? 0 : \
|
|
((__DATE__[4] - '0') * 10)) \
|
|
+ __DATE__[5] - '0'))
|
|
#endif
|
|
|
|
// Define EPOCH (1970-JANUARY-01) in the Julian Date representation
|
|
#define EPOCH_JULIAN_DATE 2440588
|
|
|
|
// Seconds per unit
|
|
#define SEC_PER_MIN ((UINTN) 60)
|
|
#define SEC_PER_HOUR ((UINTN) 3600)
|
|
#define SEC_PER_DAY ((UINTN) 86400)
|
|
|
|
/**
|
|
Check if it is a leap year.
|
|
|
|
@param Time The UEFI time to be checked.
|
|
|
|
@retval TRUE It is a leap year.
|
|
@retval FALSE It is NOT a leap year.
|
|
|
|
**/
|
|
BOOLEAN
|
|
EFIAPI
|
|
IsLeapYear (
|
|
IN EFI_TIME *Time
|
|
);
|
|
|
|
/**
|
|
Check if the day in the UEFI time is valid.
|
|
|
|
@param Time The UEFI time to be checked.
|
|
|
|
@retval TRUE Valid.
|
|
@retval FALSE Invalid.
|
|
|
|
**/
|
|
BOOLEAN
|
|
EFIAPI
|
|
IsDayValid (
|
|
IN EFI_TIME *Time
|
|
);
|
|
|
|
/**
|
|
Check if the time zone is valid.
|
|
Valid values are between -1440 and 1440 or 2047 (EFI_UNSPECIFIED_TIMEZONE).
|
|
|
|
@param TimeZone The time zone to be checked.
|
|
|
|
@retval TRUE Valid.
|
|
@retval FALSE Invalid.
|
|
|
|
**/
|
|
BOOLEAN
|
|
EFIAPI
|
|
IsValidTimeZone (
|
|
IN INT16 TimeZone
|
|
);
|
|
|
|
/**
|
|
Check if the daylight is valid.
|
|
Valid values are:
|
|
0 : Time is not affected.
|
|
1 : Time is affected, and has not been adjusted for daylight savings.
|
|
3 : Time is affected, and has been adjusted for daylight savings.
|
|
All other values are invalid.
|
|
|
|
@param Daylight The daylight to be checked.
|
|
|
|
@retval TRUE Valid.
|
|
@retval FALSE Invalid.
|
|
|
|
**/
|
|
BOOLEAN
|
|
EFIAPI
|
|
IsValidDaylight (
|
|
IN INT8 Daylight
|
|
);
|
|
|
|
/**
|
|
Check if the UEFI time is valid.
|
|
|
|
@param Time The UEFI time to be checked.
|
|
|
|
@retval TRUE Valid.
|
|
@retval FALSE Invalid.
|
|
|
|
**/
|
|
BOOLEAN
|
|
EFIAPI
|
|
IsTimeValid (
|
|
IN EFI_TIME *Time
|
|
);
|
|
|
|
/**
|
|
Converts Epoch seconds (elapsed since 1970 JANUARY 01, 00:00:00 UTC) to EFI_TIME.
|
|
|
|
@param EpochSeconds Epoch seconds.
|
|
@param Time The time converted to UEFI format.
|
|
|
|
**/
|
|
VOID
|
|
EFIAPI
|
|
EpochToEfiTime (
|
|
IN UINTN EpochSeconds,
|
|
OUT EFI_TIME *Time
|
|
);
|
|
|
|
/**
|
|
Converts EFI_TIME to Epoch seconds (elapsed since 1970 JANUARY 01, 00:00:00 UTC).
|
|
|
|
@param Time The UEFI time to be converted.
|
|
|
|
@return Number of seconds.
|
|
|
|
**/
|
|
UINTN
|
|
EFIAPI
|
|
EfiTimeToEpoch (
|
|
IN EFI_TIME *Time
|
|
);
|
|
|
|
/**
|
|
Get the day of the week from the UEFI time.
|
|
|
|
@param Time The UEFI time to be calculated.
|
|
|
|
@return The day of the week: Sunday=0, Monday=1, ... Saturday=6
|
|
|
|
**/
|
|
UINTN
|
|
EfiTimeToWday (
|
|
IN EFI_TIME *Time
|
|
);
|
|
|
|
#endif
|