4 * Minitape driver interface
6 * This file is part of the w32api package.
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
11 * THIS SOFTWARE IS NOT COPYRIGHTED
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
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.
25 /* Helper macro to enable gcc's extension. */
26 #ifndef __GNU_EXTENSION
28 #define __GNU_EXTENSION __extension__
30 #define __GNU_EXTENSION
40 #define MEDIA_ERASEABLE 0x00000001
41 #define MEDIA_WRITE_ONCE 0x00000002
42 #define MEDIA_READ_ONLY 0x00000004
43 #define MEDIA_READ_WRITE 0x00000008
44 #define MEDIA_WRITE_PROTECTED 0x00000100
45 #define MEDIA_CURRENTLY_MOUNTED 0x80000000
47 typedef enum _TAPE_STATUS
{
48 TAPE_STATUS_SEND_SRB_AND_CALLBACK
,
50 TAPE_STATUS_CHECK_TEST_UNIT_READY
,
52 TAPE_STATUS_INSUFFICIENT_RESOURCES
,
53 TAPE_STATUS_NOT_IMPLEMENTED
,
54 TAPE_STATUS_INVALID_DEVICE_REQUEST
,
55 TAPE_STATUS_INVALID_PARAMETER
,
56 TAPE_STATUS_MEDIA_CHANGED
,
57 TAPE_STATUS_BUS_RESET
,
58 TAPE_STATUS_SETMARK_DETECTED
,
59 TAPE_STATUS_FILEMARK_DETECTED
,
60 TAPE_STATUS_BEGINNING_OF_MEDIA
,
61 TAPE_STATUS_END_OF_MEDIA
,
62 TAPE_STATUS_BUFFER_OVERFLOW
,
63 TAPE_STATUS_NO_DATA_DETECTED
,
64 TAPE_STATUS_EOM_OVERFLOW
,
66 TAPE_STATUS_IO_DEVICE_ERROR
,
67 TAPE_STATUS_UNRECOGNIZED_MEDIA
,
68 TAPE_STATUS_DEVICE_NOT_READY
,
69 TAPE_STATUS_MEDIA_WRITE_PROTECTED
,
70 TAPE_STATUS_DEVICE_DATA_ERROR
,
71 TAPE_STATUS_NO_SUCH_DEVICE
,
72 TAPE_STATUS_INVALID_BLOCK_LENGTH
,
73 TAPE_STATUS_IO_TIMEOUT
,
74 TAPE_STATUS_DEVICE_NOT_CONNECTED
,
75 TAPE_STATUS_DATA_OVERRUN
,
76 TAPE_STATUS_DEVICE_BUSY
,
77 TAPE_STATUS_REQUIRES_CLEANING
,
78 TAPE_STATUS_CLEANER_CARTRIDGE_INSTALLED
79 } TAPE_STATUS
, *PTAPE_STATUS
;
81 #define INQUIRYDATABUFFERSIZE 36
82 #ifndef _INQUIRYDATA_DEFINED /* also in scsi.h */
83 #define _INQUIRYDATA_DEFINED
84 typedef struct _INQUIRYDATA
{
86 UCHAR DeviceTypeQualifier
: 3;
87 UCHAR DeviceTypeModifier
: 7;
88 UCHAR RemovableMedia
: 1;
89 __GNU_EXTENSION
union {
91 __GNU_EXTENSION
struct {
92 UCHAR ANSIVersion
: 3;
93 UCHAR ECMAVersion
: 3;
97 UCHAR ResponseDataFormat
: 4;
100 UCHAR TerminateTask
: 1;
102 UCHAR AdditionalLength
;
107 UCHAR MediumChanger
: 1;
109 UCHAR ReservedBit2
: 1;
110 UCHAR EnclosureServices
: 1;
111 UCHAR ReservedBit3
: 1;
113 UCHAR CommandQueue
: 1;
114 UCHAR TransferDisable
: 1;
115 UCHAR LinkedCommands
: 1;
116 UCHAR Synchronous
: 1;
119 UCHAR RelativeAddressing
: 1;
122 UCHAR ProductRevisionLevel
[4];
123 UCHAR VendorSpecific
[20];
125 } INQUIRYDATA
, *PINQUIRYDATA
;
128 typedef struct _MODE_CAPABILITIES_PAGE
{
152 UCHAR Reserved10
: 4;
154 UCHAR MaximumSpeedSupported
[2];
155 UCHAR MaximumStoredDefectedListEntries
[2];
156 UCHAR ContinuousTransferLimit
[2];
157 UCHAR CurrentSpeedSelected
[2];
160 } MODE_CAPABILITIES_PAGE
, *PMODE_CAPABILITIES_PAGE
;
162 typedef BOOLEAN NTAPI
163 (*TAPE_VERIFY_INQUIRY_ROUTINE
)(
164 IN PINQUIRYDATA InquiryData
,
165 IN PMODE_CAPABILITIES_PAGE ModeCapabilitiesPage
);
168 (*TAPE_EXTENSION_INIT_ROUTINE
)(
169 IN PVOID MinitapeExtension
,
170 IN PINQUIRYDATA InquiryData
,
171 IN PMODE_CAPABILITIES_PAGE ModeCapabilitiesPage
);
174 (*TAPE_ERROR_ROUTINE
)(
175 IN PVOID MinitapeExtension
,
176 IN PSCSI_REQUEST_BLOCK Srb
,
177 IN OUT PTAPE_STATUS TapeStatus
);
179 typedef TAPE_STATUS NTAPI
180 (*TAPE_PROCESS_COMMAND_ROUTINE
)(
181 IN OUT PVOID MinitapeExtension
,
182 IN OUT PVOID CommandExtension
,
183 IN OUT PVOID CommandParameters
,
184 IN OUT PSCSI_REQUEST_BLOCK Srb
,
186 IN TAPE_STATUS StatusOfLastCommand
,
187 IN OUT PULONG RetryFlags
);
189 #define TAPE_RETRY_MASK 0x0000FFFF
190 #define IGNORE_ERRORS 0x00010000
191 #define RETURN_ERRORS 0x00020000
193 typedef struct _TAPE_INIT_DATA
{
194 TAPE_VERIFY_INQUIRY_ROUTINE VerifyInquiry
;
195 BOOLEAN QueryModeCapabilitiesPage
;
196 ULONG MinitapeExtensionSize
;
197 TAPE_EXTENSION_INIT_ROUTINE ExtensionInit
;
198 ULONG DefaultTimeOutValue
;
199 TAPE_ERROR_ROUTINE TapeError
;
200 ULONG CommandExtensionSize
;
201 TAPE_PROCESS_COMMAND_ROUTINE CreatePartition
;
202 TAPE_PROCESS_COMMAND_ROUTINE Erase
;
203 TAPE_PROCESS_COMMAND_ROUTINE GetDriveParameters
;
204 TAPE_PROCESS_COMMAND_ROUTINE GetMediaParameters
;
205 TAPE_PROCESS_COMMAND_ROUTINE GetPosition
;
206 TAPE_PROCESS_COMMAND_ROUTINE GetStatus
;
207 TAPE_PROCESS_COMMAND_ROUTINE Prepare
;
208 TAPE_PROCESS_COMMAND_ROUTINE SetDriveParameters
;
209 TAPE_PROCESS_COMMAND_ROUTINE SetMediaParameters
;
210 TAPE_PROCESS_COMMAND_ROUTINE SetPosition
;
211 TAPE_PROCESS_COMMAND_ROUTINE WriteMarks
;
212 TAPE_PROCESS_COMMAND_ROUTINE PreProcessReadWrite
; /* optional */
213 } TAPE_INIT_DATA
, *PTAPE_INIT_DATA
;
215 typedef struct _TAPE_PHYS_POSITION
{
216 ULONG SeekBlockAddress
;
217 ULONG SpaceBlockCount
;
218 } TAPE_PHYS_POSITION
, PTAPE_PHYS_POSITION
;
226 #endif /* __MINITAPE_H */