holdingarea/llvm/llvm-gcc4.2-2.7-x86-mingw32/include/ddk/minitape.h
branchbug235_bringup_0
changeset 20 d2d6724aef32
equal deleted inserted replaced
19:da7c1a80df0d 20:d2d6724aef32
       
     1 /*
       
     2  * minitape.h
       
     3  *
       
     4  * Minitape driver interface
       
     5  *
       
     6  * This file is part of the w32api package.
       
     7  *
       
     8  * Contributors:
       
     9  *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
       
    10  *
       
    11  * THIS SOFTWARE IS NOT COPYRIGHTED
       
    12  *
       
    13  * This source code is offered for use in the public domain. You may
       
    14  * use, modify or distribute it freely.
       
    15  *
       
    16  * This code is distributed in the hope that it will be useful but
       
    17  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
       
    18  * DISCLAIMED. This includes but is not limited to warranties of
       
    19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
       
    20  *
       
    21  */
       
    22 #ifndef __MINITAPE_H
       
    23 #define __MINITAPE_H
       
    24 
       
    25 #if __GNUC__ >=3
       
    26 #pragma GCC system_header
       
    27 #endif
       
    28 
       
    29 #ifdef __cplusplus
       
    30 extern "C" {
       
    31 #endif
       
    32 
       
    33 #pragma pack(push,4)
       
    34 
       
    35 #include "ntddk.h"
       
    36 
       
    37 #define MEDIA_ERASEABLE                   0x00000001
       
    38 #define MEDIA_WRITE_ONCE                  0x00000002
       
    39 #define MEDIA_READ_ONLY                   0x00000004
       
    40 #define MEDIA_READ_WRITE                  0x00000008
       
    41 #define MEDIA_WRITE_PROTECTED             0x00000100
       
    42 #define MEDIA_CURRENTLY_MOUNTED           0x80000000
       
    43 
       
    44 typedef enum _TAPE_STATUS {
       
    45 	TAPE_STATUS_SEND_SRB_AND_CALLBACK,
       
    46 	TAPE_STATUS_CALLBACK,
       
    47 	TAPE_STATUS_CHECK_TEST_UNIT_READY,
       
    48 	TAPE_STATUS_SUCCESS,
       
    49 	TAPE_STATUS_INSUFFICIENT_RESOURCES,
       
    50 	TAPE_STATUS_NOT_IMPLEMENTED,
       
    51 	TAPE_STATUS_INVALID_DEVICE_REQUEST,
       
    52 	TAPE_STATUS_INVALID_PARAMETER,	
       
    53 	TAPE_STATUS_MEDIA_CHANGED,
       
    54 	TAPE_STATUS_BUS_RESET,
       
    55 	TAPE_STATUS_SETMARK_DETECTED,
       
    56 	TAPE_STATUS_FILEMARK_DETECTED,
       
    57 	TAPE_STATUS_BEGINNING_OF_MEDIA,
       
    58 	TAPE_STATUS_END_OF_MEDIA,
       
    59 	TAPE_STATUS_BUFFER_OVERFLOW,
       
    60 	TAPE_STATUS_NO_DATA_DETECTED,
       
    61 	TAPE_STATUS_EOM_OVERFLOW,
       
    62 	TAPE_STATUS_NO_MEDIA,
       
    63 	TAPE_STATUS_IO_DEVICE_ERROR,
       
    64 	TAPE_STATUS_UNRECOGNIZED_MEDIA,
       
    65 	TAPE_STATUS_DEVICE_NOT_READY,
       
    66 	TAPE_STATUS_MEDIA_WRITE_PROTECTED,
       
    67 	TAPE_STATUS_DEVICE_DATA_ERROR,
       
    68 	TAPE_STATUS_NO_SUCH_DEVICE,
       
    69 	TAPE_STATUS_INVALID_BLOCK_LENGTH,
       
    70 	TAPE_STATUS_IO_TIMEOUT,
       
    71 	TAPE_STATUS_DEVICE_NOT_CONNECTED,
       
    72 	TAPE_STATUS_DATA_OVERRUN,
       
    73 	TAPE_STATUS_DEVICE_BUSY,
       
    74 	TAPE_STATUS_REQUIRES_CLEANING,
       
    75 	TAPE_STATUS_CLEANER_CARTRIDGE_INSTALLED
       
    76 } TAPE_STATUS, *PTAPE_STATUS;
       
    77 
       
    78 #define INQUIRYDATABUFFERSIZE 36
       
    79 #ifndef _INQUIRYDATA_DEFINED /* also in scsi.h */
       
    80 #define _INQUIRYDATA_DEFINED
       
    81 typedef struct _INQUIRYDATA {
       
    82 	UCHAR  DeviceType : 5;
       
    83 	UCHAR  DeviceTypeQualifier : 3;
       
    84 	UCHAR  DeviceTypeModifier : 7;
       
    85 	UCHAR  RemovableMedia : 1;
       
    86 	union {
       
    87 		UCHAR  Versions;
       
    88 		struct {
       
    89 			UCHAR  ANSIVersion : 3;
       
    90 			UCHAR  ECMAVersion : 3;
       
    91 			UCHAR  ISOVersion : 2;
       
    92 		};
       
    93 	};
       
    94 	UCHAR  ResponseDataFormat : 4;
       
    95 	UCHAR  HiSupport : 1;
       
    96 	UCHAR  NormACA : 1;
       
    97 	UCHAR  TerminateTask : 1;
       
    98 	UCHAR  AERC : 1;
       
    99 	UCHAR  AdditionalLength;
       
   100 	UCHAR  Reserved;
       
   101 	UCHAR  Addr16 : 1;
       
   102 	UCHAR  Addr32 : 1;
       
   103 	UCHAR  AckReqQ: 1;
       
   104 	UCHAR  MediumChanger : 1;
       
   105 	UCHAR  MultiPort : 1;
       
   106 	UCHAR  ReservedBit2 : 1;
       
   107 	UCHAR  EnclosureServices : 1;
       
   108 	UCHAR  ReservedBit3 : 1;
       
   109 	UCHAR  SoftReset : 1;
       
   110 	UCHAR  CommandQueue : 1;
       
   111 	UCHAR  TransferDisable : 1;
       
   112 	UCHAR  LinkedCommands : 1;
       
   113 	UCHAR  Synchronous : 1;
       
   114 	UCHAR  Wide16Bit : 1;
       
   115 	UCHAR  Wide32Bit : 1;
       
   116 	UCHAR  RelativeAddressing : 1;
       
   117 	UCHAR  VendorId[8];
       
   118 	UCHAR  ProductId[16];
       
   119 	UCHAR  ProductRevisionLevel[4];
       
   120 	UCHAR  VendorSpecific[20];
       
   121 	UCHAR  Reserved3[40];
       
   122 } INQUIRYDATA, *PINQUIRYDATA;
       
   123 #endif
       
   124 
       
   125 typedef struct _MODE_CAPABILITIES_PAGE {
       
   126 	UCHAR PageCode : 6;
       
   127 	UCHAR Reserved1 : 2;
       
   128 	UCHAR PageLength;
       
   129 	UCHAR Reserved2[2];
       
   130 	UCHAR RO : 1;
       
   131 	UCHAR Reserved3 : 4;
       
   132 	UCHAR SPREV : 1;
       
   133 	UCHAR Reserved4 : 2;
       
   134 	UCHAR Reserved5 : 3;
       
   135 	UCHAR EFMT : 1;
       
   136 	UCHAR Reserved6 : 1;
       
   137 	UCHAR QFA : 1;
       
   138 	UCHAR Reserved7 : 2;
       
   139 	UCHAR LOCK : 1;
       
   140 	UCHAR LOCKED : 1;
       
   141 	UCHAR PREVENT : 1;
       
   142 	UCHAR UNLOAD : 1;
       
   143 	UCHAR Reserved8 : 2;
       
   144 	UCHAR ECC : 1;
       
   145 	UCHAR CMPRS : 1;
       
   146 	UCHAR Reserved9 : 1;
       
   147 	UCHAR BLK512 : 1;
       
   148 	UCHAR BLK1024 : 1;
       
   149 	UCHAR Reserved10 : 4;
       
   150 	UCHAR SLOWB : 1;
       
   151 	UCHAR MaximumSpeedSupported[2];
       
   152 	UCHAR MaximumStoredDefectedListEntries[2];
       
   153 	UCHAR ContinuousTransferLimit[2];
       
   154 	UCHAR CurrentSpeedSelected[2];
       
   155 	UCHAR BufferSize[2];
       
   156 	UCHAR Reserved11[2];
       
   157 } MODE_CAPABILITIES_PAGE, *PMODE_CAPABILITIES_PAGE;
       
   158 
       
   159 typedef BOOLEAN DDKAPI
       
   160 (*TAPE_VERIFY_INQUIRY_ROUTINE)(
       
   161   /*IN*/ PINQUIRYDATA  InquiryData,
       
   162   /*IN*/ PMODE_CAPABILITIES_PAGE ModeCapabilitiesPage);
       
   163 
       
   164 typedef VOID DDKAPI
       
   165 (*TAPE_EXTENSION_INIT_ROUTINE)(
       
   166   /*IN*/ PVOID  MinitapeExtension,
       
   167   /*IN*/ PINQUIRYDATA  InquiryData,
       
   168   /*IN*/ PMODE_CAPABILITIES_PAGE  ModeCapabilitiesPage);
       
   169 
       
   170 typedef VOID DDKAPI
       
   171 (*TAPE_ERROR_ROUTINE)(
       
   172   /*IN*/ PVOID  MinitapeExtension,
       
   173   /*IN*/ PSCSI_REQUEST_BLOCK  Srb,
       
   174   /*IN OUT*/ PTAPE_STATUS  TapeStatus);
       
   175 
       
   176 typedef TAPE_STATUS DDKAPI
       
   177 (*TAPE_PROCESS_COMMAND_ROUTINE)(
       
   178   /*IN OUT*/ PVOID  MinitapeExtension,
       
   179   /*IN OUT*/ PVOID  CommandExtension,
       
   180   /*IN OUT*/ PVOID  CommandParameters,
       
   181   /*IN OUT*/ PSCSI_REQUEST_BLOCK  Srb,
       
   182   /*IN*/ ULONG  CallNumber,
       
   183   /*IN*/ TAPE_STATUS  StatusOfLastCommand,
       
   184   /*IN OUT*/ PULONG  RetryFlags);
       
   185 
       
   186 #define TAPE_RETRY_MASK                   0x0000FFFF
       
   187 #define IGNORE_ERRORS                     0x00010000
       
   188 #define RETURN_ERRORS                     0x00020000
       
   189 
       
   190 typedef struct _TAPE_INIT_DATA { 
       
   191   TAPE_VERIFY_INQUIRY_ROUTINE  VerifyInquiry;
       
   192   BOOLEAN  QueryModeCapabilitiesPage; 
       
   193   ULONG  MinitapeExtensionSize; 
       
   194   TAPE_EXTENSION_INIT_ROUTINE  ExtensionInit;
       
   195   ULONG  DefaultTimeOutValue;
       
   196   TAPE_ERROR_ROUTINE  TapeError;
       
   197   ULONG  CommandExtensionSize;
       
   198   TAPE_PROCESS_COMMAND_ROUTINE  CreatePartition; 
       
   199   TAPE_PROCESS_COMMAND_ROUTINE  Erase; 
       
   200   TAPE_PROCESS_COMMAND_ROUTINE  GetDriveParameters; 
       
   201   TAPE_PROCESS_COMMAND_ROUTINE  GetMediaParameters; 
       
   202   TAPE_PROCESS_COMMAND_ROUTINE  GetPosition; 
       
   203   TAPE_PROCESS_COMMAND_ROUTINE  GetStatus; 
       
   204   TAPE_PROCESS_COMMAND_ROUTINE  Prepare; 
       
   205   TAPE_PROCESS_COMMAND_ROUTINE  SetDriveParameters; 
       
   206   TAPE_PROCESS_COMMAND_ROUTINE  SetMediaParameters; 
       
   207   TAPE_PROCESS_COMMAND_ROUTINE  SetPosition; 
       
   208   TAPE_PROCESS_COMMAND_ROUTINE  WriteMarks; 
       
   209   TAPE_PROCESS_COMMAND_ROUTINE  PreProcessReadWrite /* OPTIONAL */;
       
   210 } TAPE_INIT_DATA, *PTAPE_INIT_DATA; 
       
   211 
       
   212 typedef struct _TAPE_PHYS_POSITION {
       
   213 	ULONG  SeekBlockAddress;
       
   214 	ULONG  SpaceBlockCount;
       
   215 } TAPE_PHYS_POSITION, PTAPE_PHYS_POSITION;
       
   216 
       
   217 #pragma pack(pop)
       
   218 
       
   219 #ifdef __cplusplus
       
   220 }
       
   221 #endif
       
   222 
       
   223 #endif /* __MINITAPE_H */