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.