diff --git a/ArmPlatformPkg/Include/Drivers/PL031RealTimeClock.h b/ArmPlatformPkg/Include/Drivers/PL031RealTimeClock.h index 76fbd0eb82..812cd9b397 100644 --- a/ArmPlatformPkg/Include/Drivers/PL031RealTimeClock.h +++ b/ArmPlatformPkg/Include/Drivers/PL031RealTimeClock.h @@ -42,15 +42,4 @@ #define PL031_COUNTS_PER_SECOND 1 -// 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) - -#define SEC_PER_MONTH ((UINTN) 2,592,000) -#define SEC_PER_YEAR ((UINTN) 31,536,000) - #endif diff --git a/ArmPlatformPkg/Library/PL031RealTimeClockLib/PL031RealTimeClockLib.c b/ArmPlatformPkg/Library/PL031RealTimeClockLib/PL031RealTimeClockLib.c index 4aa448b528..41ebcb95ab 100644 --- a/ArmPlatformPkg/Library/PL031RealTimeClockLib/PL031RealTimeClockLib.c +++ b/ArmPlatformPkg/Library/PL031RealTimeClockLib/PL031RealTimeClockLib.c @@ -36,6 +36,8 @@ #include +#include + #include STATIC CONST CHAR16 mTimeZoneVariableName[] = L"PL031RtcTimeZone"; @@ -109,129 +111,6 @@ InitializePL031 ( return Status; } -/** - Converts Epoch seconds (elapsed since 1970 JANUARY 01, 00:00:00 UTC) to EFI_TIME - **/ -VOID -EpochToEfiTime ( - IN UINTN EpochSeconds, - OUT EFI_TIME *Time - ) -{ - UINTN a; - UINTN b; - UINTN c; - UINTN d; - UINTN g; - UINTN j; - UINTN m; - UINTN y; - UINTN da; - UINTN db; - UINTN dc; - UINTN dg; - UINTN hh; - UINTN mm; - UINTN ss; - UINTN J; - - J = (EpochSeconds / 86400) + 2440588; - j = J + 32044; - g = j / 146097; - dg = j % 146097; - c = (((dg / 36524) + 1) * 3) / 4; - dc = dg - (c * 36524); - b = dc / 1461; - db = dc % 1461; - a = (((db / 365) + 1) * 3) / 4; - da = db - (a * 365); - y = (g * 400) + (c * 100) + (b * 4) + a; - m = (((da * 5) + 308) / 153) - 2; - d = da - (((m + 4) * 153) / 5) + 122; - - Time->Year = y - 4800 + ((m + 2) / 12); - Time->Month = ((m + 2) % 12) + 1; - Time->Day = d + 1; - - ss = EpochSeconds % 60; - a = (EpochSeconds - ss) / 60; - mm = a % 60; - b = (a - mm) / 60; - hh = b % 24; - - Time->Hour = hh; - Time->Minute = mm; - Time->Second = ss; - Time->Nanosecond = 0; - -} - -/** - Converts EFI_TIME to Epoch seconds (elapsed since 1970 JANUARY 01, 00:00:00 UTC) - **/ -UINTN -EfiTimeToEpoch ( - IN EFI_TIME *Time - ) -{ - UINTN a; - UINTN y; - UINTN m; - UINTN JulianDate; // Absolute Julian Date representation of the supplied Time - UINTN EpochDays; // Number of days elapsed since EPOCH_JULIAN_DAY - UINTN EpochSeconds; - - a = (14 - Time->Month) / 12 ; - y = Time->Year + 4800 - a; - m = Time->Month + (12*a) - 3; - - JulianDate = Time->Day + ((153*m + 2)/5) + (365*y) + (y/4) - (y/100) + (y/400) - 32045; - - ASSERT (JulianDate >= EPOCH_JULIAN_DATE); - EpochDays = JulianDate - EPOCH_JULIAN_DATE; - - EpochSeconds = (EpochDays * SEC_PER_DAY) + ((UINTN)Time->Hour * SEC_PER_HOUR) + (Time->Minute * SEC_PER_MIN) + Time->Second; - - return EpochSeconds; -} - -BOOLEAN -IsLeapYear ( - IN EFI_TIME *Time - ) -{ - if (Time->Year % 4 == 0) { - if (Time->Year % 100 == 0) { - if (Time->Year % 400 == 0) { - return TRUE; - } else { - return FALSE; - } - } else { - return TRUE; - } - } else { - return FALSE; - } -} - -BOOLEAN -DayValid ( - IN EFI_TIME *Time - ) -{ - STATIC CONST INTN DayOfMonth[12] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; - - if (Time->Day < 1 || - Time->Day > DayOfMonth[Time->Month - 1] || - (Time->Month == 2 && (!IsLeapYear (Time) && Time->Day > 28)) - ) { - return FALSE; - } - - return TRUE; -} - /** Returns the current time and date information, and the time-keeping capabilities of the hardware platform. @@ -431,7 +310,7 @@ LibSetTime ( (Time->Year > 9999) || (Time->Month < 1 ) || (Time->Month > 12 ) || - (!DayValid (Time) ) || + (!IsDayValid (Time) ) || (Time->Hour > 23 ) || (Time->Minute > 59 ) || (Time->Second > 59 ) || diff --git a/ArmPlatformPkg/Library/PL031RealTimeClockLib/PL031RealTimeClockLib.inf b/ArmPlatformPkg/Library/PL031RealTimeClockLib/PL031RealTimeClockLib.inf index 3a98fc757e..aa06a41d0b 100644 --- a/ArmPlatformPkg/Library/PL031RealTimeClockLib/PL031RealTimeClockLib.inf +++ b/ArmPlatformPkg/Library/PL031RealTimeClockLib/PL031RealTimeClockLib.inf @@ -36,6 +36,7 @@ PcdLib ArmPlatformSysConfigLib DxeServicesTableLib + TimeBaseLib UefiRuntimeLib [Guids] diff --git a/ArmVirtPkg/ArmVirt.dsc.inc b/ArmVirtPkg/ArmVirt.dsc.inc index e74eaf16e7..5bf5376354 100644 --- a/ArmVirtPkg/ArmVirt.dsc.inc +++ b/ArmVirtPkg/ArmVirt.dsc.inc @@ -105,6 +105,7 @@ # ARM PL031 RTC Driver RealTimeClockLib|ArmPlatformPkg/Library/PL031RealTimeClockLib/PL031RealTimeClockLib.inf + TimeBaseLib|EmbeddedPkg/Library/TimeBaseLib/TimeBaseLib.inf # ARM PL011 UART Driver PL011UartLib|ArmPlatformPkg/Drivers/PL011Uart/PL011Uart.inf SerialPortLib|ArmVirtPkg/Library/FdtPL011SerialPortLib/FdtPL011SerialPortLib.inf