Annotation of ntddk/src/scsi/inc/tape.h, revision 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.