1 /** @file 2 This file defines the EFI Erase Block Protocol. 3 4 Copyright (c) 2016, Intel Corporation. All rights reserved.<BR> 5 This program and the accompanying materials 6 are licensed and made available under the terms and conditions of the BSD License 7 which accompanies this distribution. The full text of the license may be found at 8 http://opensource.org/licenses/bsd-license.php 9 10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 12 13 @par Revision Reference: 14 This Protocol is introduced in UEFI Specification 2.6 15 16 **/ 17 18 #ifndef __EFI_ERASE_BLOCK_PROTOCOL_H__ 19 #define __EFI_ERASE_BLOCK_PROTOCOL_H__ 20 21 #define EFI_ERASE_BLOCK_PROTOCOL_GUID \ 22 { \ 23 0x95a9a93e, 0xa86e, 0x4926, { 0xaa, 0xef, 0x99, 0x18, 0xe7, 0x72, 0xd9, 0x87 } \ 24 } 25 26 typedef struct _EFI_ERASE_BLOCK_PROTOCOL EFI_ERASE_BLOCK_PROTOCOL; 27 28 #define EFI_ERASE_BLOCK_PROTOCOL_REVISION ((2<<16) | (60)) 29 30 /// 31 /// EFI_ERASE_BLOCK_TOKEN 32 /// 33 typedef struct { 34 // 35 // If Event is NULL, then blocking I/O is performed. If Event is not NULL and 36 // non-blocking I/O is supported, then non-blocking I/O is performed, and 37 // Event will be signaled when the erase request is completed. 38 // 39 EFI_EVENT Event; 40 // 41 // Defines whether the signaled event encountered an error. 42 // 43 EFI_STATUS TransactionStatus; 44 } EFI_ERASE_BLOCK_TOKEN; 45 46 /** 47 Erase a specified number of device blocks. 48 49 @param[in] This Indicates a pointer to the calling context. 50 @param[in] MediaId The media ID that the erase request is for. 51 @param[in] LBA The starting logical block address to be 52 erased. The caller is responsible for erasing 53 only legitimate locations. 54 @param[in, out] Token A pointer to the token associated with the 55 transaction. 56 @param[in] Size The size in bytes to be erased. This must be 57 a multiple of the physical block size of the 58 device. 59 60 @retval EFI_SUCCESS The erase request was queued if Event is not 61 NULL. The data was erased correctly to the 62 device if the Event is NULL.to the device. 63 @retval EFI_WRITE_PROTECTED The device cannot be erased due to write 64 protection. 65 @retval EFI_DEVICE_ERROR The device reported an error while attempting 66 to perform the erase operation. 67 @retval EFI_INVALID_PARAMETER The erase request contains LBAs that are not 68 valid. 69 @retval EFI_NO_MEDIA There is no media in the device. 70 @retval EFI_MEDIA_CHANGED The MediaId is not for the current media. 71 72 **/ 73 typedef 74 EFI_STATUS 75 (EFIAPI *EFI_BLOCK_ERASE) ( 76 IN EFI_ERASE_BLOCK_PROTOCOL *This, 77 IN UINT32 MediaId, 78 IN EFI_LBA LBA, 79 IN OUT EFI_ERASE_BLOCK_TOKEN *Token, 80 IN UINTN Size 81 ); 82 83 /// 84 /// The EFI Erase Block Protocol provides the ability for a device to expose 85 /// erase functionality. This optional protocol is installed on the same handle 86 /// as the EFI_BLOCK_IO_PROTOCOL or EFI_BLOCK_IO2_PROTOCOL. 87 /// 88 struct _EFI_ERASE_BLOCK_PROTOCOL { 89 // 90 // The revision to which the EFI_ERASE_BLOCK_PROTOCOL adheres. All future 91 // revisions must be backwards compatible. If a future version is not 92 // backwards compatible, it is not the same GUID. 93 // 94 UINT64 Revision; 95 // 96 // Returns the erase length granularity as a number of logical blocks. A 97 // value of 1 means the erase granularity is one logical block. 98 // 99 UINT32 EraseLengthGranularity; 100 EFI_BLOCK_ERASE EraseBlocks; 101 }; 102 103 extern EFI_GUID gEfiEraseBlockProtocolGuid; 104 105 #endif 106