|
|
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.