|
|
1.1 root 1: /*++
2:
3: Copyright (c) 1992 Microsoft Corporation
4:
5: Module Name:
6:
7: tape.h
8:
9: Abstract:
10:
11: These are the structures and defines that are used in the
12: SCSI tape class drivers. The tape class driver is separated
13: into two modules. Tape.c contains code common to all tape
14: class drivers including the driver's major entry points.
15: The major entry point names each begin with the prefix
16: 'ScsiTape.' The second module is the device specific code.
17: It provides support for a set of functions. Each device
18: specific function name is prefixed by 'Tape.'
19:
20: Author:
21:
22: Mike Glass
23:
24: Revision History:
25:
26: --*/
27:
28: #include "scsi.h"
29: #include "class.h"
30:
31: //
32: // Define the maximum inquiry data length.
33: //
34:
35: #define MAXIMUM_TAPE_INQUIRY_DATA 252
36:
37: //
38: // Tape device data
39: //
40:
41: typedef struct _TAPE_DATA {
42: ULONG Flags;
43: ULONG CurrentPartition;
44: PVOID DeviceSpecificExtension;
45: PSCSI_INQUIRY_DATA InquiryData;
46: } TAPE_DATA, *PTAPE_DATA;
47:
48: #define DEVICE_EXTENSION_SIZE sizeof(DEVICE_EXTENSION) + sizeof(TAPE_DATA)
49:
50:
51: //
52: // Define Device Configuration Page
53: //
54:
55: typedef struct _MODE_DEVICE_CONFIGURATION_PAGE {
56:
57: UCHAR PageCode : 6;
58: UCHAR Reserved1 : 1;
59: UCHAR PS : 1;
60: UCHAR PageLength;
61: UCHAR ActiveFormat : 5;
62: UCHAR CAFBit : 1;
63: UCHAR CAPBit : 1;
64: UCHAR Reserved2 : 1;
65: UCHAR ActivePartition;
66: UCHAR WriteBufferFullRatio;
67: UCHAR ReadBufferEmptyRatio;
68: UCHAR WriteDelayTime[2];
69: UCHAR REW : 1;
70: UCHAR RBO : 1;
71: UCHAR SOCF : 2;
72: UCHAR AVC : 1;
73: UCHAR RSmk : 1;
74: UCHAR BIS : 1;
75: UCHAR DBR : 1;
76: UCHAR GapSize;
77: UCHAR Reserved3 : 3;
78: UCHAR SEW : 1;
79: UCHAR EEG : 1;
80: UCHAR EODdefined : 3;
81: UCHAR BufferSize[3];
82: UCHAR DCAlgorithm;
83: UCHAR Reserved4;
84:
85: } MODE_DEVICE_CONFIGURATION_PAGE, *PMODE_DEVICE_CONFIGURATION_PAGE;
86:
87: //
88: // Define Medium Partition Page
89: //
90:
91: typedef struct _MODE_MEDIUM_PARTITION_PAGE {
92:
93: UCHAR PageCode : 6;
94: UCHAR Reserved1 : 1;
95: UCHAR PSBit : 1;
96: UCHAR PageLength;
97: UCHAR MaximumAdditionalPartitions;
98: UCHAR AdditionalPartitionDefined;
99: UCHAR Reserved2 : 3;
100: UCHAR PSUMBit : 2;
101: UCHAR IDPBit : 1;
102: UCHAR SDPBit : 1;
103: UCHAR FDPBit : 1;
104: UCHAR MediumFormatRecognition;
105: UCHAR Reserved3[2];
106: UCHAR Partition0Size[2];
107: UCHAR Partition1Size[2];
108:
109: } MODE_MEDIUM_PARTITION_PAGE, *PMODE_MEDIUM_PARTITION_PAGE;
110:
111: //
112: // Define Data Compression Page
113: //
114:
115: typedef struct _MODE_DATA_COMPRESSION_PAGE {
116:
117: UCHAR PageCode : 6;
118: UCHAR Reserved1 : 2;
119: UCHAR PageLength;
120: UCHAR Reserved2 : 6;
121: UCHAR DCC : 1;
122: UCHAR DCE : 1;
123: UCHAR Reserved3 : 5;
124: UCHAR RED : 2;
125: UCHAR DDE : 1;
126: UCHAR CompressionAlgorithm[4];
127: UCHAR DecompressionAlgorithm[4];
128: UCHAR Reserved4[4];
129:
130: } MODE_DATA_COMPRESSION_PAGE, *PMODE_DATA_COMPRESSION_PAGE;
131:
132: //
133: // Mode parameter list header and medium partition page -
134: // used in creating partitions
135: //
136:
137: typedef struct _MODE_MEDIUM_PART_PAGE {
138:
139: MODE_PARAMETER_HEADER ParameterListHeader;
140: MODE_MEDIUM_PARTITION_PAGE MediumPartPage;
141:
142: } MODE_MEDIUM_PART_PAGE, *PMODE_MEDIUM_PART_PAGE;
143:
144:
145: //
146: // Mode parameters for retrieving tape or media information
147: //
148:
149: typedef struct _MODE_TAPE_MEDIA_INFORMATION {
150:
151: MODE_PARAMETER_HEADER ParameterListHeader;
152: MODE_PARAMETER_BLOCK ParameterListBlock;
153: MODE_MEDIUM_PARTITION_PAGE MediumPartPage;
154:
155: } MODE_TAPE_MEDIA_INFORMATION, *PMODE_TAPE_MEDIA_INFORMATION;
156:
157: //
158: // Mode parameter list header and device configuration page -
159: // used in retrieving device configuration information
160: //
161:
162: typedef struct _MODE_DEVICE_CONFIG_PAGE {
163:
164: MODE_PARAMETER_HEADER ParameterListHeader;
165: MODE_DEVICE_CONFIGURATION_PAGE DeviceConfigPage;
166:
167: } MODE_DEVICE_CONFIG_PAGE, *PMODE_DEVICE_CONFIG_PAGE;
168:
169:
170: //
171: // Mode parameter list header and data compression page -
172: // used in retrieving data compression information
173: //
174:
175: typedef struct _MODE_DATA_COMPRESS_PAGE {
176:
177: MODE_PARAMETER_HEADER ParameterListHeader;
178: MODE_DATA_COMPRESSION_PAGE DataCompressPage;
179:
180: } MODE_DATA_COMPRESS_PAGE, *PMODE_DATA_COMPRESS_PAGE;
181:
182:
183:
184: //
185: // The following routines are the exported entry points for
186: // all tape class drivers. Note all these routines name start
187: // with 'ScsiTape.'
188: //
189:
190: NTSTATUS
191: DriverEntry(
192: IN PDRIVER_OBJECT DriverObject,
193: IN PUNICODE_STRING RegistryPath
194: );
195:
196: NTSTATUS
197: ScsiTapeInitialize(
198: IN PDRIVER_OBJECT DriverObject
199: );
200:
201: NTSTATUS
202: ScsiTapeCreate (
203: IN PDEVICE_OBJECT DeviceObject,
204: IN PIRP Irp
205: );
206:
207: NTSTATUS
208: ScsiTapeReadWrite (
209: IN PDEVICE_OBJECT DeviceObject,
210: IN PIRP Irp
211: );
212:
213: NTSTATUS
214: ScsiTapeDeviceControl(
215: IN PDEVICE_OBJECT DeviceObject,
216: IN PIRP Irp
217: );
218:
219:
220:
221: //
222: // The following routines are provided by the tape
223: // device-specific module. Each routine name is
224: // prefixed with 'Tape.'
225:
226: NTSTATUS
227: TapeCreatePartition(
228: IN PDEVICE_OBJECT DeviceObject,
229: IN PIRP Irp
230: );
231:
232: NTSTATUS
233: TapeErase(
234: IN PDEVICE_OBJECT DeviceObject,
235: IN PIRP Irp
236: );
237:
238: VOID
239: TapeError(
240: PDEVICE_OBJECT DeviceObject,
241: PSCSI_REQUEST_BLOCK Srb,
242: NTSTATUS *Status,
243: BOOLEAN *Retry
244: );
245:
246: NTSTATUS
247: TapeGetDriveParameters(
248: IN PDEVICE_OBJECT DeviceObject,
249: IN PIRP Irp
250: );
251:
252: NTSTATUS
253: TapeGetMediaParameters(
254: IN PDEVICE_OBJECT DeviceObject,
255: IN PIRP Irp
256: );
257:
258: NTSTATUS
259: TapeGetPosition(
260: IN PDEVICE_OBJECT DeviceObject,
261: IN PIRP Irp
262: );
263:
264: NTSTATUS
265: TapeGetStatus(
266: IN PDEVICE_OBJECT DeviceObject,
267: IN PIRP Irp
268: );
269:
270: NTSTATUS
271: TapePrepare(
272: IN PDEVICE_OBJECT DeviceObject,
273: IN PIRP Irp
274: );
275:
276: NTSTATUS
277: TapeReadWrite(
278: IN PDEVICE_OBJECT DeviceObject,
279: IN PIRP Irp
280: );
281:
282: NTSTATUS
283: TapeSetDriveParameters(
284: IN PDEVICE_OBJECT DeviceObject,
285: IN PIRP Irp
286: );
287:
288: NTSTATUS
289: TapeSetMediaParameters(
290: IN PDEVICE_OBJECT DeviceObject,
291: IN PIRP Irp
292: );
293:
294: NTSTATUS
295: TapeSetPosition(
296: IN PDEVICE_OBJECT DeviceObject,
297: IN PIRP Irp
298: );
299:
300: BOOLEAN
301: TapeVerifyInquiry(
302: IN PSCSI_INQUIRY_DATA LunInfo
303: );
304:
305: NTSTATUS
306: TapeWriteMarks(
307: IN PDEVICE_OBJECT DeviceObject,
308: IN PIRP Irp
309: );
310:
311:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.