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.