/** @file
Header file for Serial IO Private Lib implementation.
Copyright (c) 2021, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef _SERIAL_IO_PRIVATE_LIB_H_
#define _SERIAL_IO_PRIVATE_LIB_H_
#include
#include
/**
Serial Io Pci Device State structure.
Used to preserve current information about the device when it is configured in Pci mode prior to Pch Initialization.
**/
typedef struct {
UINT64 PciCfgBar0; ///< Pci Config Space Base Address Register
UINT8 PciCfgCommand; ///< Pci Config Space Command Register
UINT8 PciCfgPmeCtrlSts; ///< Pci Config Space Pme Control Status
UINT8 PprReset; ///< MMIO Proprietary Reset Register
} SERIAL_IO_PCI_DEVICE_STATE;
/**
Checks if higher functions are enabled.
Used for Function 0 Serial Io Device disabling
@param[in] DeviceNum Device Number
@retval TRUE At least one higher function device is enabled
FALSE Higher functions are disabled
**/
BOOLEAN
SerialIoHigherFunctionsEnabled (
IN UINT8 DeviceNum
);
/**
Places SerialIo device in D3
@param[in] PciCfgBase Pci Config Offset
**/
VOID
SerialIoSetD3 (
IN UINT64 PciCfgBase
);
/**
Places SerialIo device in D0
@param[in] PciCfgBase Pci Config Offset
**/
VOID
SerialIoSetD0 (
IN UINT64 PciCfgBase
);
/**
Allows Memory Access
@param[in] PciCfgBase Pci Config Offset
@param[in] Hidden Mode that determines access type
**/
VOID
SerialIoEnableMse (
IN UINT64 PciCfgBase,
IN BOOLEAN Hidden
);
/**
Disable SerialIo memory access
@param[in] PciCfgBase Pci Config Offset
**/
VOID
SerialIoDisableMse (
IN UINT64 PciCfgBase
);
/**
Disable SerialIo memory encoding
Designated for Pci modes
@param[in] PciCfgBase Pci Config Offset
@param[in] RemoveTempBar Remove temporary mem base address or not
**/
VOID
SerialIoMmioDisable (
IN UINT64 PciCfgBase,
IN BOOLEAN RemoveBar
);
/**
Gets Fixed Base Address used for BAR0
@param[in] SpiNumber Serial IO device SPI number
@retval Config control offset
**/
UINT32
GetSerialIoSpiFixedMmioAddress (
IN UINT8 SpiNumber
);
/**
Gets Fixed Address used for Pci Config Space manipulation
@param[in] SpiNumber Serial IO device SPI number
@retval Pci Config Address
**/
UINT32
GetSerialIoSpiFixedPciCfgAddress (
IN UINT8 SpiNumber
);
/**
Gets Spi Device Id
@param[in] SpiNumber Serial IO device SPI number
@retval Device Id
**/
UINT16
GetSerialIoSpiDeviceId (
IN UINT8 SpiNumber
);
/**
Checks if SPI is Hidden, and it's Pci Config space available
@param[in] SpiNumber Selects Serial IO SPI device
@retval TRUE SPI is in hidden mode
@retval FALSE SPI is not in hidden mode
**/
BOOLEAN
IsSerialIoSpiHidden (
IN UINT8 SpiNumber
);
/**
Configures Serial IO Controller before control is passd to the OS
@param[in] SpiNumber SPI Number
@param[in] SpiDeviceConfig SerialIo SPI Config
**/
VOID
SerialIoSpiBootHandler (
IN UINT8 SpiNumber,
IN SERIAL_IO_SPI_CONFIG *SpiDeviceConfig
);
/**
Sets Pme Control Status and Command register values required for S3 Boot Script
@param[in] SpiNumber SPI Number
@param[in] SpiDeviceConfig SerialIo SPI Config
@param[in/out] S3PciCfgBase S3 Boot Script Pci Config Base
@param[in/out] Command Pci Command register data to save
@param[in/out] Pme Pci Pme Control register data to save
**/
VOID
SerialIoSpiS3Handler (
IN UINT8 SpiNumber,
IN SERIAL_IO_SPI_CONFIG *SpiDeviceConfig,
IN OUT UINT64 *S3PciCfgBase,
IN OUT UINT32 *Command,
IN OUT UINT32 *Pme
);
/**
Gets Pci Config control offset
@param[in] UartNumber Serial IO device UART number
@retval Config control offset
**/
UINT16
GetSerialIoUartConfigControlOffset (
IN UINT8 UartNumber
);
/**
Gets Fixed Base Address used for BAR0
@param[in] UartNumber Serial IO device UART number
@retval Config control offset
**/
UINT32
GetSerialIoUartFixedMmioAddress (
IN UINT8 UartNumber
);
/**
Gets Fixed Address used for Pci Config Space manipulation
@param[in] UartNumber Serial IO device UART number
@retval Pci Config Address
**/
UINT32
GetSerialIoUartFixedPciCfgAddress (
IN UINT8 UartNumber
);
/**
Returns UART S3 boot script PCI address
@param[in] UartNumber UART Number
@retval UART S3 boot script PCI address
**/
UINT64
GetSerialIoUartS3PciBase (
IN UINT8 UartNumber
);
/**
Returns SPI S3 boot script PCI address
@param[in] UartNumber UART Number
@retval SPI S3 boot script PCI address
**/
UINT64
GetSerialIoSpiS3PciBase (
IN UINT8 SpiNumber
);
/**
Returns I2C S3 boot script PCI address
@param[in] I2cNumber I2C Number
@retval I2C S3 boot script PCI address
**/
UINT64
GetSerialIoI2cS3PciBase (
IN UINT8 I2cNumber
);
/**
Gets Uarts Device Id
@param[in] UartNumbe Serial IO device UART number
@retval Device Id
**/
UINT16
GetSerialIoUartDeviceId (
IN UINT8 UartNumber
);
/**
Checks if UART is Hidden, and it's Pci Config space available
@param[in] UartNumber Selects Serial IO UART device
@retval TRUE UART is in hidden mode
@retval FALSE UART is not in hidden mode
**/
BOOLEAN
IsSerialIoUartHidden (
IN UINT8 UartNumber
);
/**
Configures Serial IO Controller before control is passd to the OS
@param[in] UartNumber UART Number
@param[in] UartDeviceConfig SerialIo UART Config
**/
VOID
SerialIoUartBootHandler (
IN UINT8 UartNumber,
IN SERIAL_IO_UART_CONFIG *UartDeviceConfig
);
/**
Sets Pme Control Status and Command register values required for S3 Boot Script
@param[in] UartNumber UART Number
@param[in] UartDeviceConfig SerialIo UART Config
@param[in/out] S3PciCfgBase S3 Boot Script Pci Config Base
@param[in/out] Command Pci Command register data to save
@param[in/out] Pme Pci Pme Control register data to save
**/
VOID
SerialIoUartS3Handler (
IN UINT8 UartNumber,
IN SERIAL_IO_UART_CONFIG *UartDeviceConfig,
IN OUT UINT64 *S3PciCfgBase,
IN OUT UINT32 *Command,
IN OUT UINT32 *Pme
);
/**
Gets Fixed Address used for Pci Config Space manipulation
@param[in] I2cNumber Serial IO device I2C number
@retval Pci Config Address
**/
UINT32
GetSerialIoI2cFixedPciCfgAddress (
IN UINT8 I2cNumber
);
/**
Gets I2C Device Id
@param[in] I2cNumber Serial IO device I2C number
@retval Device Id
**/
UINT16
GetSerialIoI2cDeviceId (
IN UINT8 I2cNumber
);
/**
Checks if I2C is Hidden, and it's Pci Config space available
@param[in] 2cNumber Selects Serial IO I2C device
@retval TRUE I2C is in hidden mode
@retval FALSE I2C is not in hidden mode
**/
BOOLEAN
IsSerialIoI2cHidden (
IN UINT8 I2cNumber
);
/**
Configures Serial IO Controller before control is passd to the OS
@param[in] I2cNumber I2C Number
@param[in] I2cDeviceConfig SerialIo I2C Config
**/
VOID
SerialIoI2cBootHandler (
IN UINT8 I2cNumber,
IN SERIAL_IO_I2C_CONFIG *I2cDeviceConfig
);
/**
Sets Pme Control Status and Command register values required for S3 Boot Script
@param[in] I2cNumber I2C Number
@param[in] I2cDeviceConfig SerialIo I2C Config
@param[in/out] S3PciCfgBase S3 Boot Script Pci Config Base
@param[in/out] Command Pci Command register data to save
@param[in/out] Pme Pci Pme Control register data to save
**/
VOID
SerialIoI2cS3Handler (
IN UINT8 I2cNumber,
IN SERIAL_IO_I2C_CONFIG *I2cDeviceConfig,
IN OUT UINT64 *S3PciCfgBase,
IN OUT UINT32 *Command,
IN OUT UINT32 *Pme
);
#endif // _SERIAL_IO_PRIVATE_LIB_H_