/** @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_