|
@@ -1,138 +0,0 @@
|
|
|
-/** @file
|
|
|
- Platform Hook Library instances
|
|
|
-
|
|
|
- @copyright
|
|
|
- Copyright (c) 2017 - 2021, Intel Corporation. All rights reserved.<BR>
|
|
|
-
|
|
|
- SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
|
-**/
|
|
|
-
|
|
|
-#include <Base.h>
|
|
|
-#include <Uefi.h>
|
|
|
-#include <PiDxe.h>
|
|
|
-#include <Library/BaseLib.h>
|
|
|
-#include <Library/IoLib.h>
|
|
|
-#include <Library/BoardAcpiEnableLib.h>
|
|
|
-#include <Library/PcdLib.h>
|
|
|
-#include <Library/DebugLib.h>
|
|
|
-#include <PchAccess.h>
|
|
|
-#include <Protocol/DynamicSiLibrarySmmProtocol.h>
|
|
|
-#include <Library/SmmServicesTableLib.h>
|
|
|
-
|
|
|
-/**
|
|
|
- Clear Port 80h
|
|
|
-
|
|
|
- SMI handler to enable ACPI mode
|
|
|
-
|
|
|
- Dispatched on reads from APM port with value EFI_ACPI_ENABLE_SW_SMI
|
|
|
-
|
|
|
- Disables the SW SMI Timer.
|
|
|
- ACPI events are disabled and ACPI event status is cleared.
|
|
|
- SCI mode is then enabled.
|
|
|
-
|
|
|
- Clear SLP SMI status
|
|
|
- Enable SLP SMI
|
|
|
-
|
|
|
- Disable SW SMI Timer
|
|
|
-
|
|
|
- Clear all ACPI event status and disable all ACPI events
|
|
|
-
|
|
|
- Disable PM sources except power button
|
|
|
- Clear status bits
|
|
|
-
|
|
|
- Disable GPE0 sources
|
|
|
- Clear status bits
|
|
|
-
|
|
|
- Disable GPE1 sources
|
|
|
- Clear status bits
|
|
|
-
|
|
|
- Guarantee day-of-month alarm is invalid (ACPI 1.0 section 4.7.2.4)
|
|
|
-
|
|
|
- Enable SCI
|
|
|
-**/
|
|
|
-EFI_STATUS
|
|
|
-EFIAPI
|
|
|
-SiliconEnableAcpi (
|
|
|
- IN BOOLEAN EnableSci
|
|
|
- )
|
|
|
-{
|
|
|
- UINT32 SmiEn;
|
|
|
- UINT16 Pm1En;
|
|
|
- UINT16 Pm1Cnt;
|
|
|
- UINT16 PchPmBase;
|
|
|
- EFI_STATUS Status;
|
|
|
- DYNAMIC_SI_LIBARY_SMM_PROTOCOL *DynamicSiLibrarySmmProtocol = NULL;
|
|
|
-
|
|
|
- Status = gSmst->SmmLocateProtocol (&gDynamicSiLibrarySmmProtocolGuid, NULL, &DynamicSiLibrarySmmProtocol);
|
|
|
- if (EFI_ERROR (Status)) {
|
|
|
- ASSERT_EFI_ERROR (Status);
|
|
|
- return Status;
|
|
|
- }
|
|
|
-
|
|
|
- //
|
|
|
- // Init Power Management I/O Base aka ACPI Base
|
|
|
- //
|
|
|
- PchPmBase = DynamicSiLibrarySmmProtocol->PmcGetAcpiBase ();
|
|
|
-
|
|
|
- SmiEn = IoRead32 (PchPmBase + R_ACPI_IO_SMI_EN);
|
|
|
-
|
|
|
- //
|
|
|
- // Disable SW SMI Timer and legacy USB
|
|
|
- //
|
|
|
- SmiEn &= ~(B_ACPI_IO_SMI_EN_SWSMI_TMR | B_ACPI_IO_SMI_EN_LEGACY_USB | B_ACPI_IO_SMI_EN_LEGACY_USB2);
|
|
|
-
|
|
|
- //
|
|
|
- // And enable SMI on write to B_PCH_ACPI_PM1_CNT_SLP_EN when SLP_TYP is written
|
|
|
- //
|
|
|
- SmiEn |= B_ACPI_IO_SMI_EN_ON_SLP_EN ;
|
|
|
- IoWrite32 (PchPmBase + R_ACPI_IO_SMI_EN, SmiEn);
|
|
|
-
|
|
|
- //
|
|
|
- // Disable PM sources except power button
|
|
|
- //
|
|
|
- Pm1En = B_ACPI_IO_PM1_EN_PWRBTN;
|
|
|
- IoWrite16 (PchPmBase + R_ACPI_IO_PM1_EN, Pm1En);
|
|
|
-
|
|
|
- //
|
|
|
- // Enable SCI
|
|
|
- //
|
|
|
- Pm1Cnt = IoRead16 (PchPmBase + R_ACPI_IO_PM1_CNT);
|
|
|
- Pm1Cnt |= B_ACPI_IO_PM1_CNT_SCI_EN;
|
|
|
- IoWrite16 (PchPmBase + R_ACPI_IO_PM1_CNT, Pm1Cnt);
|
|
|
-
|
|
|
- return EFI_SUCCESS;
|
|
|
-}
|
|
|
-
|
|
|
-EFI_STATUS
|
|
|
-EFIAPI
|
|
|
-SiliconDisableAcpi (
|
|
|
- IN BOOLEAN DisableSci
|
|
|
- )
|
|
|
-{
|
|
|
- UINT16 Pm1Cnt;
|
|
|
- UINT16 PchPmBase;
|
|
|
- EFI_STATUS Status;
|
|
|
- DYNAMIC_SI_LIBARY_SMM_PROTOCOL *DynamicSiLibrarySmmProtocol = NULL;
|
|
|
-
|
|
|
- Status = gSmst->SmmLocateProtocol (&gDynamicSiLibrarySmmProtocolGuid, NULL, &DynamicSiLibrarySmmProtocol);
|
|
|
- if (EFI_ERROR (Status)) {
|
|
|
- ASSERT_EFI_ERROR (Status);
|
|
|
- return Status;
|
|
|
- }
|
|
|
-
|
|
|
- //
|
|
|
- // Init Power Management I/O Base aka ACPI Base
|
|
|
- //
|
|
|
- PchPmBase = DynamicSiLibrarySmmProtocol->PmcGetAcpiBase ();
|
|
|
-
|
|
|
- Pm1Cnt = IoRead16 (PchPmBase + R_ACPI_IO_PM1_CNT);
|
|
|
-
|
|
|
- //
|
|
|
- // Disable SCI
|
|
|
- //
|
|
|
- Pm1Cnt &= ~B_ACPI_IO_PM1_CNT_SCI_EN;
|
|
|
-
|
|
|
- IoWrite16 (PchPmBase + R_ACPI_IO_PM1_CNT, Pm1Cnt);
|
|
|
-
|
|
|
- return EFI_SUCCESS;
|
|
|
-}
|