Embed:
(wiki syntax)
Show/hide line numbers
minitape.h
00001 /* 00002 * minitape.h 00003 * 00004 * Minitape driver interface 00005 * 00006 * This file is part of the w32api package. 00007 * 00008 * Contributors: 00009 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net> 00010 * 00011 * THIS SOFTWARE IS NOT COPYRIGHTED 00012 * 00013 * This source code is offered for use in the public domain. You may 00014 * use, modify or distribute it freely. 00015 * 00016 * This code is distributed in the hope that it will be useful but 00017 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY 00018 * DISCLAIMED. This includes but is not limited to warranties of 00019 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00020 * 00021 */ 00022 #ifndef __MINITAPE_H 00023 #define __MINITAPE_H 00024 00025 #if __GNUC__ >=3 00026 #pragma GCC system_header 00027 #endif 00028 00029 #ifdef __cplusplus 00030 extern "C" { 00031 #endif 00032 00033 #pragma pack(push,4) 00034 00035 #include "ntddk.h" 00036 00037 #define MEDIA_ERASEABLE 0x00000001 00038 #define MEDIA_WRITE_ONCE 0x00000002 00039 #define MEDIA_READ_ONLY 0x00000004 00040 #define MEDIA_READ_WRITE 0x00000008 00041 #define MEDIA_WRITE_PROTECTED 0x00000100 00042 #define MEDIA_CURRENTLY_MOUNTED 0x80000000 00043 00044 typedef enum _TAPE_STATUS { 00045 TAPE_STATUS_SEND_SRB_AND_CALLBACK, 00046 TAPE_STATUS_CALLBACK, 00047 TAPE_STATUS_CHECK_TEST_UNIT_READY, 00048 TAPE_STATUS_SUCCESS, 00049 TAPE_STATUS_INSUFFICIENT_RESOURCES, 00050 TAPE_STATUS_NOT_IMPLEMENTED, 00051 TAPE_STATUS_INVALID_DEVICE_REQUEST, 00052 TAPE_STATUS_INVALID_PARAMETER, 00053 TAPE_STATUS_MEDIA_CHANGED, 00054 TAPE_STATUS_BUS_RESET, 00055 TAPE_STATUS_SETMARK_DETECTED, 00056 TAPE_STATUS_FILEMARK_DETECTED, 00057 TAPE_STATUS_BEGINNING_OF_MEDIA, 00058 TAPE_STATUS_END_OF_MEDIA, 00059 TAPE_STATUS_BUFFER_OVERFLOW, 00060 TAPE_STATUS_NO_DATA_DETECTED, 00061 TAPE_STATUS_EOM_OVERFLOW, 00062 TAPE_STATUS_NO_MEDIA, 00063 TAPE_STATUS_IO_DEVICE_ERROR, 00064 TAPE_STATUS_UNRECOGNIZED_MEDIA, 00065 TAPE_STATUS_DEVICE_NOT_READY, 00066 TAPE_STATUS_MEDIA_WRITE_PROTECTED, 00067 TAPE_STATUS_DEVICE_DATA_ERROR, 00068 TAPE_STATUS_NO_SUCH_DEVICE, 00069 TAPE_STATUS_INVALID_BLOCK_LENGTH, 00070 TAPE_STATUS_IO_TIMEOUT, 00071 TAPE_STATUS_DEVICE_NOT_CONNECTED, 00072 TAPE_STATUS_DATA_OVERRUN, 00073 TAPE_STATUS_DEVICE_BUSY, 00074 TAPE_STATUS_REQUIRES_CLEANING, 00075 TAPE_STATUS_CLEANER_CARTRIDGE_INSTALLED 00076 } TAPE_STATUS, *PTAPE_STATUS; 00077 00078 #define INQUIRYDATABUFFERSIZE 36 00079 #ifndef _INQUIRYDATA_DEFINED /* also in scsi.h */ 00080 #define _INQUIRYDATA_DEFINED 00081 typedef struct _INQUIRYDATA { 00082 UCHAR DeviceType : 5; 00083 UCHAR DeviceTypeQualifier : 3; 00084 UCHAR DeviceTypeModifier : 7; 00085 UCHAR RemovableMedia : 1; 00086 union { 00087 UCHAR Versions; 00088 struct { 00089 UCHAR ANSIVersion : 3; 00090 UCHAR ECMAVersion : 3; 00091 UCHAR ISOVersion : 2; 00092 }; 00093 }; 00094 UCHAR ResponseDataFormat : 4; 00095 UCHAR HiSupport : 1; 00096 UCHAR NormACA : 1; 00097 UCHAR TerminateTask : 1; 00098 UCHAR AERC : 1; 00099 UCHAR AdditionalLength; 00100 UCHAR Reserved; 00101 UCHAR Addr16 : 1; 00102 UCHAR Addr32 : 1; 00103 UCHAR AckReqQ: 1; 00104 UCHAR MediumChanger : 1; 00105 UCHAR MultiPort : 1; 00106 UCHAR ReservedBit2 : 1; 00107 UCHAR EnclosureServices : 1; 00108 UCHAR ReservedBit3 : 1; 00109 UCHAR SoftReset : 1; 00110 UCHAR CommandQueue : 1; 00111 UCHAR TransferDisable : 1; 00112 UCHAR LinkedCommands : 1; 00113 UCHAR Synchronous : 1; 00114 UCHAR Wide16Bit : 1; 00115 UCHAR Wide32Bit : 1; 00116 UCHAR RelativeAddressing : 1; 00117 UCHAR VendorId[8]; 00118 UCHAR ProductId[16]; 00119 UCHAR ProductRevisionLevel[4]; 00120 UCHAR VendorSpecific[20]; 00121 UCHAR Reserved3[40]; 00122 } INQUIRYDATA, *PINQUIRYDATA; 00123 #endif 00124 00125 typedef struct _MODE_CAPABILITIES_PAGE { 00126 UCHAR PageCode : 6; 00127 UCHAR Reserved1 : 2; 00128 UCHAR PageLength; 00129 UCHAR Reserved2[2]; 00130 UCHAR RO : 1; 00131 UCHAR Reserved3 : 4; 00132 UCHAR SPREV : 1; 00133 UCHAR Reserved4 : 2; 00134 UCHAR Reserved5 : 3; 00135 UCHAR EFMT : 1; 00136 UCHAR Reserved6 : 1; 00137 UCHAR QFA : 1; 00138 UCHAR Reserved7 : 2; 00139 UCHAR LOCK : 1; 00140 UCHAR LOCKED : 1; 00141 UCHAR PREVENT : 1; 00142 UCHAR UNLOAD : 1; 00143 UCHAR Reserved8 : 2; 00144 UCHAR ECC : 1; 00145 UCHAR CMPRS : 1; 00146 UCHAR Reserved9 : 1; 00147 UCHAR BLK512 : 1; 00148 UCHAR BLK1024 : 1; 00149 UCHAR Reserved10 : 4; 00150 UCHAR SLOWB : 1; 00151 UCHAR MaximumSpeedSupported[2]; 00152 UCHAR MaximumStoredDefectedListEntries[2]; 00153 UCHAR ContinuousTransferLimit[2]; 00154 UCHAR CurrentSpeedSelected[2]; 00155 UCHAR BufferSize[2]; 00156 UCHAR Reserved11[2]; 00157 } MODE_CAPABILITIES_PAGE, *PMODE_CAPABILITIES_PAGE; 00158 00159 typedef BOOLEAN DDKAPI 00160 (*TAPE_VERIFY_INQUIRY_ROUTINE)( 00161 /*IN*/ PINQUIRYDATA InquiryData, 00162 /*IN*/ PMODE_CAPABILITIES_PAGE ModeCapabilitiesPage); 00163 00164 typedef VOID DDKAPI 00165 (*TAPE_EXTENSION_INIT_ROUTINE)( 00166 /*IN*/ PVOID MinitapeExtension, 00167 /*IN*/ PINQUIRYDATA InquiryData, 00168 /*IN*/ PMODE_CAPABILITIES_PAGE ModeCapabilitiesPage); 00169 00170 typedef VOID DDKAPI 00171 (*TAPE_ERROR_ROUTINE)( 00172 /*IN*/ PVOID MinitapeExtension, 00173 /*IN*/ PSCSI_REQUEST_BLOCK Srb, 00174 /*IN OUT*/ PTAPE_STATUS TapeStatus); 00175 00176 typedef TAPE_STATUS DDKAPI 00177 (*TAPE_PROCESS_COMMAND_ROUTINE)( 00178 /*IN OUT*/ PVOID MinitapeExtension, 00179 /*IN OUT*/ PVOID CommandExtension, 00180 /*IN OUT*/ PVOID CommandParameters, 00181 /*IN OUT*/ PSCSI_REQUEST_BLOCK Srb, 00182 /*IN*/ ULONG CallNumber, 00183 /*IN*/ TAPE_STATUS StatusOfLastCommand, 00184 /*IN OUT*/ PULONG RetryFlags); 00185 00186 #define TAPE_RETRY_MASK 0x0000FFFF 00187 #define IGNORE_ERRORS 0x00010000 00188 #define RETURN_ERRORS 0x00020000 00189 00190 typedef struct _TAPE_INIT_DATA { 00191 TAPE_VERIFY_INQUIRY_ROUTINE VerifyInquiry; 00192 BOOLEAN QueryModeCapabilitiesPage; 00193 ULONG MinitapeExtensionSize; 00194 TAPE_EXTENSION_INIT_ROUTINE ExtensionInit; 00195 ULONG DefaultTimeOutValue; 00196 TAPE_ERROR_ROUTINE TapeError; 00197 ULONG CommandExtensionSize; 00198 TAPE_PROCESS_COMMAND_ROUTINE CreatePartition; 00199 TAPE_PROCESS_COMMAND_ROUTINE Erase; 00200 TAPE_PROCESS_COMMAND_ROUTINE GetDriveParameters; 00201 TAPE_PROCESS_COMMAND_ROUTINE GetMediaParameters; 00202 TAPE_PROCESS_COMMAND_ROUTINE GetPosition; 00203 TAPE_PROCESS_COMMAND_ROUTINE GetStatus; 00204 TAPE_PROCESS_COMMAND_ROUTINE Prepare; 00205 TAPE_PROCESS_COMMAND_ROUTINE SetDriveParameters; 00206 TAPE_PROCESS_COMMAND_ROUTINE SetMediaParameters; 00207 TAPE_PROCESS_COMMAND_ROUTINE SetPosition; 00208 TAPE_PROCESS_COMMAND_ROUTINE WriteMarks; 00209 TAPE_PROCESS_COMMAND_ROUTINE PreProcessReadWrite /* OPTIONAL */; 00210 } TAPE_INIT_DATA, *PTAPE_INIT_DATA; 00211 00212 typedef struct _TAPE_PHYS_POSITION { 00213 ULONG SeekBlockAddress; 00214 ULONG SpaceBlockCount; 00215 } TAPE_PHYS_POSITION, PTAPE_PHYS_POSITION; 00216 00217 #pragma pack(pop) 00218 00219 #ifdef __cplusplus 00220 } 00221 #endif 00222 00223 #endif /* __MINITAPE_H */
Generated on Tue Jul 12 2022 19:59:54 by
1.7.2