Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

417 lines
9.2 KiB

/*++
Copyright (c) 1993 Conner Peripherals Inc.
Module Name:
4mmsony.h
Abstract:
This file contains structures and defines that are used
specifically for the 4mmsony.sys tape driver.
Author:
Mike Colandreo (Conner Software)
Revision History:
$Log$
--*/
#include "scsi.h"
#include "class.h"
//
// Define the maximum inquiry data length.
//
#define MAXIMUM_TAPE_INQUIRY_DATA 252
//
// Tape device data
//
typedef struct _TAPE_DATA {
ULONG Flags;
ULONG CurrentPartition;
PVOID DeviceSpecificExtension;
PSCSI_INQUIRY_DATA InquiryData;
} TAPE_DATA, *PTAPE_DATA;
#define DEVICE_EXTENSION_SIZE sizeof(DEVICE_EXTENSION) + sizeof(TAPE_DATA)
//
// Define Device Configuration Page
//
typedef struct _MODE_DEVICE_CONFIGURATION_PAGE {
UCHAR PageCode : 6;
UCHAR Reserved1 : 1;
UCHAR PS : 1;
UCHAR PageLength;
UCHAR ActiveFormat : 5;
UCHAR CAFBit : 1;
UCHAR CAPBit : 1;
UCHAR Reserved2 : 1;
UCHAR ActivePartition;
UCHAR WriteBufferFullRatio;
UCHAR ReadBufferEmptyRatio;
UCHAR WriteDelayTime[2];
UCHAR REW : 1;
UCHAR RBO : 1;
UCHAR SOCF : 2;
UCHAR AVC : 1;
UCHAR RSmk : 1;
UCHAR BIS : 1;
UCHAR DBR : 1;
UCHAR GapSize;
UCHAR Reserved3 : 3;
UCHAR SEW : 1;
UCHAR EEG : 1;
UCHAR EODdefined : 3;
UCHAR BufferSize[3];
UCHAR DCAlgorithm;
UCHAR Reserved4;
} MODE_DEVICE_CONFIGURATION_PAGE, *PMODE_DEVICE_CONFIGURATION_PAGE;
//
// Define Medium Partition Page
//
typedef struct _MODE_MEDIUM_PARTITION_PAGE {
UCHAR PageCode : 6;
UCHAR Reserved1 : 1;
UCHAR PSBit : 1;
UCHAR PageLength;
UCHAR MaximumAdditionalPartitions;
UCHAR AdditionalPartitionDefined;
UCHAR Reserved2 : 3;
UCHAR PSUMBit : 2;
UCHAR IDPBit : 1;
UCHAR SDPBit : 1;
UCHAR FDPBit : 1;
UCHAR MediumFormatRecognition;
UCHAR Reserved3[2];
UCHAR Partition0Size[2];
UCHAR Partition1Size[2];
} MODE_MEDIUM_PARTITION_PAGE, *PMODE_MEDIUM_PARTITION_PAGE;
//
// Define Data Compression Page
//
typedef struct _MODE_DATA_COMPRESSION_PAGE {
UCHAR PageCode : 6;
UCHAR Reserved1 : 2;
UCHAR PageLength;
UCHAR Reserved2 : 6;
UCHAR DCC : 1;
UCHAR DCE : 1;
UCHAR Reserved3 : 5;
UCHAR RED : 2;
UCHAR DDE : 1;
UCHAR CompressionAlgorithm[4];
UCHAR DecompressionAlgorithm[4];
UCHAR Reserved4[4];
} MODE_DATA_COMPRESSION_PAGE, *PMODE_DATA_COMPRESSION_PAGE;
//
// Mode parameter list header and medium partition page -
// used in creating partitions
//
typedef struct _MODE_MEDIUM_PART_PAGE {
MODE_PARAMETER_HEADER ParameterListHeader;
MODE_PARAMETER_BLOCK ParameterListBlock;
MODE_MEDIUM_PARTITION_PAGE MediumPartPage;
} MODE_MEDIUM_PART_PAGE, *PMODE_MEDIUM_PART_PAGE;
//
// Mode parameters for retrieving tape or media information
//
typedef struct _MODE_TAPE_MEDIA_INFORMATION {
MODE_PARAMETER_HEADER ParameterListHeader;
MODE_PARAMETER_BLOCK ParameterListBlock;
MODE_MEDIUM_PARTITION_PAGE MediumPartPage;
} MODE_TAPE_MEDIA_INFORMATION, *PMODE_TAPE_MEDIA_INFORMATION;
//
// Mode parameter list header and device configuration page -
// used in retrieving device configuration information
//
typedef struct _MODE_DEVICE_CONFIG_PAGE {
MODE_PARAMETER_HEADER ParameterListHeader;
MODE_PARAMETER_BLOCK ParameterListBlock;
MODE_DEVICE_CONFIGURATION_PAGE DeviceConfigPage;
} MODE_DEVICE_CONFIG_PAGE, *PMODE_DEVICE_CONFIG_PAGE;
//
// Mode parameter list header and data compression page -
// used in retrieving data compression information
//
typedef struct _MODE_DATA_COMPRESS_PAGE {
MODE_PARAMETER_HEADER ParameterListHeader;
MODE_PARAMETER_BLOCK ParameterListBlock;
MODE_DATA_COMPRESSION_PAGE DataCompressPage;
} MODE_DATA_COMPRESS_PAGE, *PMODE_DATA_COMPRESS_PAGE;
//
// Defines for Log Sense Pages
//
#define LOGSENSEPAGE0 0x00
#define LOGSENSEPAGE2 0x02
#define LOGSENSEPAGE3 0x03
#define LOGSENSEPAGE30 0x30
#define LOGSENSEPAGE31 0x31
//
// Defined Log Sense Page Header
//
typedef struct _LOG_SENSE_PAGE_HEADER {
UCHAR PageCode : 6;
UCHAR Reserved1 : 2;
UCHAR Reserved2;
UCHAR Length[2]; // [0]=MSB ... [1]=LSB
} LOG_SENSE_PAGE_HEADER, *PLOG_SENSE_PAGE_HEADER;
//
// Defined Log Sense Parameter Header
//
typedef struct _LOG_SENSE_PARAMETER_HEADER {
UCHAR ParameterCode[2]; // [0]=MSB ... [1]=LSB
UCHAR LPBit : 1;
UCHAR Reserved1 : 1;
UCHAR TMCBit : 2;
UCHAR ETCBit : 1;
UCHAR TSDBit : 1;
UCHAR DSBit : 1;
UCHAR DUBit : 1;
UCHAR ParameterLength;
} LOG_SENSE_PARAMETER_HEADER, *PLOG_SENSE_PARAMETER_HEADER;
//
// Defined Log Page Information - statistical values, accounts
// for maximum parameter values that is returned for each page
//
typedef struct _LOG_SENSE_PAGE_INFORMATION {
union {
struct {
UCHAR Page0;
UCHAR Page2;
UCHAR Page3;
UCHAR Page30;
UCHAR Page31;
} PageData ;
struct {
LOG_SENSE_PARAMETER_HEADER Parm1;
UCHAR TotalRewrites[2];
LOG_SENSE_PARAMETER_HEADER Parm2;
UCHAR TotalErrorCorrected[3];
LOG_SENSE_PARAMETER_HEADER Parm3;
UCHAR NotApplicable[2]; // Always 0
LOG_SENSE_PARAMETER_HEADER Parm4;
UCHAR TotalBytesProcessed[4];
LOG_SENSE_PARAMETER_HEADER Parm5;
UCHAR TotalUnrecoverableErrors[2];
LOG_SENSE_PARAMETER_HEADER Parm6;
UCHAR RewritesLastReadOp[2];
} Page2 ;
struct {
LOG_SENSE_PARAMETER_HEADER Parm1;
UCHAR TotalRereads[2];
LOG_SENSE_PARAMETER_HEADER Parm2;
UCHAR TotalErrorCorrected[3];
LOG_SENSE_PARAMETER_HEADER Parm3;
UCHAR TotalCorrectableECCC3[2];
LOG_SENSE_PARAMETER_HEADER Parm4;
UCHAR TotalBytesProcessed[4];
LOG_SENSE_PARAMETER_HEADER Parm5;
UCHAR TotalUnrecoverableErrors[2];
LOG_SENSE_PARAMETER_HEADER Parm6;
UCHAR RereadsLastWriteOp[2];
} Page3 ;
struct {
LOG_SENSE_PARAMETER_HEADER Parm1;
UCHAR CurrentGroupsWritten[3];
LOG_SENSE_PARAMETER_HEADER Parm2;
UCHAR CurrentRewrittenFrames[2];
LOG_SENSE_PARAMETER_HEADER Parm3;
UCHAR CurrentGroupsRead[3];
LOG_SENSE_PARAMETER_HEADER Parm4;
UCHAR CurrentECCC3Corrections[2];
LOG_SENSE_PARAMETER_HEADER Parm5;
UCHAR PreviousGroupsWritten[3];
LOG_SENSE_PARAMETER_HEADER Parm6;
UCHAR PreviousRewrittenFrames[2];
LOG_SENSE_PARAMETER_HEADER Parm7;
UCHAR PreviousGroupsRead[3];
LOG_SENSE_PARAMETER_HEADER Parm8;
UCHAR PreviousECCC3Corrections[2];
LOG_SENSE_PARAMETER_HEADER Parm9;
UCHAR TotalGroupsWritten[4];
LOG_SENSE_PARAMETER_HEADER Parm10;
UCHAR TotalRewritteFrames[3];
LOG_SENSE_PARAMETER_HEADER Parm11;
UCHAR TotalGroupsRead[4];
LOG_SENSE_PARAMETER_HEADER Parm12;
UCHAR TotalECCC3Corrections[3];
LOG_SENSE_PARAMETER_HEADER Parm13;
UCHAR LoadCount[2];
} Page30 ;
struct {
LOG_SENSE_PARAMETER_HEADER Parm1;
UCHAR RemainingCapacityPart0[4];
LOG_SENSE_PARAMETER_HEADER Parm2;
UCHAR RemainingCapacityPart1[4];
LOG_SENSE_PARAMETER_HEADER Parm3;
UCHAR MaximumCapacityPart0[4];
LOG_SENSE_PARAMETER_HEADER Parm4;
UCHAR MaximumCapacityPart1[4];
} Page31 ;
} LogSensePage;
} LOG_SENSE_PAGE_INFORMATION, *PLOG_SENSE_PAGE_INFORMATION;
//
// Defined Log Sense Parameter Format - statistical values, accounts
// for maximum parameter values that is returned
//
typedef struct _LOG_SENSE_PARAMETER_FORMAT {
LOG_SENSE_PAGE_HEADER LogSenseHeader;
LOG_SENSE_PAGE_INFORMATION LogSensePageInfo;
} LOG_SENSE_PARAMETER_FORMAT, *PLOG_SENSE_PARAMETER_FORMAT;
NTSTATUS
TapeCreatePartition(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
TapeErase(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
VOID
TapeError(
PDEVICE_OBJECT DeviceObject,
PSCSI_REQUEST_BLOCK Srb,
NTSTATUS *Status,
BOOLEAN *Retry
);
NTSTATUS
TapeGetDriveParameters(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
TapeGetMediaParameters(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
TapeGetPosition(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
TapeGetStatus(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
TapePrepare(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
TapeReadWrite(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
TapeSetDriveParameters(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
TapeSetMediaParameters(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
TapeSetPosition(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
BOOLEAN
TapeVerifyInquiry(
IN PSCSI_INQUIRY_DATA LunInfo
);
NTSTATUS
TapeWriteMarks(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);