mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-11-04 02:40:26 +00:00 
			
		
		
		
	git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@3 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			237 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			237 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						||
  EFI_TAPE_IO_PROTOCOL as defined in the UEFI 2.0.
 | 
						||
  Provide services to control and access a tape device.
 | 
						||
 | 
						||
  Copyright (c) 2006, Intel Corporation                                                         
 | 
						||
  All rights reserved. This program and the accompanying materials                          
 | 
						||
  are licensed and made available under the terms and conditions of the BSD License         
 | 
						||
  which accompanies this distribution.  The full text of the license may be found at        
 | 
						||
  http://opensource.org/licenses/bsd-license.php                                            
 | 
						||
 | 
						||
  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     
 | 
						||
  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             
 | 
						||
 | 
						||
  Module Name:  TapeIo.h
 | 
						||
 | 
						||
**/
 | 
						||
 | 
						||
#ifndef __EFI_TAPE_IO_PROTOCOL_H__
 | 
						||
#define __EFI_TAPE_IO_PROTOCOL_H__
 | 
						||
 | 
						||
#define EFI_TAPE_IO_PROTOCOL_GUID \
 | 
						||
  { \
 | 
						||
    0x1e93e633, 0xd65a, 0x459e, {0xab, 0x84, 0x93, 0xd9, 0xec, 0x26, 0x6d, 0x18 } \
 | 
						||
  }
 | 
						||
 | 
						||
typedef struct _EFI_TAPE_IO_PROTOCOL EFI_TAPE_IO_PROTOCOL;
 | 
						||
 | 
						||
typedef struct {
 | 
						||
  UINT64     Signature;
 | 
						||
  UINT32     Revision;
 | 
						||
  UINT32     BootDescSize;
 | 
						||
  UINT32     BootDescCRC;
 | 
						||
  EFI_GUID   TapeGUID;
 | 
						||
  EFI_GUID   TapeType;
 | 
						||
  EFI_GUID   TapeUnique;
 | 
						||
  UINT32     BLLocation;
 | 
						||
  UINT32     BLBlocksize;
 | 
						||
  UINT32     BLFilesize;
 | 
						||
  CHAR8      OSVersion[40];
 | 
						||
  CHAR8      AppVersion[40];
 | 
						||
  CHAR8      CreationDate[10];
 | 
						||
  CHAR8      CreationTime[10];
 | 
						||
  CHAR8      SystemName[256];  // UTF-8
 | 
						||
  CHAR8      TapeTitle[120];   // UTF-8
 | 
						||
  CHAR8      pad[468];         // pad to 1024
 | 
						||
} TAPE_HEADER;
 | 
						||
 | 
						||
/**
 | 
						||
  Reads from 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     Pointer to the buffer for data to be read into.
 | 
						||
 | 
						||
  @retval EFI_SUCCESS           Data was successfully transferred from the media.
 | 
						||
  @retval EFI_END_OF_FILE       A filemark was encountered which limited the data
 | 
						||
                                transferred by the read operation or the head is positioned
 | 
						||
                                just after a filemark.
 | 
						||
  @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_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<63><65>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     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<63><65>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.
 | 
						||
 | 
						||
  @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,
 | 
						||
  INTN                    Direction,
 | 
						||
  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
 | 
						||
  )
 | 
						||
;    
 | 
						||
 | 
						||
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
 |