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