Annotation of ntddk/src/scsi/inc/tape.h, revision 1.1.1.1

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: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.