3 Copyright (c) 1992 Microsoft Corporation
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.'
32 // Define the maximum inquiry data length.
35 #define MAXIMUM_TAPE_INQUIRY_DATA 252
41 typedef struct _TAPE_DATA
{
43 ULONG CurrentPartition
;
44 PVOID DeviceSpecificExtension
;
45 PSCSI_INQUIRY_DATA InquiryData
;
46 } TAPE_DATA
, *PTAPE_DATA
;
48 #define DEVICE_EXTENSION_SIZE sizeof(DEVICE_EXTENSION) + sizeof(TAPE_DATA)
52 // Define Device Configuration Page
55 typedef struct _MODE_DEVICE_CONFIGURATION_PAGE
{
61 UCHAR ActiveFormat
: 5;
65 UCHAR ActivePartition
;
66 UCHAR WriteBufferFullRatio
;
67 UCHAR ReadBufferEmptyRatio
;
68 UCHAR WriteDelayTime
[2];
85 } MODE_DEVICE_CONFIGURATION_PAGE
, *PMODE_DEVICE_CONFIGURATION_PAGE
;
88 // Define Medium Partition Page
91 typedef struct _MODE_MEDIUM_PARTITION_PAGE
{
97 UCHAR MaximumAdditionalPartitions
;
98 UCHAR AdditionalPartitionDefined
;
104 UCHAR MediumFormatRecognition
;
106 UCHAR Partition0Size
[2];
107 UCHAR Partition1Size
[2];
109 } MODE_MEDIUM_PARTITION_PAGE
, *PMODE_MEDIUM_PARTITION_PAGE
;
112 // Define Data Compression Page
115 typedef struct _MODE_DATA_COMPRESSION_PAGE
{
126 UCHAR CompressionAlgorithm
[4];
127 UCHAR DecompressionAlgorithm
[4];
130 } MODE_DATA_COMPRESSION_PAGE
, *PMODE_DATA_COMPRESSION_PAGE
;
133 // Mode parameter list header and medium partition page -
134 // used in creating partitions
137 typedef struct _MODE_MEDIUM_PART_PAGE
{
139 MODE_PARAMETER_HEADER ParameterListHeader
;
140 MODE_MEDIUM_PARTITION_PAGE MediumPartPage
;
142 } MODE_MEDIUM_PART_PAGE
, *PMODE_MEDIUM_PART_PAGE
;
146 // Mode parameters for retrieving tape or media information
149 typedef struct _MODE_TAPE_MEDIA_INFORMATION
{
151 MODE_PARAMETER_HEADER ParameterListHeader
;
152 MODE_PARAMETER_BLOCK ParameterListBlock
;
153 MODE_MEDIUM_PARTITION_PAGE MediumPartPage
;
155 } MODE_TAPE_MEDIA_INFORMATION
, *PMODE_TAPE_MEDIA_INFORMATION
;
158 // Mode parameter list header and device configuration page -
159 // used in retrieving device configuration information
162 typedef struct _MODE_DEVICE_CONFIG_PAGE
{
164 MODE_PARAMETER_HEADER ParameterListHeader
;
165 MODE_DEVICE_CONFIGURATION_PAGE DeviceConfigPage
;
167 } MODE_DEVICE_CONFIG_PAGE
, *PMODE_DEVICE_CONFIG_PAGE
;
171 // Mode parameter list header and data compression page -
172 // used in retrieving data compression information
175 typedef struct _MODE_DATA_COMPRESS_PAGE
{
177 MODE_PARAMETER_HEADER ParameterListHeader
;
178 MODE_DATA_COMPRESSION_PAGE DataCompressPage
;
180 } MODE_DATA_COMPRESS_PAGE
, *PMODE_DATA_COMPRESS_PAGE
;
185 // The following routines are the exported entry points for
186 // all tape class drivers. Note all these routines name start
192 IN PDRIVER_OBJECT DriverObject
,
193 IN PUNICODE_STRING RegistryPath
198 IN PDRIVER_OBJECT DriverObject
203 IN PDEVICE_OBJECT DeviceObject
,
209 IN PDEVICE_OBJECT DeviceObject
,
214 ScsiTapeDeviceControl(
215 IN PDEVICE_OBJECT DeviceObject
,
222 // The following routines are provided by the tape
223 // device-specific module. Each routine name is
224 // prefixed with 'Tape.'
228 IN PDEVICE_OBJECT DeviceObject
,
234 IN PDEVICE_OBJECT DeviceObject
,
240 PDEVICE_OBJECT DeviceObject
,
241 PSCSI_REQUEST_BLOCK Srb
,
247 TapeGetDriveParameters(
248 IN PDEVICE_OBJECT DeviceObject
,
253 TapeGetMediaParameters(
254 IN PDEVICE_OBJECT DeviceObject
,
260 IN PDEVICE_OBJECT DeviceObject
,
266 IN PDEVICE_OBJECT DeviceObject
,
272 IN PDEVICE_OBJECT DeviceObject
,
278 IN PDEVICE_OBJECT DeviceObject
,
283 TapeSetDriveParameters(
284 IN PDEVICE_OBJECT DeviceObject
,
289 TapeSetMediaParameters(
290 IN PDEVICE_OBJECT DeviceObject
,
296 IN PDEVICE_OBJECT DeviceObject
,
302 IN PSCSI_INQUIRY_DATA LunInfo
307 IN PDEVICE_OBJECT DeviceObject
,