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