--- /dev/null
+/** @file\r
+ EFI_TAPE_IO_PROTOCOL as defined in the UEFI 2.0.\r
+ Provide services to control and access a tape device.\r
+\r
+ Copyright (c) 2006, Intel Corporation \r
+ All rights reserved. This program and the accompanying materials \r
+ are licensed and made available under the terms and conditions of the BSD License \r
+ which accompanies this distribution. The full text of the license may be found at \r
+ http://opensource.org/licenses/bsd-license.php \r
+\r
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+\r
+ Module Name: TapeIo.h\r
+\r
+**/\r
+\r
+#ifndef __EFI_TAPE_IO_PROTOCOL_H__\r
+#define __EFI_TAPE_IO_PROTOCOL_H__\r
+\r
+#define EFI_TAPE_IO_PROTOCOL_GUID \\r
+ { \\r
+ 0x1e93e633, 0xd65a, 0x459e, {0xab, 0x84, 0x93, 0xd9, 0xec, 0x26, 0x6d, 0x18 } \\r
+ }\r
+\r
+typedef struct _EFI_TAPE_IO_PROTOCOL EFI_TAPE_IO_PROTOCOL;\r
+\r
+typedef struct {\r
+ UINT64 Signature;\r
+ UINT32 Revision;\r
+ UINT32 BootDescSize;\r
+ UINT32 BootDescCRC;\r
+ EFI_GUID TapeGUID;\r
+ EFI_GUID TapeType;\r
+ EFI_GUID TapeUnique;\r
+ UINT32 BLLocation;\r
+ UINT32 BLBlocksize;\r
+ UINT32 BLFilesize;\r
+ CHAR8 OSVersion[40];\r
+ CHAR8 AppVersion[40];\r
+ CHAR8 CreationDate[10];\r
+ CHAR8 CreationTime[10];\r
+ CHAR8 SystemName[256]; // UTF-8\r
+ CHAR8 TapeTitle[120]; // UTF-8\r
+ CHAR8 pad[468]; // pad to 1024\r
+} TAPE_HEADER;\r
+\r
+/**\r
+ Reads from the tape.\r
+\r
+ @param This A pointer to the EFI_TAPE_IO_PROTOCOL instance.\r
+ @param BufferSize Size of the buffer in bytes pointed to by Buffer.\r
+ @param Buffer Pointer to the buffer for data to be read into.\r
+\r
+ @retval EFI_SUCCESS Data was successfully transferred from the media.\r
+ @retval EFI_END_OF_FILE A filemark was encountered which limited the data\r
+ transferred by the read operation or the head is positioned\r
+ just after a filemark.\r
+ @retval EFI_NO_MEDIA No media is loaded in the device.\r
+ @retval EFI_NOT_READY The transfer failed since the device was not ready (e.g. not\r
+ online). The transfer may be retried at a later time.\r
+ @retval EFI_UNSUPPORTED The device does not support this type of transfer.\r
+ @retval EFI_TIMEOUT The transfer failed to complete within the timeout specified.\r
+ @retval EFI_MEDIA_CHANGED The media in the device was changed since the last access.\r
+ The transfer was aborted since the current position of the\r
+ media may be incorrect.\r
+ @retval EFI_INVALID_PARAMETER A NULL Buffer was specified with a non-zero\r
+ BufferSize or the device is operating in fixed block\r
+ size mode and the BufferSize was not a multiple of\r
+ device's fixed block size\r
+ @retval EFI_DEVICE_ERROR A device error occurred while attempting to transfer data\r
+ from the media.\r
+\r
+**/\r
+typedef \r
+EFI_STATUS\r
+(EFIAPI *EFI_TAPE_READ) (\r
+ IN EFI_TAPE_IO_PROTOCOL *This,\r
+ IN OUT UINTN *BufferSize,\r
+ OUT VOID *Buffer\r
+ )\r
+; \r
+\r
+/**\r
+ Writes to the tape.\r
+\r
+ @param This A pointer to the EFI_TAPE_IO_PROTOCOL instance.\r
+ @param BufferSize Size of the buffer in bytes pointed to by Buffer.\r
+ @param Buffer Pointer to the buffer for data to be written from.\r
+\r
+ @retval EFI_SUCCESS Data was successfully transferred to the media.\r
+ @retval EFI_END_OF_MEDIA The logical end of media has been reached. Data may have\r
+ been successfully transferred to the media.\r
+ @retval EFI_NO_MEDIA No media is loaded in the device.\r
+ @retval EFI_NOT_READY The transfer failed since the device was not ready (e.g. not\r
+ online). The transfer may be retried at a later time.\r
+ @retval EFI_UNSUPPORTED The device does not support this type of transfer.\r
+ @retval EFI_TIMEOUT The transfer failed to complete within the timeout specified.\r
+ @retval EFI_MEDIA_CHANGED The media in the device was changed since the last access.\r
+ The transfer was aborted since the current position of the\r
+ media may be incorrect.\r
+ @retval EFI_WRITE_PROTECTED The media in the device is write-protected. The transfer\r
+ was aborted since a write cannot be completed.\r
+ @retval EFI_INVALID_PARAMETER A NULL Buffer was specified with a non-zero\r
+ BufferSize or the device is operating in fixed block\r
+ size mode and the BufferSize was not a multiple of\r
+ device's fixed block size\r
+ @retval EFI_DEVICE_ERROR A device error occurred while attempting to transfer data\r
+ from the media.\r
+\r
+**/\r
+typedef \r
+EFI_STATUS\r
+(EFIAPI *EFI_TAPE_WRITE) (\r
+ IN EFI_TAPE_IO_PROTOCOL *This,\r
+ IN UINTN *BufferSize,\r
+ IN VOID *Buffer\r
+ )\r
+; \r
+ \r
+\r
+/**\r
+ Rewinds the tape.\r
+\r
+ @param This A pointer to the EFI_TAPE_IO_PROTOCOL instance.\r
+\r
+ @retval EFI_SUCCESS The media was successfully repositioned.\r
+ @retval EFI_NO_MEDIA No media is loaded in the device.\r
+ @retval EFI_NOT_READY Repositioning the media failed since the device was not\r
+ ready (e.g. not online). The transfer may be retried at a later time.\r
+ @retval EFI_UNSUPPORTED The device does not support this type of media repositioning.\r
+ @retval EFI_TIMEOUT Repositioning of the media did not complete within the timeout specified.\r
+ @retval EFI_DEVICE_ERROR A device error occurred while attempting to reposition the media.\r
+\r
+**/\r
+typedef \r
+EFI_STATUS\r
+(EFIAPI *EFI_TAPE_REWIND) (\r
+ IN EFI_TAPE_IO_PROTOCOL *This\r
+ )\r
+; \r
+\r
+\r
+/**\r
+ Positions the tape.\r
+\r
+ @param This A pointer to the EFI_TAPE_IO_PROTOCOL instance.\r
+ @param Direction Direction and number of data blocks or filemarks to space over on media.\r
+ @param Type Type of mark to space over on media.\r
+\r
+ @retval EFI_SUCCESS The media was successfully repositioned.\r
+ @retval EFI_END_OF_MEDIA Beginning or end of media was reached before the\r
+ indicated number of data blocks or filemarks were found.\r
+ @retval EFI_NO_MEDIA No media is loaded in the device.\r
+ @retval EFI_NOT_READY The reposition failed since the device was not ready (e.g. not\r
+ online). The reposition may be retried at a later time.\r
+ @retval EFI_UNSUPPORTED The device does not support this type of repositioning.\r
+ @retval EFI_TIMEOUT The repositioning failed to complete within the timeout specified.\r
+ @retval EFI_MEDIA_CHANGED The media in the device was changed since the last access.\r
+ Repositioning the media was aborted since the current\r
+ position of the media may be incorrect.\r
+ @retval EFI_DEVICE_ERROR A device error occurred while attempting to reposition the media.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_TAPE_SPACE) (\r
+ IN EFI_TAPE_IO_PROTOCOL *This,\r
+ INTN Direction,\r
+ UINTN Type\r
+ )\r
+; \r
+\r
+\r
+/**\r
+ Writes filemarks to the media.\r
+\r
+ @param This A pointer to the EFI_TAPE_IO_PROTOCOL instance.\r
+ @param Count Number of filemarks to write to the media.\r
+\r
+ @retval EFI_SUCCESS Data was successfully transferred from the media.\r
+ @retval EFI_NO_MEDIA No media is loaded in the device.\r
+ @retval EFI_NOT_READY The transfer failed since the device was not ready (e.g. not\r
+ online). The transfer may be retried at a later time.\r
+ @retval EFI_UNSUPPORTED The device does not support this type of repositioning.\r
+ @retval EFI_TIMEOUT The transfer failed to complete within the timeout specified.\r
+ @retval EFI_MEDIA_CHANGED The media in the device was changed since the last access.\r
+ The transfer was aborted since the current position of the\r
+ media may be incorrect.\r
+ @retval EFI_DEVICE_ERROR A device error occurred while attempting to transfer data from the media.\r
+\r
+**/\r
+typedef \r
+EFI_STATUS\r
+(EFIAPI *EFI_TAPE_WRITEFM) (\r
+ IN EFI_TAPE_IO_PROTOCOL *This,\r
+ IN UINTN Count\r
+ )\r
+; \r
+\r
+\r
+/**\r
+ Resets the tape device.\r
+\r
+ @param This A pointer to the EFI_TAPE_IO_PROTOCOL instance.\r
+ @param ExtendedVerification Indicates whether the parent bus should also be reset.\r
+\r
+ @retval EFI_SUCCESS The bus and/or device were successfully reset.\r
+ @retval EFI_NO_MEDIA No media is loaded in the device.\r
+ @retval EFI_NOT_READY The reset failed since the device and/or bus was not ready.\r
+ The reset may be retried at a later time.\r
+ @retval EFI_UNSUPPORTED The device does not support this type of reset.\r
+ @retval EFI_TIMEOUT The reset did not complete within the timeout allowed.\r
+ @retval EFI_DEVICE_ERROR A device error occurred while attempting to reset the bus and/or device.\r
+\r
+**/\r
+typedef \r
+EFI_STATUS\r
+(EFIAPI *EFI_TAPE_RESET) (\r
+ IN EFI_TAPE_IO_PROTOCOL *This,\r
+ IN BOOLEAN ExtendedVerification\r
+ )\r
+; \r
+\r
+struct _EFI_TAPE_IO_PROTOCOL {\r
+ EFI_TAPE_READ TapeRead;\r
+ EFI_TAPE_WRITE TapeWrite;\r
+ EFI_TAPE_REWIND TapeRewind;\r
+ EFI_TAPE_SPACE TapeSpace;\r
+ EFI_TAPE_WRITEFM TapeWriteFM;\r
+ EFI_TAPE_RESET TapeReset;\r
+};\r
+\r
+extern EFI_GUID gEfiTapeIoProtocolGuid;\r
+\r
+#endif\r