/** @file Functions shared between driver instances. Copyright (c) 2017, Intel Corporation. All rights reserved.
Copyright (c) Microsoft Corporation.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include #include #include #include #include #include #include "AcpiMm.h" /** Enable SCI @param[in] DispatchHandle - The handle of this callback, obtained when registering @param[in] DispatchContext - Pointer to the EFI_SMM_SW_DISPATCH_CONTEXT @param[in] CommBuffer - A pointer to a collection of data in memory that will be conveyed from a non-SMM environment into an SMM environment. @param[in] CommBufferSize - The size of the CommBuffer. **/ EFI_STATUS EFIAPI EnableAcpiCallback ( IN EFI_HANDLE DispatchHandle, IN CONST VOID *DispatchContext, IN OUT VOID *CommBuffer OPTIONAL, IN OUT UINTN *CommBufferSize OPTIONAL ) { BoardEnableAcpi (TRUE); return EFI_SUCCESS; } /** Disable SCI @param[in] DispatchHandle - The handle of this callback, obtained when registering @param[in] DispatchContext - Pointer to the EFI_SMM_SW_DISPATCH_CONTEXT @param[in] CommBuffer - A pointer to a collection of data in memory that will be conveyed from a non-SMM environment into an SMM environment. @param[in] CommBufferSize - The size of the CommBuffer. **/ EFI_STATUS EFIAPI DisableAcpiCallback ( IN EFI_HANDLE DispatchHandle, IN CONST VOID *DispatchContext, IN OUT VOID *CommBuffer OPTIONAL, IN UINTN *CommBufferSize OPTIONAL ) { BoardDisableAcpi (TRUE); return EFI_SUCCESS; } /** ACPI initialization logic shared between the Traditional MM and Standalone MM driver instances. **/ VOID InitializeAcpiMm ( VOID ) { EFI_STATUS Status; EFI_HANDLE SwHandle; EFI_SMM_SW_DISPATCH2_PROTOCOL *SwDispatch; EFI_SMM_SW_REGISTER_CONTEXT SwContext; // // Locate the ICH SMM SW dispatch protocol // Status = gMmst->MmLocateProtocol (&gEfiSmmSwDispatch2ProtocolGuid, NULL, (VOID**) &SwDispatch); ASSERT_EFI_ERROR (Status); // // Register ACPI enable SMI handler // SwContext.SwSmiInputValue = (UINTN) PcdGet8 (PcdAcpiEnableSwSmi); Status = SwDispatch->Register ( SwDispatch, EnableAcpiCallback, &SwContext, &SwHandle ); ASSERT_EFI_ERROR (Status); // // Register ACPI disable SMI handler // SwContext.SwSmiInputValue = (UINTN) PcdGet8 (PcdAcpiDisableSwSmi); Status = SwDispatch->Register ( SwDispatch, DisableAcpiCallback, &SwContext, &SwHandle ); ASSERT_EFI_ERROR (Status); }