/** @file
Header file for PCH Initialization Driver.
Copyright (c) 2017 - 2020 Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef _PCH_INITIALIZATION_DRIVER_H_
#define _PCH_INITIALIZATION_DRIVER_H_
typedef UINT16 STRING_REF;
#ifdef FSP_FLAG
#include
#include
#endif
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#ifndef FSP_FLAG
#include
#endif
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
typedef struct {
PCH_INFO_PROTOCOL PchInfo;
} PCH_INSTANCE_PRIVATE_DATA;
//
// This struct is used to record the fields that is required to be saved and restored during RST PCIe Storage Remapping Configuration
//
typedef struct {
UINT8 PmCapPtr;
UINT8 PcieCapPtr;
UINT16 L1ssCapPtr;
UINT8 EndpointL1ssControl2;
UINT32 EndpointL1ssControl1;
UINT16 LtrCapPtr;
UINT32 EndpointLtrData;
UINT16 EndpointLctlData16;
UINT16 EndpointDctlData16;
UINT16 EndpointDctl2Data16;
UINT16 RootPortDctl2Data16;
} PCH_RST_PCIE_STORAGE_SAVE_RESTORE;
//
// This struct is used to record the result of RST PCIe Storage detection for each RST PCIe Storage Cycle Router supported on the platform
//
typedef struct {
BOOLEAN SupportRstPcieStoragRemapping; // Indicates if RST PCIe Storage Remapping is supported and PCIe storage device is found under a Cycle Router
UINT8 RootPortNum; // Indicates the root port number with RST PCIe Storage Remapping remapping supported and PCIe storage device plugged on, numbering is 0-based
UINT8 RootPortLane; // Indicates the root port lanes occupied by the PCIe storage device with 4-bit mask
UINT8 DeviceInterface; // Indicates the interface of the PCIe storage device (AHCI or NVMe)
UINT8 IsMsixSupported; // Indicates if the PCIe storage device support MSI-X cap
UINT16 MsixStartingVector; // Records the starting vector of PCIe storage device's MSI-X (if supported)
UINT16 MsixEndingVector; // Records the ending vector of PCIe storage device's MSI-X (if supported)
UINT32 EndPointBarSize; // Records the PCIe storage device's BAR size
UINT32 EndPointUniqueMsixTableBar; // Records the PCIe storage device's MSI-X Table BAR if it supports unique MSI-X Table BAR
UINT32 EndPointUniqueMsixTableBarValue; // Records the PCIe storage device's MSI-X Table BAR value if it supports unique MSI-X Table BAR
UINT32 EndPointUniqueMsixPbaBar; // Records the PCIe storage device's MSI-X PBA BAR if it supports unique MSI-X PBA BAR
UINT32 EndPointUniqueMsixPbaBarValue; // Records the PCIe storage device's MSI-X PBA BAR value if it supports unique MSI-X PBA BAR
UINT8 EndPointBcc; // Records the PCIe storage device's Base Class Code
UINT8 EndPointScc; // Records the PCIe storage device's Sub Class Code
UINT8 EndPointPi; // Records the PCIe storage device's Programming Interface
PCH_RST_PCIE_STORAGE_SAVE_RESTORE PchRstPcieStorageSaveRestore; // Records the fields that is required to be saved and restored
} PCH_RST_PCIE_STORAGE_DETECTION;
//
// Data definitions
//
extern EFI_HANDLE mImageHandle;
//
// Pch NVS area definition
//
extern PCH_NVS_AREA_PROTOCOL mPchNvsAreaProtocol;
extern PCH_CONFIG_HOB *mPchConfigHob;
extern SI_CONFIG_HOB *mSiConfigHob;
//
// Function Prototype
//
//
// Local function prototypes
//
/**
Initialize the PCH device according to the PCH Policy HOB
and install PCH info instance.
**/
VOID
InitializePchDevice (
VOID
);
/**
Common PchInit Module Entry Point
**/
VOID
PchInitEntryPointCommon (
VOID
);
/**
Common PCH initialization on PCI enumeration complete.
**/
VOID
PchOnPciEnumCompleteCommon (
VOID
);
/**
Configures Serial IO Controllers
**/
EFI_STATUS
ConfigureSerialIoAtBoot (
VOID
);
/**
Creates device handles for SerialIo devices in ACPI mode
**/
VOID
CreateSerialIoHandles (
VOID
);
/**
Mark memory used by SerialIo devices in ACPI mode as allocated
@retval EFI_SUCCESS The function completed successfully
**/
EFI_STATUS
AllocateSerialIoMemory (
VOID
);
/**
Update ASL definitions for SerialIo devices.
@retval EFI_SUCCESS The function completed successfully
**/
EFI_STATUS
UpdateSerialIoAcpiData (
VOID
);
/**
Initialize PCIE SRC clocks in ICC subsystem
@param[in] GbePortNumber Number of PCIE rootport assigned to GbE adapter
**/
VOID
ConfigurePchPcieClocks (
IN UINTN GbePortNumber
);
/**
Initialize Intel High Definition Audio ACPI Tables
@retval EFI_SUCCESS The function completed successfully
@retval EFI_LOAD_ERROR ACPI table cannot be installed
@retval EFI_UNSUPPORTED ACPI table not set because DSP is disabled
**/
EFI_STATUS
PchHdAudioAcpiInit (
VOID
);
/**
Configure eMMC in HS400 Mode
@param[in] This A pointer to PCH_EMMC_TUNING_PROTOCOL structure
@param[in] Revision Revision parameter used to verify the layout of EMMC_INFO and TUNINGDATA.
@param[in] EmmcInfo A pointer to EMMC_INFO structure
@param[out] EmmcTuningData A pointer to EMMC_TUNING_DATA structure
@retval EFI_SUCCESS The function completed successfully
@retval EFI_NOT_FOUND The item was not found
@retval EFI_OUT_OF_RESOURCES The request could not be completed due to a lack of resources.
@retval EFI_INVALID_PARAMETER A parameter was incorrect.
@retval EFI_DEVICE_ERROR Hardware Error
@retval EFI_NO_MEDIA No media
@retval EFI_MEDIA_CHANGED Media Change
@retval EFI_BAD_BUFFER_SIZE Buffer size is bad
@retval EFI_CRC_ERROR Command or Data CRC Error
**/
EFI_STATUS
EFIAPI
ConfigureEmmcHs400Mode (
IN PCH_EMMC_TUNING_PROTOCOL *This,
IN UINT8 Revision,
IN EMMC_INFO *EmmcInfo,
OUT EMMC_TUNING_DATA *EmmcTuningData
);
/**
Install PCH EMMC TUNING PROTOCOL
**/
VOID
InstallPchEmmcTuningProtocol (
VOID
);
/**
Perform the remaining configuration on PCH SATA to perform device detection,
then set the SATA SPD and PxE corresponding, and set the Register Lock on PCH SATA
@retval None
**/
VOID
ConfigurePchSataOnEndOfDxe (
VOID
);
/**
Update ASL data for CIO2 Device.
@retval EFI_SUCCESS The function completed successfully
**/
EFI_STATUS
UpdateCio2AcpiData (
VOID
);
/**
Initialize Pch acpi
@param[in] ImageHandle Handle for the image of this driver
@retval EFI_SUCCESS The function completed successfully
@retval EFI_OUT_OF_RESOURCES Do not have enough resources to initialize the driver
**/
EFI_STATUS
EFIAPI
PchAcpiInit (
IN EFI_HANDLE ImageHandle
);
/**
Update ASL object before Boot
@retval EFI_STATUS
@retval EFI_NOT_READY The Acpi protocols are not ready.
**/
EFI_STATUS
PchUpdateNvsArea (
VOID
);
/**
Initialize PCH Nvs Area opeartion region.
@retval EFI_SUCCESS initialized successfully
@retval EFI_NOT_FOUND Nvs Area operation region is not found
**/
EFI_STATUS
PatchPchNvsAreaAddress (
VOID
);
/**
PCH Update NvsArea ExitBootServicesFlag on ExitBootService. This event is used if only ExitBootService is used
and not in legacy boot
@retval None
**/
VOID
EFIAPI
PchUpdateNvsOnExitBootServices (
VOID
);
#endif // _PCH_INITIALIZATION_DRIVER_H_