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