/** @file
Header file for PchInfoLib.
Copyright (c) 2019 Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef _PCH_INFO_LIB_H_
#define _PCH_INFO_LIB_H_
#include
typedef UINT8 PCH_STEPPING;
#define PCH_A0 0x00
#define PCH_A1 0x01
#define PCH_B0 0x10
#define PCH_B1 0x11
#define PCH_C0 0x20
#define PCH_C1 0x21
#define PCH_D0 0x30
#define PCH_D1 0x31
#define PCH_STEPPING_MAX 0xFF
typedef UINT8 PCH_SERIES;
#define PCH_H 1
#define PCH_LP 2
#define PCH_SERVER 0x80
#define PCH_UNKNOWN_SERIES 0xFF
typedef UINT8 PCH_GENERATION;
#define CNL_PCH 3
#define CDF_PCH 0x80
#define PCH_UNKNOWN_GENERATION 0xFF
typedef enum {
RstUnsupported = 0,
RstPremium,
RstOptane,
RstMaxMode
} RST_MODE;
/**
Return LPC Device Id
@retval PCH_LPC_DEVICE_ID PCH Lpc Device ID
**/
UINT16
PchGetLpcDid (
VOID
);
/**
Return Pch stepping type
@retval PCH_STEPPING Pch stepping type
**/
PCH_STEPPING
PchStepping (
VOID
);
/**
Determine if PCH is supported
@retval TRUE PCH is supported
@retval FALSE PCH is not supported
**/
BOOLEAN
IsPchSupported (
VOID
);
/**
Return Pch Series
@retval PCH_SERIES Pch Series
**/
PCH_SERIES
PchSeries (
VOID
);
/**
Check if this is PCH LP series
@retval TRUE It's PCH LP series
@retval FALSE It's not PCH LP series
**/
BOOLEAN
IsPchLp (
VOID
);
/**
Check if this is PCH H series
@retval TRUE It's PCH H series
@retval FALSE It's not PCH H series
**/
BOOLEAN
IsPchH (
VOID
);
/**
Check if this is Server PCH
@retval TRUE It's a Server PCH
@retval FALSE It's not a Server PCH
**/
BOOLEAN
IsPchServer (
VOID
);
/**
Return Pch Generation
@retval PCH_GENERATION Pch Generation
**/
PCH_GENERATION
PchGeneration (
VOID
);
/**
Check if this is CDF PCH generation
@retval TRUE It's CDF PCH
@retval FALSE It's not CDF PCH
**/
BOOLEAN
IsCdfPch (
VOID
);
/**
@retval TRUE It's CNL PCH
@retval FALSE It's not CNL PCH
**/
BOOLEAN
IsCnlPch (
VOID
);
/**
Check if this is Server SKU
@retval TRUE It's PCH Server SKU
@retval FALSE It's not PCH Server SKU
**/
BOOLEAN
IsPchServerSku (
VOID
);
/**
Get Pch Maximum Pcie Root Port Number
@retval PcieMaxRootPort Pch Maximum Pcie Root Port Number
**/
UINT8
GetPchMaxPciePortNum (
VOID
);
/**
Get Pch Maximum Pcie Controller Number
@retval Pch Maximum Pcie Controller Number
**/
UINT8
GetPchMaxPcieControllerNum (
VOID
);
/**
Get Pch Maximum Pcie Clock Number
@retval Pch Maximum Pcie Clock Number
**/
UINT8
GetPchMaxPcieClockNum (
VOID
);
/**
Get Pch Usb2 Maximum Physical Port Number
@retval Pch Usb2 Maximum Physical Port Number
**/
UINT8
GetPchUsb2MaxPhysicalPortNum (
VOID
);
/**
Get Pch Maximum Usb2 Port Number of XHCI Controller
@retval Pch Maximum Usb2 Port Number of XHCI Controller
**/
UINT8
GetPchXhciMaxUsb2PortNum (
VOID
);
/**
Get Pch Maximum Usb3 Port Number of XHCI Controller
@retval Pch Maximum Usb3 Port Number of XHCI Controller
**/
UINT8
GetPchXhciMaxUsb3PortNum (
VOID
);
/**
Get Pch Maximum Serial IO controllers number
@retval Pch Maximum Serial IO controllers number
**/
UINT8
GetPchMaxSerialIoControllersNum (
VOID
);
/**
Get Pch Maximum Serial IO I2C controllers number
@retval Pch Maximum Serial IO I2C controllers number
**/
UINT8
GetPchMaxSerialIoI2cControllersNum (
VOID
);
/**
Get Pch Maximum Serial IO SPI controllers number
@retval Pch Maximum Serial IO SPI controllers number
**/
UINT8
GetPchMaxSerialIoSpiControllersNum (
VOID
);
/**
Get Pch Maximum Serial IO UART controllers number
@retval Pch Maximum Serial IO UART controllers number
**/
UINT8
GetPchMaxSerialIoUartControllersNum (
VOID
);
#define PCH_STEPPING_STR_LENGTH_MAX 3
/**
Get PCH stepping ASCII string.
Function determines major and minor stepping versions and writes them into a buffer.
The return string is zero terminated
@param [out] Buffer Output buffer of string
@param [in] BufferSize Buffer size.
Must not be less then PCH_STEPPING_STR_LENGTH_MAX
@retval EFI_SUCCESS String copied successfully
@retval EFI_INVALID_PARAMETER The stepping is not supported, or parameters are NULL
@retval EFI_BUFFER_TOO_SMALL Input buffer size is too small
**/
EFI_STATUS
PchGetSteppingStr (
OUT CHAR8 *Buffer,
IN UINT32 BufferSize
);
/**
Get PCH series ASCII string.
The return string is zero terminated.
@retval Static ASCII string of PCH Series
**/
CHAR8*
PchGetSeriesStr (
);
/**
Get PCH Sku ASCII string
The return string is zero terminated.
@retval Static ASCII string of PCH Sku
**/
CHAR8*
PchGetSkuStr (
VOID
);
/**
Check if this chipset supports eMMC controller
@retval BOOLEAN TRUE if supported, FALSE otherwise
**/
BOOLEAN
IsPchEmmcSupported (
VOID
);
/**
Check if this chipset supports SD controller
@retval BOOLEAN TRUE if supported, FALSE otherwise
**/
BOOLEAN
IsPchSdCardSupported (
VOID
);
/**
Check if this chipset supports UFS controller
@retval BOOLEAN TRUE if supported, FALSE otherwise
**/
BOOLEAN
IsPchUfsSupported (
VOID
);
/**
Gets the maximum number of UFS controller supported by this chipset.
@return Number of supported UFS controllers
**/
UINT8
PchGetMaxUfsNum (
VOID
);
/**
Get RST mode supported by the silicon
@retval RST_MODE RST mode supported by silicon
**/
RST_MODE
PchGetSupportedRstMode (
VOID
);
/**
Check whether integrated LAN controller is supported.
@retval TRUE GbE is supported in PCH
@retval FALSE GbE is not supported by PCH
**/
BOOLEAN
PchIsGbeSupported (
VOID
);
/**
Check if given Display Audio Link T-Mode is supported
@param[in] Tmode T-mode support to be checked
@retval TRUE T-mode supported
@retval FALSE T-mode not supported
**/
BOOLEAN
IsAudioIDispTmodeSupported (
IN PCH_HDAUDIO_IDISP_TMODE Tmode
);
/**
Check if link between PCH and CPU is an P-DMI
@retval TRUE P-DMI link
@retval FALSE Not an P-DMI link
**/
BOOLEAN
IsPchWithPdmi (
VOID
);
/**
Check if link between PCH and CPU is an OP-DMI
@retval TRUE OP-DMI link
@retval FALSE Not an OP-DMI link
**/
BOOLEAN
IsPchWithOpdmi (
VOID
);
/**
Check if link between PCH and CPU is an F-DMI
@retval TRUE F-DMI link
@retval FALSE Not an F-DMI link
**/
BOOLEAN
IsPchWithFdmi (
VOID
);
#endif // _PCH_INFO_LIB_H_