Home | History | Annotate | Download | only in Protocol
      1 /** @file
      2   EFI_TAPE_IO_PROTOCOL as defined in the UEFI 2.0.
      3   Provide services to control and access a tape device.
      4 
      5 Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
      6 This program and the accompanying materials are licensed and made available under
      7 the terms and conditions of the BSD License that accompanies this distribution.
      8 The full text of the license may be found at
      9 http://opensource.org/licenses/bsd-license.php.
     10 
     11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     13 
     14 **/
     15 
     16 #ifndef __EFI_TAPE_IO_PROTOCOL_H__
     17 #define __EFI_TAPE_IO_PROTOCOL_H__
     18 
     19 #define EFI_TAPE_IO_PROTOCOL_GUID \
     20   { \
     21     0x1e93e633, 0xd65a, 0x459e, {0xab, 0x84, 0x93, 0xd9, 0xec, 0x26, 0x6d, 0x18 } \
     22   }
     23 
     24 typedef struct _EFI_TAPE_IO_PROTOCOL EFI_TAPE_IO_PROTOCOL;
     25 
     26 typedef struct _EFI_TAPE_HEADER {
     27   UINT64     Signature;
     28   UINT32     Revision;
     29   UINT32     BootDescSize;
     30   UINT32     BootDescCRC;
     31   EFI_GUID   TapeGUID;
     32   EFI_GUID   TapeType;
     33   EFI_GUID   TapeUnique;
     34   UINT32     BLLocation;
     35   UINT32     BLBlocksize;
     36   UINT32     BLFilesize;
     37   CHAR8      OSVersion[40];
     38   CHAR8      AppVersion[40];
     39   CHAR8      CreationDate[10];
     40   CHAR8      CreationTime[10];
     41   CHAR8      SystemName[256];  // UTF-8
     42   CHAR8      TapeTitle[120];   // UTF-8
     43   CHAR8      pad[468];         // pad to 1024
     44 } EFI_TAPE_HEADER;
     45 
     46 /**
     47   Reads from the tape.
     48 
     49   @param  This       A pointer to the EFI_TAPE_IO_PROTOCOL instance.
     50   @param  BufferSize The size of the buffer in bytes pointed to by Buffer.
     51   @param  Buffer     The pointer to the buffer for data to be read into.
     52 
     53   @retval EFI_SUCCESS           Data was successfully transferred from the media.
     54   @retval EFI_END_OF_FILE       A filemark was encountered which limited the data
     55                                 transferred by the read operation or the head is positioned
     56                                 just after a filemark.
     57   @retval EFI_NO_MEDIA          No media is loaded in the device.
     58   @retval EFI_NOT_READY         The transfer failed since the device was not ready (e.g. not
     59                                 online). The transfer may be retried at a later time.
     60   @retval EFI_UNSUPPORTED       The device does not support this type of transfer.
     61   @retval EFI_TIMEOUT           The transfer failed to complete within the timeout specified.
     62   @retval EFI_MEDIA_CHANGED     The media in the device was changed since the last access.
     63                                 The transfer was aborted since the current position of the
     64                                 media may be incorrect.
     65   @retval EFI_INVALID_PARAMETER A NULL Buffer was specified with a non-zero
     66                                 BufferSize, or the device is operating in fixed block
     67                                 size mode and the BufferSize was not a multiple of
     68                                 device's fixed block size
     69   @retval EFI_DEVICE_ERROR      A device error occurred while attempting to transfer data
     70                                 from the media.
     71 
     72 **/
     73 typedef
     74 EFI_STATUS
     75 (EFIAPI *EFI_TAPE_READ)(
     76   IN EFI_TAPE_IO_PROTOCOL *This,
     77   IN OUT UINTN            *BufferSize,
     78   OUT VOID                *Buffer
     79   );
     80 
     81 /**
     82   Writes to the tape.
     83 
     84   @param  This       A pointer to the EFI_TAPE_IO_PROTOCOL instance.
     85   @param  BufferSize Size of the buffer in bytes pointed to by Buffer.
     86   @param  Buffer     The pointer to the buffer for data to be written from.
     87 
     88   @retval EFI_SUCCESS           Data was successfully transferred to the media.
     89   @retval EFI_END_OF_MEDIA      The logical end of media has been reached. Data may have
     90                                 been successfully transferred to the media.
     91   @retval EFI_NO_MEDIA          No media is loaded in the device.
     92   @retval EFI_NOT_READY         The transfer failed since the device was not ready (e.g. not
     93                                 online). The transfer may be retried at a later time.
     94   @retval EFI_UNSUPPORTED       The device does not support this type of transfer.
     95   @retval EFI_TIMEOUT           The transfer failed to complete within the timeout specified.
     96   @retval EFI_MEDIA_CHANGED     The media in the device was changed since the last access.
     97                                 The transfer was aborted since the current position of the
     98                                 media may be incorrect.
     99   @retval EFI_WRITE_PROTECTED   The media in the device is write-protected. The transfer
    100                                 was aborted since a write cannot be completed.
    101   @retval EFI_INVALID_PARAMETER A NULL Buffer was specified with a non-zero
    102                                 BufferSize, or the device is operating in fixed block
    103                                 size mode and the BufferSize was not a multiple of
    104                                 device's fixed block size
    105   @retval EFI_DEVICE_ERROR      A device error occurred while attempting to transfer data
    106                                 from the media.
    107 
    108 **/
    109 typedef
    110 EFI_STATUS
    111 (EFIAPI *EFI_TAPE_WRITE)(
    112   IN EFI_TAPE_IO_PROTOCOL *This,
    113   IN UINTN                *BufferSize,
    114   IN VOID                 *Buffer
    115   );
    116 
    117 
    118 /**
    119   Rewinds the tape.
    120 
    121   @param  This A pointer to the EFI_TAPE_IO_PROTOCOL instance.
    122 
    123   @retval EFI_SUCCESS      The media was successfully repositioned.
    124   @retval EFI_NO_MEDIA     No media is loaded in the device.
    125   @retval EFI_NOT_READY    Repositioning the media failed since the device was not
    126                            ready (e.g. not online). The transfer may be retried at a later time.
    127   @retval EFI_UNSUPPORTED  The device does not support this type of media repositioning.
    128   @retval EFI_TIMEOUT      Repositioning of the media did not complete within the timeout specified.
    129   @retval EFI_DEVICE_ERROR A device error occurred while attempting to reposition the media.
    130 
    131 **/
    132 typedef
    133 EFI_STATUS
    134 (EFIAPI *EFI_TAPE_REWIND)(
    135   IN EFI_TAPE_IO_PROTOCOL *This
    136   );
    137 
    138 
    139 /**
    140   Positions the tape.
    141 
    142   @param  This      A pointer to the EFI_TAPE_IO_PROTOCOL instance.
    143   @param  Direction Direction and number of data blocks or filemarks to space over on media.
    144   @param  Type      Type of mark to space over on media.
    145                     The following Type marks are mandatory:
    146                     BLOCK type    : 0
    147                     FILEMARK type : 1
    148 
    149   @retval EFI_SUCCESS       The media was successfully repositioned.
    150   @retval EFI_END_OF_MEDIA  Beginning or end of media was reached before the
    151                             indicated number of data blocks or filemarks were found.
    152   @retval EFI_NO_MEDIA      No media is loaded in the device.
    153   @retval EFI_NOT_READY     The reposition failed since the device was not ready (e.g. not
    154                             online). The reposition may be retried at a later time.
    155   @retval EFI_UNSUPPORTED   The device does not support this type of repositioning.
    156   @retval EFI_TIMEOUT       The repositioning failed to complete within the timeout specified.
    157   @retval EFI_MEDIA_CHANGED The media in the device was changed since the last access.
    158                             Repositioning the media was aborted since the current
    159                             position of the media may be incorrect.
    160   @retval EFI_DEVICE_ERROR  A device error occurred while attempting to reposition the media.
    161 
    162 **/
    163 typedef
    164 EFI_STATUS
    165 (EFIAPI *EFI_TAPE_SPACE)(
    166   IN EFI_TAPE_IO_PROTOCOL *This,
    167   IN INTN                 Direction,
    168   IN UINTN                Type
    169   );
    170 
    171 
    172 /**
    173   Writes filemarks to the media.
    174 
    175   @param  This  A pointer to the EFI_TAPE_IO_PROTOCOL instance.
    176   @param  Count Number of filemarks to write to the media.
    177 
    178   @retval EFI_SUCCESS       Data was successfully transferred from the media.
    179   @retval EFI_NO_MEDIA      No media is loaded in the device.
    180   @retval EFI_NOT_READY     The transfer failed since the device was not ready (e.g. not
    181                             online). The transfer may be retried at a later time.
    182   @retval EFI_UNSUPPORTED   The device does not support this type of repositioning.
    183   @retval EFI_TIMEOUT       The transfer failed to complete within the timeout specified.
    184   @retval EFI_MEDIA_CHANGED The media in the device was changed since the last access.
    185                             The transfer was aborted since the current position of the
    186                             media may be incorrect.
    187   @retval EFI_DEVICE_ERROR  A device error occurred while attempting to transfer data from the media.
    188 
    189 **/
    190 typedef
    191 EFI_STATUS
    192 (EFIAPI *EFI_TAPE_WRITEFM)(
    193   IN EFI_TAPE_IO_PROTOCOL *This,
    194   IN UINTN                Count
    195   );
    196 
    197 
    198 /**
    199   Resets the tape device.
    200 
    201   @param  This                 A pointer to the EFI_TAPE_IO_PROTOCOL instance.
    202   @param  ExtendedVerification Indicates whether the parent bus should also be reset.
    203 
    204   @retval  EFI_SUCCESS      The bus and/or device were successfully reset.
    205   @retval  EFI_NO_MEDIA     No media is loaded in the device.
    206   @retval  EFI_NOT_READY    The reset failed since the device and/or bus was not ready.
    207                             The reset may be retried at a later time.
    208   @retval  EFI_UNSUPPORTED  The device does not support this type of reset.
    209   @retval  EFI_TIMEOUT      The reset did not complete within the timeout allowed.
    210   @retval  EFI_DEVICE_ERROR A device error occurred while attempting to reset the bus and/or device.
    211 
    212 **/
    213 typedef
    214 EFI_STATUS
    215 (EFIAPI *EFI_TAPE_RESET)(
    216   IN EFI_TAPE_IO_PROTOCOL *This,
    217   IN BOOLEAN              ExtendedVerification
    218   );
    219 
    220 ///
    221 /// The EFI_TAPE_IO_PROTOCOL provides basic sequential operations for tape devices.
    222 /// These include read, write, rewind, space, write filemarks and reset functions.
    223 /// Per this specification, a boot application uses the services of this protocol
    224 /// to load the bootloader image from tape.
    225 ///
    226 struct _EFI_TAPE_IO_PROTOCOL {
    227   EFI_TAPE_READ           TapeRead;
    228   EFI_TAPE_WRITE          TapeWrite;
    229   EFI_TAPE_REWIND         TapeRewind;
    230   EFI_TAPE_SPACE          TapeSpace;
    231   EFI_TAPE_WRITEFM        TapeWriteFM;
    232   EFI_TAPE_RESET          TapeReset;
    233 };
    234 
    235 extern EFI_GUID gEfiTapeIoProtocolGuid;
    236 
    237 #endif
    238