/** @file PCH SPI Common Driver implements the SPI Host Controller Compatibility Interface. Copyright (c) 2017 - 2021, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef SPI_FLASH_LIB_H_ #define SPI_FLASH_LIB_H_ /** Flash Region Type **/ typedef enum { FlashRegionDescriptor, FlashRegionBios, FlashRegionMe, FlashRegionGbE, FlashRegionPlatformData, FlashRegionDer, FlashRegionAll, FlashRegionMax } FLASH_REGION_TYPE; /** Read SFDP data from the flash part. @param[in] ComponentNumber The Component Number for chip select @param[in] ByteCount Number of bytes in SFDP data portion of the SPI cycle, the max number is 64 @param[out] SfdpData The Pointer to caller-allocated buffer containing the SFDP data received It is the caller's responsibility to make sure Buffer is large enough for the total number of bytes read. @retval EFI_SUCCESS Command succeed. @retval EFI_INVALID_PARAMETER The parameters specified are not valid. @retval EFI_DEVICE_ERROR Device error, command aborts abnormally. **/ EFI_STATUS EFIAPI SpiFlashReadSfdp ( IN UINT8 ComponentNumber, IN UINT32 ByteCount, OUT UINT8 *SfdpData ); /** Read Jedec Id from the flash part. @param[in] ComponentNumber The Component Number for chip select @param[in] ByteCount Number of bytes in JedecId data portion of the SPI cycle, the data size is 3 typically @param[out] JedecId The Pointer to caller-allocated buffer containing JEDEC ID received It is the caller's responsibility to make sure Buffer is large enough for the total number of bytes read. @retval EFI_SUCCESS Command succeed. @retval EFI_INVALID_PARAMETER The parameters specified are not valid. @retval EFI_DEVICE_ERROR Device error, command aborts abnormally. **/ EFI_STATUS EFIAPI SpiFlashReadJedecId ( IN UINT8 ComponentNumber, IN UINT32 ByteCount, OUT UINT8 *JedecId ); /** Write the status register in the flash part. @param[in] ByteCount Number of bytes in Status data portion of the SPI cycle, the data size is 1 typically @param[in] StatusValue The Pointer to caller-allocated buffer containing the value of Status register writing @retval EFI_SUCCESS Command succeed. @retval EFI_INVALID_PARAMETER The parameters specified are not valid. @retval EFI_DEVICE_ERROR Device error, command aborts abnormally. **/ EFI_STATUS EFIAPI SpiFlashWriteStatus ( IN UINT32 ByteCount, IN UINT8 *StatusValue ); /** Read status register in the flash part. @param[in] ByteCount Number of bytes in Status data portion of the SPI cycle, the data size is 1 typically @param[out] StatusValue The Pointer to caller-allocated buffer containing the value of Status register received. @retval EFI_SUCCESS Command succeed. @retval EFI_INVALID_PARAMETER The parameters specified are not valid. @retval EFI_DEVICE_ERROR Device error, command aborts abnormally. **/ EFI_STATUS EFIAPI SpiFlashReadStatus ( IN UINT32 ByteCount, OUT UINT8 *StatusValue ); /** Read SC Soft Strap Values @param[in] SoftStrapAddr SC Soft Strap address offset from FPSBA. @param[in] ByteCount Number of bytes in SoftStrap data portion of the SPI cycle @param[out] SoftStrapValue The Pointer to caller-allocated buffer containing SC Soft Strap Value. It is the caller's responsibility to make sure Buffer is large enough for the total number of bytes read. @retval EFI_SUCCESS Command succeed. @retval EFI_INVALID_PARAMETER The parameters specified are not valid. @retval EFI_DEVICE_ERROR Device error, command aborts abnormally. **/ EFI_STATUS EFIAPI SpiReadPchSoftStrap ( IN UINT32 SoftStrapAddr, IN UINT32 ByteCount, OUT UINT8 *SoftStrapValue ); /** Read data from the flash part. @param[in] FlashRegionType The Flash Region type for flash cycle which is listed in the Descriptor. @param[in] Address The Flash Linear Address must fall within a region for which BIOS has access permissions. @param[in] ByteCount Number of bytes in the data portion of the SPI cycle. @param[out] Buffer The Pointer to caller-allocated buffer containing the dada received. It is the caller's responsibility to make sure Buffer is large enough for the total number of bytes read. @retval EFI_SUCCESS Command succeed. @retval EFI_INVALID_PARAMETER The parameters specified are not valid. @retval EFI_DEVICE_ERROR Device error, command aborts abnormally. **/ EFI_STATUS EFIAPI SpiFlashRead ( IN FLASH_REGION_TYPE FlashRegionType, IN UINT32 Address, IN UINT32 ByteCount, OUT UINT8 *Buffer ); /** Erase some area on the flash part. @param[in] FlashRegionType The Flash Region type for flash cycle which is listed in the Descriptor. @param[in] Address The Flash Linear Address must fall within a region for which BIOS has access permissions. @param[in] ByteCount Number of bytes in the data portion of the SPI cycle. @retval EFI_SUCCESS Command succeed. @retval EFI_INVALID_PARAMETER The parameters specified are not valid. @retval EFI_DEVICE_ERROR Device error, command aborts abnormally. **/ EFI_STATUS EFIAPI SpiFlashErase ( IN FLASH_REGION_TYPE FlashRegionType, IN UINT32 Address, IN UINT32 ByteCount ); /** Write data to the flash part. @param[in] FlashRegionType The Flash Region type for flash cycle which is listed in the Descriptor. @param[in] Address The Flash Linear Address must fall within a region for which BIOS has access permissions. @param[in] ByteCount Number of bytes in the data portion of the SPI cycle. @param[in] Buffer Pointer to caller-allocated buffer containing the data sent during the SPI cycle. @retval EFI_SUCCESS Command succeed. @retval EFI_INVALID_PARAMETER The parameters specified are not valid. @retval EFI_DEVICE_ERROR Device error, command aborts abnormally. **/ EFI_STATUS EFIAPI SpiFlashWrite ( IN FLASH_REGION_TYPE FlashRegionType, IN UINT32 Address, IN UINT32 ByteCount, IN UINT8 *Buffer ); /** Initialize an SPI library. @retval EFI_SUCCESS The protocol instance was properly initialized @retval EFI_NOT_FOUND The expected SPI info could not be found **/ EFI_STATUS EFIAPI SpiConstructor ( VOID ); /** Get the SPI region base and size, based on the enum type @param[in] FlashRegionType The Flash Region type for for the base address which is listed in the Descriptor. @param[out] BaseAddress The Flash Linear Address for the Region 'n' Base @param[out] RegionSize The size for the Region 'n' @retval EFI_SUCCESS Read success @retval EFI_INVALID_PARAMETER Invalid region type given @retval EFI_DEVICE_ERROR The region is not used **/ EFI_STATUS EFIAPI SpiGetRegionAddress ( IN FLASH_REGION_TYPE FlashRegionType, OUT UINT32 *BaseAddress OPTIONAL, OUT UINT32 *RegionSize OPTIONAL ); #endif