/** @file
Header file for PCH Init SMM Handler
Copyright (c) 2017 - 2020 Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef _PCH_INIT_SMM_H_
#define _PCH_INIT_SMM_H_
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
extern EFI_SMM_IO_TRAP_DISPATCH2_PROTOCOL *mPchIoTrap;
extern EFI_SMM_SX_DISPATCH2_PROTOCOL *mSxDispatch;
extern PCH_NVS_AREA *mPchNvsArea;
extern UINT16 mAcpiBaseAddr;
extern EFI_PHYSICAL_ADDRESS mResvMmioBaseAddr;
extern EFI_PHYSICAL_ADDRESS mXhciMmioBaseAddr;
extern UINTN mResvMmioSize;
//
// NOTE: The module variables of policy here are only valid in post time, but not runtime time.
//
extern PCH_CONFIG_HOB *mPchConfigHob;
extern SI_CONFIG_HOB *mSiConfigHob;
#define EFI_PCI_CAPABILITY_ID_PCIPM 0x01
#define DeviceD0 0x00
#define DeviceD3 0x03
typedef enum {
PciCfg,
PciMmr
} PCH_PCI_ACCESS_TYPE;
typedef enum {
Acpi,
Rcrb,
Tco
} PCH_ACCESS_TYPE;
typedef struct {
PCH_ACCESS_TYPE AccessType;
UINT32 Address;
UINT32 Data;
UINT32 Mask;
UINT8 Width;
} PCH_SAVE_RESTORE_REG;
typedef struct {
PCH_SAVE_RESTORE_REG* PchSaveRestoreReg;
UINT8 size;
PCH_SERIES PchSeries;
} PCH_SAVE_RESTORE_REG_WRAP;
struct _PCH_SAVE_RESTORE_PCI;
typedef struct _PCH_SAVE_RESTORE_PCI{
PCH_PCI_ACCESS_TYPE AccessType;
UINT8 Device;
UINT8 Function;
UINT8 BarOffset;
UINT16 Offset;
UINT32 Data;
UINT32 Mask;
UINT8 Width;
VOID (*RestoreFunction)(struct _PCH_SAVE_RESTORE_PCI *PchSaveRestorePci);
} PCH_SAVE_RESTORE_PCI;
typedef struct {
PCH_SAVE_RESTORE_PCI* PchSaveRestorePci;
UINT8 size;
PCH_SERIES PchSeries;
} PCH_SAVE_RESTORE_PCI_WRAP;
typedef struct {
UINT8 Device;
UINT8 Function;
UINT8 PowerState;
} DEVICE_POWER_STATE;
VOID
RestorePxDevSlp(
IN PCH_SAVE_RESTORE_PCI *PchSaveRestorePci
);
/**
Register PCIE Hotplug SMI dispatch function to handle Hotplug enabling
@param[in] ImageHandle The image handle of this module
@param[in] SystemTable The EFI System Table
@retval EFI_SUCCESS The function completes successfully
**/
EFI_STATUS
EFIAPI
InitializePchPcieSmm (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
);
/**
Program Common Clock and ASPM of Downstream Devices
@param[in] PortIndex Pcie Root Port Number
@param[in] RpDevice Pcie Root Pci Device Number
@param[in] RpFunction Pcie Root Pci Function Number
@retval EFI_SUCCESS Root port complete successfully
@retval EFI_UNSUPPORTED PMC has invalid vendor ID
**/
EFI_STATUS
PchPcieSmi (
IN UINT8 PortIndex,
IN UINT8 RpDevice,
IN UINT8 RpFunction
);
/**
PCIE Hotplug SMI call back function for each Root port
@param[in] DispatchHandle Handle of this dispatch function
@param[in] RpContext Rootport context, which contains RootPort Index,
and RootPort PCI BDF.
**/
VOID
EFIAPI
PchPcieSmiRpHandlerFunction (
IN EFI_HANDLE DispatchHandle,
IN PCH_PCIE_SMI_RP_CONTEXT *RpContext
);
/**
PCIE Link Active State Change Hotplug SMI call back function for all Root ports
@param[in] DispatchHandle Handle of this dispatch function
@param[in] RpContext Rootport context, which contains RootPort Index,
and RootPort PCI BDF.
**/
VOID
EFIAPI
PchPcieLinkActiveStateChange (
IN EFI_HANDLE DispatchHandle,
IN PCH_PCIE_SMI_RP_CONTEXT *RpContext
);
/**
PCIE Link Equalization Request SMI call back function for all Root ports
@param[in] DispatchHandle Handle of this dispatch function
@param[in] RpContext Rootport context, which contains RootPort Index,
and RootPort PCI BDF.
**/
VOID
EFIAPI
PchPcieLinkEqHandlerFunction (
IN EFI_HANDLE DispatchHandle,
IN PCH_PCIE_SMI_RP_CONTEXT *RpContext
);
/**
An IoTrap callback to config PCIE power management settings
@param[in] DispatchHandle - The handle of this callback, obtained when registering
@param[in] DispatchContext - Pointer to the EFI_SMM_IO_TRAP_DISPATCH_CALLBACK_CONTEXT
**/
VOID
EFIAPI
PchPcieIoTrapSmiCallback (
IN EFI_HANDLE DispatchHandle,
IN EFI_SMM_IO_TRAP_CONTEXT *CallbackContext,
IN OUT VOID *CommBuffer,
IN OUT UINTN *CommBufferSize
);
/**
Initializes the PCH SMM handler for PCH save and restore
@param[in] ImageHandle - Handle for the image of this driver
@param[in] SystemTable - Pointer to the EFI System Table
@retval EFI_SUCCESS - PCH SMM handler was installed
**/
EFI_STATUS
EFIAPI
PchInitLateSmm (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
);
/**
Locate required protocol and register the 61h IO trap
@param[in] ImageHandle - Handle for the image of this driver
@param[in] SystemTable - Pointer to the EFI System Table
@retval EFI_SUCCESS - PCH SMM handler was installed
**/
EFI_STATUS
EFIAPI
InstallIoTrapPort61h (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
);
/**
Initialize PCH Sx entry SMI handler.
@param[in] ImageHandle - Handle for the image of this driver
**/
VOID
InitializeSxHandler (
IN EFI_HANDLE ImageHandle
);
/**
PCH Sx entry SMI handler.
@param[in] Handle Handle of the callback
@param[in] Context The dispatch context
@param[in,out] 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,out] CommBufferSize The size of the CommBuffer.
@retval EFI_SUCCESS
**/
EFI_STATUS
EFIAPI
PchSxHandler (
IN EFI_HANDLE Handle,
IN CONST VOID *Context OPTIONAL,
IN OUT VOID *CommBuffer OPTIONAL,
IN OUT UINTN *CommBufferSize OPTIONAL
);
/**
xHCI S3 entry handler
**/
VOID
PchXhciS3Callback (
VOID
);
/**
GbE Sx entry handler
**/
VOID
PchLanSxCallback (
VOID
);
/**
This function performs GPIO Sx Isolation for DevSlp pins.
**/
VOID
PchGpioSxIsolationCallback (
VOID
);
/**
Register dispatch function to handle GPIO pads Sx isolation
**/
VOID
InitializeGpioSxIsolationSmm (
VOID
);
/**
Entry point for Pch Bios Write Protect driver.
@param[in] ImageHandle Image handle of this driver.
@param[in] SystemTable Global system service table.
@retval EFI_SUCCESS Initialization complete.
**/
EFI_STATUS
EFIAPI
InstallPchBiosWriteProtect (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
);
/**
This fuction install SPI ASYNC SMI handler.
@retval EFI_SUCCESS Initialization complete.
**/
EFI_STATUS
EFIAPI
InstallPchSpiAsyncSmiHandler (
VOID
);
#endif