/** @file Flash device library class header file. Copyright (c) 2017 - 2021, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef FLASHDEVICE_LIB_H_ #define FLASHDEVICE_LIB_H_ /** Read NumBytes bytes of data from the address specified by PAddress into Buffer. @param[in] PAddress The starting physical address of the read. @param[in,out] NumBytes On input, the number of bytes to read. On output, the number of bytes actually read. @param[out] Buffer The destination data buffer for the read. @retval EFI_SUCCESS. Opertion is successful. @retval EFI_DEVICE_ERROR If there is any device errors. **/ EFI_STATUS EFIAPI LibFvbFlashDeviceRead ( IN UINTN PAddress, IN OUT UINTN *NumBytes, OUT UINT8 *Buffer ); /** Write NumBytes bytes of data from Buffer to the address specified by PAddresss. @param[in] PAddress The starting physical address of the write. @param[in,out] NumBytes On input, the number of bytes to write. On output, the actual number of bytes written. @param[in] Buffer The source data buffer for the write. @retval EFI_SUCCESS. Opertion is successful. @retval EFI_DEVICE_ERROR If there is any device errors. **/ EFI_STATUS EFIAPI LibFvbFlashDeviceWrite ( IN UINTN PAddress, IN OUT UINTN *NumBytes, IN UINT8 *Buffer ); /** Erase the block starting at PAddress. @param[in] PAddress The starting physical address of the region to be erased. @param[in] LbaLength The length of the region to be erased. This parameter is necessary as the physical block size on a flash device could be different than the logical block size of Firmware Volume Block protocol. Erase on flash chip is always performed block by block. Therefore, the ERASE operation to a logical block is converted a number of ERASE operation (or a partial erase) on the hardware. @retval EFI_SUCCESS. Opertion is successful. @retval EFI_DEVICE_ERROR If there is any device errors. **/ EFI_STATUS EFIAPI LibFvbFlashDeviceBlockErase ( IN UINTN PAddress, IN UINTN LbaLength ); /** Lock or unlock the block starting at PAddress. @param[in] PAddress The starting physical address of region to be (un)locked. @param[in] LbaLength The length of the region to be (un)locked. This parameter is necessary as the physical block size on a flash device could be different than the logical block size of Firmware Volume Block protocol. (Un)Lock on flash chip is always performed block by block. Therefore, the (Un)Lock operation to a logical block is converted a number of (Un)Lock operation (or a partial erase) on the hardware. @param[in] Lock TRUE to lock. FALSE to unlock. @retval EFI_SUCCESS. Opertion is successful. **/ EFI_STATUS EFIAPI LibFvbFlashDeviceBlockLock ( IN UINTN PAddress, IN UINTN LbaLength, IN BOOLEAN Lock ); PHYSICAL_ADDRESS EFIAPI LibFvbFlashDeviceMemoryMap ( ); #endif