/** @file\r
RTC Architectural Protocol GUID as defined in DxeCis 0.96.\r
\r
-Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
Copyright (c) 2017, AMD Inc. All rights reserved.<BR>\r
\r
-This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
\r
/**\r
Compare the Hour, Minute and Second of the From time and the To time.\r
- \r
+\r
Only compare H/M/S in EFI_TIME and ignore other fields here.\r
\r
@param From the first time\r
IN UINT8 Address\r
)\r
{\r
- IoWrite8 (PCAT_RTC_ADDRESS_REGISTER, (UINT8) (Address | (UINT8) (IoRead8 (PCAT_RTC_ADDRESS_REGISTER) & 0x80)));\r
- return IoRead8 (PCAT_RTC_DATA_REGISTER);\r
+ IoWrite8 (PcdGet8 (PcdRtcIndexRegister), (UINT8) (Address | (UINT8) (IoRead8 (PcdGet8 (PcdRtcIndexRegister)) & 0x80)));\r
+ return IoRead8 (PcdGet8 (PcdRtcTargetRegister));\r
}\r
\r
/**\r
IN UINT8 Data\r
)\r
{\r
- IoWrite8 (PCAT_RTC_ADDRESS_REGISTER, (UINT8) (Address | (UINT8) (IoRead8 (PCAT_RTC_ADDRESS_REGISTER) & 0x80)));\r
- IoWrite8 (PCAT_RTC_DATA_REGISTER, Data);\r
+ IoWrite8 (PcdGet8 (PcdRtcIndexRegister), (UINT8) (Address | (UINT8) (IoRead8 (PcdGet8 (PcdRtcIndexRegister)) & 0x80)));\r
+ IoWrite8 (PcdGet8 (PcdRtcTargetRegister), Data);\r
}\r
\r
/**\r
if (!EfiAtRuntime ()) {\r
EfiReleaseLock (&Global->RtcLock);\r
}\r
- \r
+\r
//\r
// Get the data of Daylight saving and time zone, if they have been\r
// stored in NV variable during previous boot.\r
Time.Daylight = (UINT8) (TimerVar >> 16);\r
} else {\r
Time.TimeZone = EFI_UNSPECIFIED_TIMEZONE;\r
- Time.Daylight = 0; \r
+ Time.Daylight = 0;\r
}\r
\r
//\r
if (EFI_ERROR (Status)) {\r
return EFI_DEVICE_ERROR;\r
}\r
- \r
+\r
//\r
// Reset wakeup time value to valid state when wakeup alarm is disabled and wakeup time is invalid.\r
// Global variable has already had valid SavedTimeZone and Daylight,\r
if ((Enabled) || (!EFI_ERROR (Status))) {\r
return EFI_SUCCESS;\r
}\r
- \r
+\r
//\r
- // When wakeup time is disabled and invalid, reset wakeup time register to valid state \r
+ // When wakeup time is disabled and invalid, reset wakeup time register to valid state\r
// but keep wakeup alarm disabled.\r
//\r
Time.Second = RTC_INIT_SECOND;\r
}\r
return EFI_DEVICE_ERROR;\r
}\r
- \r
+\r
//\r
// Inhibit updates of the RTC\r
//\r
RegisterB.Bits.Set = 1;\r
RtcWrite (RTC_ADDRESS_REGISTER_B, RegisterB.Data);\r
- \r
+\r
//\r
// Set RTC alarm time registers\r
//\r
//\r
RegisterB.Bits.Set = 0;\r
RtcWrite (RTC_ADDRESS_REGISTER_B, RegisterB.Data);\r
- \r
+\r
//\r
// Release RTC Lock.\r
//\r
}\r
return Status;\r
}\r
- \r
+\r
//\r
// Write timezone and daylight to RTC variable\r
//\r
}\r
return EFI_DEVICE_ERROR;\r
}\r
- \r
+\r
//\r
// Inhibit updates of the RTC\r
//\r
@param Timeout Tell how long it should take to wait.\r
\r
@retval EFI_DEVICE_ERROR RTC device error.\r
- @retval EFI_SUCCESS RTC is updated and ready. \r
+ @retval EFI_SUCCESS RTC is updated and ready.\r
**/\r
EFI_STATUS\r
RtcWaitToUpdate (\r
\r
/**\r
Compare the Hour, Minute and Second of the From time and the To time.\r
- \r
+\r
Only compare H/M/S in EFI_TIME and ignore other fields here.\r
\r
@param From the first time\r
//\r
ASSERT (From->Month >=1);\r
ASSERT (From->Month <=12);\r
- \r
+\r
if (From->Year == To->Year) {\r
if (From->Month == To->Month) {\r
if ((From->Day + 1) == To->Day) {\r
return Adjacent;\r
}\r
\r
-/**\r
- This function find ACPI table with the specified signature in RSDT or XSDT.\r
-\r
- @param Sdt ACPI RSDT or XSDT.\r
- @param Signature ACPI table signature.\r
- @param TablePointerSize Size of table pointer: 4 or 8.\r
-\r
- @return ACPI table or NULL if not found.\r
-**/\r
-VOID *\r
-ScanTableInSDT (\r
- IN EFI_ACPI_DESCRIPTION_HEADER *Sdt,\r
- IN UINT32 Signature,\r
- IN UINTN TablePointerSize\r
- )\r
-{\r
- UINTN Index;\r
- UINTN EntryCount;\r
- UINTN EntryBase;\r
- EFI_ACPI_DESCRIPTION_HEADER *Table;\r
-\r
- EntryCount = (Sdt->Length - sizeof (EFI_ACPI_DESCRIPTION_HEADER)) / TablePointerSize;\r
-\r
- EntryBase = (UINTN) (Sdt + 1);\r
- for (Index = 0; Index < EntryCount; Index++) {\r
- //\r
- // When TablePointerSize is 4 while sizeof (VOID *) is 8, make sure the upper 4 bytes are zero.\r
- //\r
- Table = 0;\r
- CopyMem (&Table, (VOID *) (EntryBase + Index * TablePointerSize), TablePointerSize);\r
-\r
- if (Table == NULL) {\r
- continue;\r
- }\r
-\r
- if (Table->Signature == Signature) {\r
- return Table;\r
- }\r
- }\r
-\r
- return NULL;\r
-}\r
-\r
/**\r
Get the century RTC address from the ACPI FADT table.\r
\r
VOID\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER *Rsdp;\r
EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE *Fadt;\r
\r
- Status = EfiGetSystemConfigurationTable (&gEfiAcpiTableGuid, (VOID **) &Rsdp);\r
- if (EFI_ERROR (Status)) {\r
- Status = EfiGetSystemConfigurationTable (&gEfiAcpi10TableGuid, (VOID **) &Rsdp);\r
- }\r
-\r
- if (EFI_ERROR (Status) || (Rsdp == NULL)) {\r
- return 0;\r
- }\r
-\r
- Fadt = NULL;\r
-\r
- //\r
- // Find FADT in XSDT\r
- //\r
- if (Rsdp->Revision >= EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER_REVISION && Rsdp->XsdtAddress != 0) {\r
- Fadt = ScanTableInSDT (\r
- (EFI_ACPI_DESCRIPTION_HEADER *) (UINTN) Rsdp->XsdtAddress,\r
- EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE,\r
- sizeof (UINTN)\r
- );\r
- }\r
-\r
- //\r
- // Find FADT in RSDT\r
- //\r
- if (Fadt == NULL && Rsdp->RsdtAddress != 0) {\r
- Fadt = ScanTableInSDT (\r
- (EFI_ACPI_DESCRIPTION_HEADER *) (UINTN) Rsdp->RsdtAddress,\r
- EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE,\r
- sizeof (UINT32)\r
- );\r
- }\r
+ Fadt = (EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE *) EfiLocateFirstAcpiTable (\r
+ EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE\r
+ );\r
\r
if ((Fadt != NULL) &&\r
(Fadt->Century > RTC_ADDRESS_REGISTER_D) && (Fadt->Century < 0x80)\r