/** @file | |
PCH SPI Common Driver implements the SPI Host Controller Compatibility Interface. | |
Copyright (c) 2017 - 2021, Intel Corporation. All rights reserved.<BR> | |
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 | |