ftp.nice.ch/pub/next/tools/scsi/SCSIInquire.3.0.s.tar.gz#/Inquirer/scsi2reg.h

This is scsi2reg.h in view mode; [Download] [Up]

// scsi2reg.h -- for SCSI 2 features
// Copyright (C) 1992 by Jiro Nakamura. All rights reserved.
// This file is a confidential trade secret of Jiro Nakamura and
// Focal Point Computer, Inc. Its contents may not be divulged to
// any third party without the prior written permission of Jiro Nakamura
// or Focal Point Computer, Inc.

#ifndef DEVTYPE_STILLVIDEO
	/* Canon Still video drive */
	#define DEVTYPE_STILLVIDEO   	0x9f		
#endif
	
#define C6OP_RECEIVEDIAG	0x1C	/* Receive diagnostic */
#define C6OP_REZEROUNIT		0x01	/* rezero unit */
#define	C6OP_MEDIUMREMOVAL	0x1e	/* Prevent/Allow Medium Removal */
#define	C10OP_SEEKEXTENDED	0x2B	/* seek extended */
#define C10OP_SETLIMITS		0x33	/* set limits */
#define C10OP_SYNCHRONIZECACHE	0x35	/* Synchronize Cache */
#define C10OP_READDEFECTDATA	0x37	/* Read Defect Data */
#define C10OP_READLONG		0x3e	/* Read Long */
#define	C10OP_READSUBCHANNEL	0x42	/* CD-ROM Read SubChannel */
#define C10OP_READTOC		0x43	/* CD-ROM Read TOC */
#define C10OP_MODESENSEEXTENDED	0x5A	/* Mode Sense(10) */

/* Tape drive commands */
#define C6OP_READBLOCKLIMITS	0x05	/* Read block limits */


/* Valid bits of Status Byte */
#define STAT_VALIDMASK	0x3e
/* New Status Byte things */
#define STAT_TERMINATED		0x22	
#define STAT_QUEUEFULL		0x28


/*
 * inquiry data
 */
struct inquiry2_reply {
	u_char	ir_peripheralqualifier:3,
		ir_devicetype:5;	/* device type, see below */
	u_char	ir_removable:1,		/* removable media */
		ir_typequalifier:7;	/* device type qualifier */
	u_char	ir_isoversion:2,	/* ISO version number */
		ir_ecmaversion:3,	/* ECMA version number */
		ir_ansiversion:3;	/* ANSI version number */
	u_char	ir_aenc: 1,		/* Asynchronous event notification */
		ir_trmiop: 1,		/* terminate I/O process */
		ir_zero4:2,		/* reserved */
		ir_rspdatafmt:4;	/* response data format */
	u_char	ir_addlistlen;		/* additional list length */
	u_char	ir_zero3[2];		/* vendor unique field */
	u_char	ir_reladr: 1,		/* relative addressing mode supported */
		ir_wbus32: 1,		/* 32 bit wide bus supported */
		ir_wbus16:1,		/* 16 bit wide bus supported */
		ir_sync:1,		/* synchronous transfer supported */
		ir_linked:1,		/* linked acommand supported */
		ir_zero5:1,		/* reserved */
		ir_cmdque:1,		/* command queuing supported */
		ir_sftre:1;		/* soft reset supported */
	char	ir_vendorid[8];		/* vendor name in ascii */
	char	ir_productid[16];	/* product name in ascii */
	char	ir_revision[4];		/* revision level info in ascii */
	char	ir_vendorspecific[20];	/* vendor specific information */
	char	ir_zero6[40];		/* reserved */
	char	ir_endofid[1];		/* just a handle for end of id info */
};

	

/* Request sense data format */

// Note: These depend on ints being 32 bits (bad bad bad)
struct nonExtendedSenseData {
		u_char	adValid: 1,
			errorClass:3,
			errorCode: 4;
		u_int	vendorUnique: 3,
			logicalBlockAddress: 21;
		};
struct extendedSenseData {
		u_char	valid: 1,
			errorClass:3,
			errorCode: 4;
		u_char 	segmentNumber;
		u_char	filemark: 1,
			eom: 1,
			ili: 1,
			reserved_2 : 1,
			senseKey: 4;
		u_int	informationByte;
		u_char	additionalSenseLength;
		};
		
union senseData {
		struct nonExtendedSenseData nonExtendedSense;
		struct extendedSenseData extendedSense;
		};

/* Mode sense data format */

#define MODESENSEBUFLENGTH	512
	

struct 	dadHParameter {
};



struct SADModeParameterHeader6 {
	u_char	modeDataLength;
	u_char	mediumType;
	u_char 	wp: 1,
		bufferedMode: 3,
		speed: 4;
	u_char	blockDescriptorLength;	
	};
	
struct DADModeParameterHeader6 {
	u_char	modeDataLength;
	u_char	mediumType;
	u_char 	wp: 1,
		_reserved2: 2,
		cache: 1,
		_reserved3:4;
	u_char	blockDescriptorLength;	
	};

union ModeParameterHeader6 {
	struct	DADModeParameterHeader6 dad;
	struct	SADModeParameterHeader6 sad;
	};

	
struct ModeParameterBlockDescriptor {
	u_char	densityCode;
	u_int	numberOfBlocks: 24;
	u_char 	_reserved4;
	u_int	blockLength: 24;
	};
		
struct ModePageFormatHeader {
	u_char	ps: 1,
		_reserved1: 1,
		pageCode: 6;
	u_char	pageLength;
	};
				

#define RWERRORRECOVERYPAGE	0x01
struct RWErrorRecoveryPage {
	struct	ModePageFormatHeader pageHeader;
	u_char	awre: 1,
		arre: 1,
		tb: 1,
		rc: 1,
		eer: 1,
		per: 1,
		dte: 1,
		dcr: 1;
	u_char	readRetryCount,
		correctionSpan,
		headOffsetCount,
		dataStrobeOffsetCount,
		_reserved7,
		writeRetryCount,
		_reserved9;
	u_int	recoveryTimeLimit: 16;
	};

#define DISCONNECTPAGE	0x02
struct DisconnectReconnectPage {
	struct	ModePageFormatHeader pageHeader;
	u_char	bufferFullRatio,
		bufferEmptyRatio;
	u_int	busInactivityLimit: 16,
		disconnectTimeLimit: 16,
		connectTimeLimit: 16,
		maximumBurstSize: 16;
	u_char	_reserved12: 6,
		dtdc: 2;
	u_char	_reserved13,
		_reserved14,
		_reserved15;
	};


#define FORMATDEVICEPAGE	0x03
struct FormatDevicePage {
	struct	ModePageFormatHeader pageHeader;	//  0 -  1
	u_int	tracksPerZone: 16,			//  2 -  3
		altSectorsPerZone: 16,			//  4 -  5
		altTracksPerZone: 16,			//  6 -  7
		altTracksPerUnit: 16,			//  8 -  9
		sectorsPerTrack: 16,			// 10 - 11
		dataBytesPerSector: 16,			// 12 - 13
		interleave: 16,				// 14 - 15
		trackSkewFactor: 16,			// 16 - 17
		cylinderSkewFactor: 16;			// 18 - 19
	u_char	ssec: 1,				// 20
		hsec: 1,
		rmb: 1,
		surf: 1,
		_reserved20: 4;
	u_char	_reserved21;				// 21
	u_char	_reserved22;				// 22
	u_char	_reserved23;				// 23
};
	


#define RIGIDDISKPAGE	0x04
struct RigidDiskPage {
	struct	ModePageFormatHeader pageHeader;	//  0 -  1
	u_int	numCylinders: 24;			//  2 -  4
	u_char	numHeads;				//  5
	u_int	scwp:24,				//  6 -  8
		scrwc:24;				//  9 - 11
	u_int	driveStepRate:16;			// 12 - 13
	int	landingZoneCylinder:24;			// 14 - 16
	u_char	_reserved17: 6,				// 17
		rpl: 2;
	u_char	rotationalOffset;			// 18
	u_char	_reserved19;				// 19
	u_int	mediumRotationRate: 16;			// 20-21
	u_char	_reserved22,				// 22
		_reserved23;				// 23
	};

#define FLEXIBLEDISKPAGE	0x05
struct FlexibleDiskPage {
	struct	ModePageFormatHeader pageHeader;	//  0 -  1
	u_int	transferRate: 16;			//  2 -  3
	u_char	numHeads,				//  4
		sectorsPerTrack;			//  5
	u_int	dataBytesPerSector: 16,			//  6 -  7
		numCylinders: 16,			//  8 -  9
		scwp:16,				// 10 - 11
		scrwc:16,				// 12 - 13
		driveStepRate:16;			// 14 - 15
	u_char	driveStepPulseWidth;			// 16
	u_int	headSettleDelay: 16;			// 17 - 18
	u_char	motorOnDelay,				// 19
		motorOffDelay;				// 20
	u_char	trdy: 1,				// 21
		ssn: 1,
		mo: 1,
		_reserved21: 5;
	u_char	_reserved22: 4,				// 22
		spc: 4;
	u_char	wpv,					// 23
		headLoadDelay,				// 24
		headUnloadDelay;			// 25
	u_char	pin34: 4,				// 26
		pin2: 4;	
	u_char	pin4: 4,				// 27
		pin1: 4;
	u_int	mediumRotationRate: 16;			// 28 - 29
	u_char	_reserved30,				// 30
		_reserved31;				// 31
	};

#define VERRORRECOVERYPAGE	0x07
struct VErrorRecoveryPage {
	struct	ModePageFormatHeader pageHeader;
	u_char	_reserved2: 4,
		eer: 1,
		per: 1,
		dte: 1,
		dcr: 1;
	u_char	verifyRetryCount,
		verifyCorrectionSpan,
		_reserved5,
		_reserved6,
		_reserved7,
		_reserved8,
		_reserved9;
	u_int	recoveryTimeLimit: 16;
	};


#define CACHINGPAGE	0x08
struct CachingPage {
	struct	ModePageFormatHeader pageHeader;
	u_char	_reserved2:5,
		wce: 1,
		ms: 1,
		rcd: 1;
	u_char	drrp: 4,
		wrp: 4;
	u_int	dptl: 16,
		minPrefetch: 16,
		maxPrefetch: 16,
		maxPrefetchCeiling: 16;
	};

#define PERIPHERALPAGE	0x09
struct PeripheralPage {
	struct	ModePageFormatHeader pageHeader;
	u_int	interfaceIndentifier: 16;
	u_char	_reserved4,
		_reserved5,
		_reserved6,
		_reserved7;
	u_char	vendorSpecific[10];	// 10 is hard coded, but should not
					// be
	};
	

#define CONTROLMODEPAGE	0x0A
struct ControlModePage {
	struct	ModePageFormatHeader pageHeader;
	u_char	_reserved2: 7,
		rlec: 1;
	u_char	queueAlgorithmModifier: 4,
		_reserved3: 2,
		qErr: 1,
		dQue: 1;
	u_char	eeca: 1,
		_reserved4: 4,
		raenp: 1,
		uaaenp: 1,
		eaenp: 1;
	u_char	_reserved5;
	u_int	readyAENHoldoffPeriod: 16;
	};

#define MEDIUMTYPESPAGE	0x0B
struct MediumTypesPage {
	struct	ModePageFormatHeader pageHeader;
	u_char	_reserved2,
		_reserved3;
	u_char	mediumType[4];
	};
	

#define NOTCHPAGE	0x0C
struct NotchPage {
	struct	ModePageFormatHeader pageHeader;
	u_char	nd: 1,
		pln: 1,
		_reserved2: 6;
	u_char	_reserved3;
	u_int	maxNotches: 16,
		activeNotch: 16,
		startingBoundary: 16,
		endingBoundary: 16,
		pagesNotched: 16;
	};

#define CDROMPARAMETERSPAGE	0x0D
struct CDROMParametersPage {
	struct	ModePageFormatHeader pageHeader;
	u_char	_reserved2:8,
		_reserved3:4,
		inactivityTimerMultiplier:4;
	u_int	sPerMunits:16,
		fPerSunits:16;
	};
		
#define CDROMAUDIOCONTROLPAGE	0x0E
struct CDROMAudioControlPage {
	struct	ModePageFormatHeader pageHeader;
	u_char	_reserved2: 5,
		immed: 1,
		sotc: 1,
		_reserved2a:1;
	u_short	_reserved3:8,
		_reserved4:8;
	u_char	aprval:1,
		_reserved5:3,
		format:4;
	u_int	lbsplayback:16;
	u_char	_reserved8:4,
		output0selection:4,
		output0volume:8,
		_reserved10:4,
		output1selection:4,
		output1volume:8,			
		_reserved12:4,
		output2selection:4,
		output2volume:8,			
		_reserved14:4,
		output3selection:4,
		output3volume:8;
	};
	


#define DEVICECONFIGPAGE 0x10
struct DeviceConfigurationPage {
	struct	ModePageFormatHeader pageHeader;
	u_char	_reserved2: 1,
		changeActivePartition: 1,
		changeActiveFormat: 1,
		activeFormat: 5;
	u_char	activePartition: 8,
		writeBufferFullRatio: 8,
		readBufferEmptyRatio: 8;
	u_int	writeDelayTime: 16;
	u_char	dataBufferRecovery: 1,
		blockIdentifiers: 1,
		reportSetmarks: 1,
		automaticVelocity: 1,
		stopOnConsecutiveFilemarks: 2,
		recoverBufferOrder: 1,
		reportEarlyWarning: 1;
	u_char	gapSize: 8;
	u_char	eodDefined: 3,
		enableEodGeneration: 1,
		synchronizeEarlyWarning: 1,
		_reserved10:3;
	u_int	bufferSizeAtEarlyWarning: 24;
	u_char	selectDataCompressionAlgorithm: 8;
	u_char	_reserved15;
};


struct GenericPage {
	struct	ModePageFormatHeader pageHeader;
	};
		
	
union PageFormat	{
	struct CachingPage caching;
	struct CDROMAudioControlPage cdaudio;
	struct CDROMParametersPage cdparameters;
	struct ControlModePage controlMode;
	struct DisconnectReconnectPage disconnectReconnect;
	struct FlexibleDiskPage flexibleDisk;
	struct FormatDevicePage formatDevice;
	struct GenericPage genericPage;
	struct MediumTypesPage mediumTypes;
	struct NotchPage notch;
	struct RigidDiskPage rigidDisk;
	struct RWErrorRecoveryPage rwErrorRecovery;
	struct VErrorRecoveryPage  vErrorRecovery;
	struct DeviceConfigurationPage deviceConfiguration;
	};

#define MAXPAGES		8
#define MAXBLOCKDESCRIPTORS	8	

struct mode_parameters {
	union ModeParameterHeader6 mph;
	struct ModeParameterBlockDescriptor 
		mpbd[8];
	union PageFormat mpp[MAXPAGES];
	int blockDescriptorCount;
	int pageCount;
	};



struct	FieldPointer
	{
	u_char	sksv: 1,
		cd: 1,
		reserved5: 1,
		reserved4: 1,
		bpv: 1,
		bitPointer: 3;
	u_short	fieldPointer;
	};

struct ActualRetryCount
{
	u_char	sksv: 1,
		reserved: 7;
	u_short	fieldPointer;
};

struct FormatProgressIndication
{
	u_char	sksv: 1,
		reserved: 7;
	u_short	progressIndication;
};
		

union SenseKeySpef15 {
	struct	FieldPointer fp;
	struct	ActualRetryCount arc;
	struct	FormatProgressIndication fpi;
	};

struct esense2_reply {
        u_char  er_ibvalid:1,           /* information bytes valid */
                er_class:3,             /* error class */
                er_code:4;              /* error code */
        u_char  er_segment;             /* segment number for copy cmd */
        u_char  er_filemark:1,          /* file mark */
                er_endofmedium:1,       /* end-of-medium */
                er_badlen:1,            /* incorrect length */
                er_rsvd2:1,             /* reserved */
                er_sensekey:4;          /* sense key */
        u_char  er_infomsb;             /* MSB of information byte */
        u_int   er_info:24,             /* bits 23 - 0 of info "byte" */
                er_addsenselen:8;       /* additional sense length */
        u_int   er_rsvd8;               /* copy status (unused) */
        u_char  er_addsensecode;        /* additional sense code */
        u_char  er_qualifier;           /* sense code qualifier */
	u_char	er_unitCode;		/* field replaceable unit code */
	union	SenseKeySpef15 er_sk;
	};

union esenseReply
	{
	struct	esense_reply er;
	struct	esense2_reply er2;
	} ;


/* CD_ROM Stuff */


/*
 * CD-ROM SubChannel Data 
 */
struct subqchannel_page {
	u_short	sc_adr:4,		/* Q mode info */
		sc_control:4,		/* sub-c Q control bits */
		sc_track:8,		/* track # */
		sc_index:8;		/* index # */
	u_int	sc_absoluteaddress:32,	/* CD-ROM absolute address */
		sc_trackrelative:32;	/* CD-ROM track relative address */	
	u_char	sc_mcval: 1,		/* media catalogue valid */
		sc_reserved16:7;
	char	sc_mediacatalog[15];	/* media catalogue # (UPC/Barcode) */
	u_char	sc_tcval:1,		/* track code valid */
		sc_reserved32:7;
	char	sc_trackisrc[15];	/* track international standard 
					   recording  code */
};

struct cdromposition_page {
	u_short	sc_adr:4,		/* Q mode info */
		sc_control:4,		/* sub-c Q control bits */
		sc_track:8,		/* track # */
		sc_index:8;		/* index # */
	u_int	sc_absoluteaddress:32,	/* CD-ROM absolute address */
		sc_trackrelative:32;	/* CD-ROM track relative address */	
	};

struct mediacatalog_page {
	u_short	sc_reserved5:8,		
		sc_reserved6:8,
		sc_reserved7:8;
	u_char	sc_mcval: 1,		/* media catalogue valid */
		sc_reserved8:7;
	char	sc_mediacatalog[15];	/* media catalogue # (UPC/Barcode) */
	};

struct trackisrc_page {
	u_short	sc_track:8,		
		sc_reserved6:8,
		sc_reserved7:8;
	u_char	sc_tcval: 1,		/* media catalogue valid */
		sc_reserved8:7;
	char	sc_trackisrc[15];	/* track international standard 
					   recording code */
	};

struct vendorunique_page {
	u_short	sc_rawdata[30];
	};

union subcpages
	{
	struct subqchannel_page subq;
	struct cdromposition_page position;
	struct mediacatalog_page mediacatalog;
	struct trackisrc_page trackisrc;
	struct vendorunique_page vendorunique;
	} ;

struct subchannelReply
	{
	u_char	sc_reserved0:8,		/* Reserved */
		sc_audiostatus:8;
	u_int	sc_datalength:16;	/* Sub-channel data length */
	u_short	sc_dataformat:8;	/* data format code */
	union subcpages data;
	};

/* 
 * Read TOC Structures
 */
struct	tocTrackDescriptor
	{
	u_char	toc_reserved0;
	u_char	toc_adr:4,
		toc_control:4;
	u_short	toc_track:8,
		toc_reserved3:8;
	u_int	toc_absoluteaddress:32;
	} ;
	
struct tocReply
	{
	u_int	toc_datalength:16,	/* TOC Data length */
		toc_firsttrack:8,
		toc_lasttrack:8;	
	struct	tocTrackDescriptor	track[100];
	};
	
	

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.