/** @file This file defines the EFI Erase Block Protocol. Copyright (c) 2016, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent @par Revision Reference: This Protocol is introduced in UEFI Specification 2.6 **/ #ifndef __EFI_ERASE_BLOCK_PROTOCOL_H__ #define __EFI_ERASE_BLOCK_PROTOCOL_H__ #define EFI_ERASE_BLOCK_PROTOCOL_GUID \ { \ 0x95a9a93e, 0xa86e, 0x4926, { 0xaa, 0xef, 0x99, 0x18, 0xe7, 0x72, 0xd9, 0x87 } \ } typedef struct _EFI_ERASE_BLOCK_PROTOCOL EFI_ERASE_BLOCK_PROTOCOL; #define EFI_ERASE_BLOCK_PROTOCOL_REVISION ((2<<16) | (60)) /// /// EFI_ERASE_BLOCK_TOKEN /// typedef struct { // // If Event is NULL, then blocking I/O is performed. If Event is not NULL and // non-blocking I/O is supported, then non-blocking I/O is performed, and // Event will be signaled when the erase request is completed. // EFI_EVENT Event; // // Defines whether the signaled event encountered an error. // EFI_STATUS TransactionStatus; } EFI_ERASE_BLOCK_TOKEN; /** Erase a specified number of device blocks. @param[in] This Indicates a pointer to the calling context. @param[in] MediaId The media ID that the erase request is for. @param[in] LBA The starting logical block address to be erased. The caller is responsible for erasing only legitimate locations. @param[in, out] Token A pointer to the token associated with the transaction. @param[in] Size The size in bytes to be erased. This must be a multiple of the physical block size of the device. @retval EFI_SUCCESS The erase request was queued if Event is not NULL. The data was erased correctly to the device if the Event is NULL.to the device. @retval EFI_WRITE_PROTECTED The device cannot be erased due to write protection. @retval EFI_DEVICE_ERROR The device reported an error while attempting to perform the erase operation. @retval EFI_INVALID_PARAMETER The erase request contains LBAs that are not valid. @retval EFI_NO_MEDIA There is no media in the device. @retval EFI_MEDIA_CHANGED The MediaId is not for the current media. **/ typedef EFI_STATUS (EFIAPI *EFI_BLOCK_ERASE)( IN EFI_ERASE_BLOCK_PROTOCOL *This, IN UINT32 MediaId, IN EFI_LBA LBA, IN OUT EFI_ERASE_BLOCK_TOKEN *Token, IN UINTN Size ); /// /// The EFI Erase Block Protocol provides the ability for a device to expose /// erase functionality. This optional protocol is installed on the same handle /// as the EFI_BLOCK_IO_PROTOCOL or EFI_BLOCK_IO2_PROTOCOL. /// struct _EFI_ERASE_BLOCK_PROTOCOL { // // The revision to which the EFI_ERASE_BLOCK_PROTOCOL adheres. All future // revisions must be backwards compatible. If a future version is not // backwards compatible, it is not the same GUID. // UINT64 Revision; // // Returns the erase length granularity as a number of logical blocks. A // value of 1 means the erase granularity is one logical block. // UINT32 EraseLengthGranularity; EFI_BLOCK_ERASE EraseBlocks; }; extern EFI_GUID gEfiEraseBlockProtocolGuid; #endif