source: Daodan/MSYS2/mingw32/i686-w64-mingw32/include/ddk/minitape.h@ 1194

Last change on this file since 1194 was 1166, checked in by rossy, 3 years ago

Daodan: Replace MinGW build env with an up-to-date MSYS2 env

File size: 5.8 KB
RevLine 
[1166]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#ifdef __cplusplus
26extern "C" {
27#endif
28
29#pragma pack(push,4)
30
31#define MEDIA_ERASEABLE 0x00000001
32#define MEDIA_WRITE_ONCE 0x00000002
33#define MEDIA_READ_ONLY 0x00000004
34#define MEDIA_READ_WRITE 0x00000008
35#define MEDIA_WRITE_PROTECTED 0x00000100
36#define MEDIA_CURRENTLY_MOUNTED 0x80000000
37
38typedef enum _TAPE_STATUS {
39 TAPE_STATUS_SEND_SRB_AND_CALLBACK,
40 TAPE_STATUS_CALLBACK,
41 TAPE_STATUS_CHECK_TEST_UNIT_READY,
42 TAPE_STATUS_SUCCESS,
43 TAPE_STATUS_INSUFFICIENT_RESOURCES,
44 TAPE_STATUS_NOT_IMPLEMENTED,
45 TAPE_STATUS_INVALID_DEVICE_REQUEST,
46 TAPE_STATUS_INVALID_PARAMETER,
47 TAPE_STATUS_MEDIA_CHANGED,
48 TAPE_STATUS_BUS_RESET,
49 TAPE_STATUS_SETMARK_DETECTED,
50 TAPE_STATUS_FILEMARK_DETECTED,
51 TAPE_STATUS_BEGINNING_OF_MEDIA,
52 TAPE_STATUS_END_OF_MEDIA,
53 TAPE_STATUS_BUFFER_OVERFLOW,
54 TAPE_STATUS_NO_DATA_DETECTED,
55 TAPE_STATUS_EOM_OVERFLOW,
56 TAPE_STATUS_NO_MEDIA,
57 TAPE_STATUS_IO_DEVICE_ERROR,
58 TAPE_STATUS_UNRECOGNIZED_MEDIA,
59 TAPE_STATUS_DEVICE_NOT_READY,
60 TAPE_STATUS_MEDIA_WRITE_PROTECTED,
61 TAPE_STATUS_DEVICE_DATA_ERROR,
62 TAPE_STATUS_NO_SUCH_DEVICE,
63 TAPE_STATUS_INVALID_BLOCK_LENGTH,
64 TAPE_STATUS_IO_TIMEOUT,
65 TAPE_STATUS_DEVICE_NOT_CONNECTED,
66 TAPE_STATUS_DATA_OVERRUN,
67 TAPE_STATUS_DEVICE_BUSY,
68 TAPE_STATUS_REQUIRES_CLEANING,
69 TAPE_STATUS_CLEANER_CARTRIDGE_INSTALLED
70} TAPE_STATUS, *PTAPE_STATUS;
71
72#define INQUIRYDATABUFFERSIZE 36
73#ifndef _INQUIRYDATA_DEFINED /* also in scsi.h */
74#define _INQUIRYDATA_DEFINED
75typedef struct _INQUIRYDATA {
76 UCHAR DeviceType : 5;
77 UCHAR DeviceTypeQualifier : 3;
78 UCHAR DeviceTypeModifier : 7;
79 UCHAR RemovableMedia : 1;
80 __GNU_EXTENSION union {
81 UCHAR Versions;
82 __GNU_EXTENSION struct {
83 UCHAR ANSIVersion : 3;
84 UCHAR ECMAVersion : 3;
85 UCHAR ISOVersion : 2;
86 };
87 };
88 UCHAR ResponseDataFormat : 4;
89 UCHAR HiSupport : 1;
90 UCHAR NormACA : 1;
91 UCHAR TerminateTask : 1;
92 UCHAR AERC : 1;
93 UCHAR AdditionalLength;
94 UCHAR Reserved;
95 UCHAR Addr16 : 1;
96 UCHAR Addr32 : 1;
97 UCHAR AckReqQ: 1;
98 UCHAR MediumChanger : 1;
99 UCHAR MultiPort : 1;
100 UCHAR ReservedBit2 : 1;
101 UCHAR EnclosureServices : 1;
102 UCHAR ReservedBit3 : 1;
103 UCHAR SoftReset : 1;
104 UCHAR CommandQueue : 1;
105 UCHAR TransferDisable : 1;
106 UCHAR LinkedCommands : 1;
107 UCHAR Synchronous : 1;
108 UCHAR Wide16Bit : 1;
109 UCHAR Wide32Bit : 1;
110 UCHAR RelativeAddressing : 1;
111 UCHAR VendorId[8];
112 UCHAR ProductId[16];
113 UCHAR ProductRevisionLevel[4];
114 UCHAR VendorSpecific[20];
115 UCHAR Reserved3[40];
116} INQUIRYDATA, *PINQUIRYDATA;
117#endif
118
119typedef struct _MODE_CAPABILITIES_PAGE {
120 UCHAR PageCode : 6;
121 UCHAR Reserved1 : 2;
122 UCHAR PageLength;
123 UCHAR Reserved2[2];
124 UCHAR RO : 1;
125 UCHAR Reserved3 : 4;
126 UCHAR SPREV : 1;
127 UCHAR Reserved4 : 2;
128 UCHAR Reserved5 : 3;
129 UCHAR EFMT : 1;
130 UCHAR Reserved6 : 1;
131 UCHAR QFA : 1;
132 UCHAR Reserved7 : 2;
133 UCHAR LOCK : 1;
134 UCHAR LOCKED : 1;
135 UCHAR PREVENT : 1;
136 UCHAR UNLOAD : 1;
137 UCHAR Reserved8 : 2;
138 UCHAR ECC : 1;
139 UCHAR CMPRS : 1;
140 UCHAR Reserved9 : 1;
141 UCHAR BLK512 : 1;
142 UCHAR BLK1024 : 1;
143 UCHAR Reserved10 : 4;
144 UCHAR SLOWB : 1;
145 UCHAR MaximumSpeedSupported[2];
146 UCHAR MaximumStoredDefectedListEntries[2];
147 UCHAR ContinuousTransferLimit[2];
148 UCHAR CurrentSpeedSelected[2];
149 UCHAR BufferSize[2];
150 UCHAR Reserved11[2];
151} MODE_CAPABILITIES_PAGE, *PMODE_CAPABILITIES_PAGE;
152
153typedef BOOLEAN NTAPI
154(*TAPE_VERIFY_INQUIRY_ROUTINE)(
155 IN PINQUIRYDATA InquiryData,
156 IN PMODE_CAPABILITIES_PAGE ModeCapabilitiesPage);
157
158typedef VOID NTAPI
159(*TAPE_EXTENSION_INIT_ROUTINE)(
160 IN PVOID MinitapeExtension,
161 IN PINQUIRYDATA InquiryData,
162 IN PMODE_CAPABILITIES_PAGE ModeCapabilitiesPage);
163
164typedef VOID NTAPI
165(*TAPE_ERROR_ROUTINE)(
166 IN PVOID MinitapeExtension,
167 IN PSCSI_REQUEST_BLOCK Srb,
168 IN OUT PTAPE_STATUS TapeStatus);
169
170typedef TAPE_STATUS NTAPI
171(*TAPE_PROCESS_COMMAND_ROUTINE)(
172 IN OUT PVOID MinitapeExtension,
173 IN OUT PVOID CommandExtension,
174 IN OUT PVOID CommandParameters,
175 IN OUT PSCSI_REQUEST_BLOCK Srb,
176 IN ULONG CallNumber,
177 IN TAPE_STATUS StatusOfLastCommand,
178 IN OUT PULONG RetryFlags);
179
180#define TAPE_RETRY_MASK 0x0000FFFF
181#define IGNORE_ERRORS 0x00010000
182#define RETURN_ERRORS 0x00020000
183
184typedef struct _TAPE_INIT_DATA {
185 TAPE_VERIFY_INQUIRY_ROUTINE VerifyInquiry;
186 BOOLEAN QueryModeCapabilitiesPage;
187 ULONG MinitapeExtensionSize;
188 TAPE_EXTENSION_INIT_ROUTINE ExtensionInit;
189 ULONG DefaultTimeOutValue;
190 TAPE_ERROR_ROUTINE TapeError;
191 ULONG CommandExtensionSize;
192 TAPE_PROCESS_COMMAND_ROUTINE CreatePartition;
193 TAPE_PROCESS_COMMAND_ROUTINE Erase;
194 TAPE_PROCESS_COMMAND_ROUTINE GetDriveParameters;
195 TAPE_PROCESS_COMMAND_ROUTINE GetMediaParameters;
196 TAPE_PROCESS_COMMAND_ROUTINE GetPosition;
197 TAPE_PROCESS_COMMAND_ROUTINE GetStatus;
198 TAPE_PROCESS_COMMAND_ROUTINE Prepare;
199 TAPE_PROCESS_COMMAND_ROUTINE SetDriveParameters;
200 TAPE_PROCESS_COMMAND_ROUTINE SetMediaParameters;
201 TAPE_PROCESS_COMMAND_ROUTINE SetPosition;
202 TAPE_PROCESS_COMMAND_ROUTINE WriteMarks;
203 TAPE_PROCESS_COMMAND_ROUTINE PreProcessReadWrite; /* optional */
204} TAPE_INIT_DATA, *PTAPE_INIT_DATA;
205
206typedef struct _TAPE_PHYS_POSITION {
207 ULONG SeekBlockAddress;
208 ULONG SpaceBlockCount;
209} TAPE_PHYS_POSITION, PTAPE_PHYS_POSITION;
210
211#pragma pack(pop)
212
213#ifdef __cplusplus
214}
215#endif
216
217#endif /* __MINITAPE_H */
Note: See TracBrowser for help on using the repository browser.