Home | History | Annotate | Download | only in Protocol
      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