+++ /dev/null
-
-/*
- * Copyright (c) 1998 T.Hepper
- */
-#ifndef SCSIDEFS_H
-#define SCSIDEFS_H
-
-#ifndef WORDS_BIGENDIAN
-#define LITTLE_ENDIAN_BITFIELDS
-#endif
-
-typedef enum { Input, Output } Direction_T;
-typedef unsigned char CDB_T[12];
-
-#ifdef _AIX
-typedef unsigned int PackedBit;
-#define AIX_USE_GSC 1
-#else
-typedef unsigned char PackedBit;
-#endif
-
-#define INDEX_CHANGER 0
-#define INDEX_TAPE 1
-#define INDEX_TAPECTL 2
-
-#define CHG_MAXDEV 32 /* Maximum number of devices handled by pDev */
- /* Must be large to hold the result of ScanBus */
-
-#define TAPETYPE 4
-#define IMPORT 3
-#define STORAGE 2
-#define CHANGER 1
-
-#define TAG_SIZE 36
-#define MAXTRIES 100 /* How many tries until SCSI_TestUnitReady should return an ok */
-/*
- * Sense Key definitions
-*/
-#define SENSE_NULL 0
-#define SENSE_RECOVERED_ERROR 1
-#define NOT_READY 2
-#define SENSE_NOT_READY 2
-#define SENSE_MEDIUM_ERROR 3
-#define SENSE_HARDWARE_ERROR 4
-#define HARDWARE_ERROR 4
-#define ILLEGAL_REQUEST 5
-#define SENSE_ILLEGAL_REQUEST 5
-#define UNIT_ATTENTION 6
-#define SENSE_UNIT_ATTENTION 6
-#define SENSE_DATA_PROTECT 7
-#define SENSE_BLANK_CHECK 8
-#define SENSE_VENDOR_SPECIFIC 0x9
-#define SENSE_ABORTED_COMMAND 0xb
-#define SENSE_VOLUME_OVERFLOW 0xd
-#define SENSE_CHG_ELEMENT_STATUS 0xe
-
-#define MAX_RETRIES 100
-
-#define INQUIRY_SIZE SIZEOF(SCSIInquiry_T)
-
-/*
- * Return values from the OS dependent part
- * of the SCSI interface
- *
- * The underlaying functions must decide what to do
- */
-#define SCSI_ERROR -1
-#define SCSI_OK 0
-#define SCSI_SENSE 1
-#define SCSI_BUSY 2
-#define SCSI_CHECK 3
-
-
-/*
- * SCSI Commands
-*/
-#define SC_COM_TEST_UNIT_READY 0
-#define SC_COM_REWIND 0x1
-#define SC_COM_REQUEST_SENSE 0x3
-#define SC_COM_IES 0x7
-#define SC_COM_INQUIRY 0x12
-#define SC_COM_MODE_SELECT 0x15
-#define SC_COM_ERASE 0x19
-#define SC_COM_MODE_SENSE 0x1A
-#define SC_COM_UNLOAD 0x1B
-#define SC_COM_LOCATE 0x2B
-#define SC_COM_LOG_SELECT 0x4C
-#define SC_COM_LOG_SENSE 0x4d
-#define SC_MOVE_MEDIUM 0xa5
-#define SC_COM_RES 0xb8
-/*
- * Define for LookupDevice
- */
-#define LOOKUP_NAME 1
-#define LOOKUP_FD 2
-#define LOOKUP_TYPE 3
-#define LOOKUP_CONFIG 4
-/*
- * Define for the return codes from SenseHandler
- */
-#define SENSE_ABORT -1
-#define SENSE_IGNORE 0
-#define SENSE_RETRY 2
-#define SENSE_IES 3
-#define SENSE_TAPE_NOT_ONLINE 4
-#define SENSE_TAPE_NOT_LOADED 5
-#define SENSE_NO 6
-#define SENSE_TAPE_NOT_UNLOADED 7
-#define SENSE_CHM_FULL 8
-/*
- * Defines for the type field in the inquiry command
- */
-#define TYPE_DISK 0
-#define TYPE_TAPE 1
-#define TYPE_PRINTER 2
-#define TYPE_PROCESSOR 3
-#define TYPE_WORM 4
-#define TYPE_CDROM 5
-#define TYPE_SCANNER 6
-#define TYPE_OPTICAL 7
-#define TYPE_CHANGER 8
-#define TYPE_COMM 9
-
-/* Defines for Tape_Status */
-#define TAPE_ONLINE 1 /* Tape is loaded */
-#define TAPE_BOT 2 /* Tape is at begin of tape */
-#define TAPE_EOT 4 /* Tape is at end of tape */
-#define TAPE_WR_PROT 8 /* Tape is write protected */
-#define TAPE_NOT_LOADED 16 /* Tape is not loaded */
-
-/* Defines for the function Tape_Ioctl */
-#define IOCTL_EJECT 0
-
-/* Defines for exit status */
-#define WARNING 1
-#define FATAL 2
-
-/* macros for building scsi msb array parameter lists */
-#ifndef B
-#define B(s,i) ((unsigned char)(((s) >> (i)) & 0xff))
-#endif
-#ifndef B1
-#define B1(s) ((unsigned char)((s) & 0xff))
-#endif
-#define B2(s) B((s),8), B1(s)
-#define B3(s) B((s),16), B((s),8), B1(s)
-#define B4(s) B((s),24), B((s),16), B((s),8), B1(s)
-
-/* macros for converting scsi msb array to binary */
-#define V1(s) (s)[0]
-#define V2(s) (((s)[0] << 8) | (s)[1])
-#define V3(s) (((((s)[0] << 8) | (s)[1]) << 8) | (s)[2])
-#define V4(s) (((((((s)[0] << 8) | (s)[1]) << 8) | (s)[2]) << 8) | (s)[3])
-#define V5(s) (((((((((s)[0] << 8) | (s)[1]) << 8) | (s)[2]) << 8) | (s)[3]) << 8) | (s)[4])
-#define V6(s) (((((((((((s)[0] << 8) | (s)[1]) << 8) | (s)[2]) << 8) | (s)[3]) << 8) | (s)[4]) << 8) | (s)[5])
-
-/* macros for converting binary into scsi msb array */
-#define MSB1(s,v) (s)[0]=B1(v)
-#define MSB2(s,v) (s)[0]=B(v,8), (s)[1]=B1(v)
-#define MSB3(s,v) (s)[0]=B(v,16), (s)[1]=B(v,8), (s)[2]=B1(v)
-#define MSB4(s,v) (s)[0]=B(v,24), (s)[1]=B(v,16), (s)[2]=B(v,8), (s)[3]=B1(v)
-
-#define LABEL_DB_VERSION 2
-
-#define DEBUG_INFO 9
-#define DEBUG_ERROR 1
-#define DEBUG_ALL 0
-
-#define SECTION_ALL 0
-#define SECTION_INFO 1
-#define SECTION_SCSI 2
-#define SECTION_MAP_BARCODE 3
-#define SECTION_ELEMENT 4
-#define SECTION_BARCODE 5
-#define SECTION_TAPE 6
-#define SECTION_MOVE 7
-/*----------------------------------------------------------------------------*/
-/* Some stuff for our own configurationfile */
-typedef struct { /* The information we can get for any drive (configuration) */
- int drivenum; /* Which drive to use in the library */
- int start; /* Which is the first slot we may use */
- int end; /* The last slot we are allowed to use */
- int cleanslot; /* Where the cleaningcartridge stays */
- char *scsitapedev; /* Where can we send raw SCSI commands to the tape */
- char *device; /* Which device is associated to the drivenum */
- char *slotfile; /* Where we should have our memory */
- char *cleanfile; /* Where we count how many cleanings we did */
- char *timefile; /* Where we count the time the tape was used*/
- char *tapestatfile;/* Where can we place some drive stats */
- char *changerident;/* Config to use for changer control, ovverride result from inquiry */
- char *tapeident; /* Same as above for the tape device */
-}config_t;
-
-typedef struct {
- int number_of_configs; /* How many different configurations are used */
- int eject; /* Do the drives need an eject-command */
- int autoinv; /* Do automaticly an inventory if an tape is not in the db or not active in the db */
- int havebarcode; /* Do we have an barcode reader installed */
- char *debuglevel; /* How many debug info to print */
- unsigned char emubarcode; /* Emulate the barcode feature, used for keeping an inventory of the lib */
- time_t sleep; /* How many seconds to wait for the drive to get ready */
- int cleanmax; /* How many runs could be done with one cleaning tape */
- char *device; /* Which device is our changer */
- char *labelfile; /* Mapping from Barcode labels to volume labels */
- config_t *conf;
-}changer_t;
-
-typedef struct {
- char voltag[128];
- char barcode[TAG_SIZE];
- unsigned char valid;
-} LabelV1_T;
-
-typedef struct {
- char voltag[128]; /* Tape volume label */
- char barcode[TAG_SIZE]; /* Barcode of the tape */
- int slot; /* in which slot is the tape */
- int from; /* from where it comes, needed to move a tape
- * back to the right slot from the drive
- */
-
- unsigned int LoadCount; /* How many times has the tape been loaded */
- unsigned int RecovError; /* How many recovered errors */
- unsigned int UnrecovError; /* How man unrecoverd errors */
- unsigned char valid; /* Is this tape in the current magazin */
-} LabelV2_T;
-
-typedef enum {BARCODE_PUT, BARCODE_VOL, BARCODE_BARCODE, BARCODE_DUMP, RESET_VALID, FIND_SLOT, UPDATE_SLOT } MBCAction_T;
-typedef struct {
- LabelV2_T data;
- MBCAction_T action;
-} MBC_T;
-
-
-/* ======================================================= */
-/* RequestSense_T */
-/* ======================================================= */
-typedef struct
-{
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit ErrorCode:7; /* Byte 0 Bits 0-6 */
- PackedBit Valid:1; /* Byte 0 Bit 7 */
-#else
- PackedBit Valid:1; /* Byte 0 Bit 7 */
- PackedBit ErrorCode:7; /* Byte 0 Bits 0-6 */
-#endif
- unsigned char SegmentNumber; /* Byte 1 */
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit SenseKey:4; /* Byte 2 Bits 0-3 */
- PackedBit :1; /* Byte 2 Bit 4 */
- PackedBit RILI:1; /* Byte 2 Bit 5 */
- PackedBit REOM:1; /* Byte 2 Bit 6 */
- PackedBit Filemark:1; /* Byte 2 Bit 7 */
-#else
- PackedBit Filemark:1; /* Byte 2 Bit 7 */
- PackedBit REOM:1; /* Byte 2 Bit 6 */
- PackedBit RILI:1; /* Byte 2 Bit 5 */
- PackedBit :1; /* Byte 2 Bit 4 */
- PackedBit SenseKey:4; /* Byte 2 Bits 0-3 */
-#endif
- unsigned char Information[4]; /* Bytes 3-6 */
- unsigned char AdditionalSenseLength; /* Byte 7 */
- unsigned char CommandSpecificInformation[4]; /* Bytes 8-11 */
- unsigned char AdditionalSenseCode; /* Byte 12 */
- unsigned char AdditionalSenseCodeQualifier; /* Byte 13 */
- unsigned char Byte14; /* Byte 14 */
- unsigned char Byte15; /* Byte 15 */
-
-} RequestSense_T;
-
-/* ======================================================= */
-/* ExtendedRequestSense_T */
-/* ======================================================= */
-typedef struct
-{
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit ErrorCode:7; /* Byte 0 Bits 0-6 */
- PackedBit Valid:1; /* Byte 0 Bit 7 */
-#else
- PackedBit Valid:1; /* Byte 0 Bit 7 */
- PackedBit ErrorCode:7; /* Byte 0 Bits 0-6 */
-#endif
- unsigned char SegmentNumber; /* Byte 1 */
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit SenseKey:4; /* Byte 2 Bits 0-3 */
- PackedBit :1; /* Byte 2 Bit 4 */
- PackedBit RILI:1; /* Byte 2 Bit 5 */
- PackedBit REOM:1; /* Byte 2 Bit 6 */
- PackedBit Filemark:1; /* Byte 2 Bit 7 */
-#else
- PackedBit Filemark:1; /* Byte 2 Bit 7 */
- PackedBit REOM:1; /* Byte 2 Bit 6 */
- PackedBit RILI:1; /* Byte 2 Bit 5 */
- PackedBit :1; /* Byte 2 Bit 4 */
- PackedBit SenseKey:4; /* Byte 2 Bits 0-3 */
-#endif
- unsigned char Information[4]; /* Bytes 3-6 */
- unsigned char AdditionalSenseLength; /* Byte 7 */
- unsigned char LogParameterPageCode; /* Bytes 8 */
- unsigned char LogParameterCode; /* Bytes 9 */
- unsigned char Byte10; /* Bytes 10 */
- unsigned char UnderrunOverrunCounter; /* Bytes 11 */
- unsigned char AdditionalSenseCode; /* Byte 12 */
- unsigned char AdditionalSenseCodeQualifier; /* Byte 13 */
- unsigned char Byte14; /* Byte 14 */
- unsigned char Byte15; /* Byte 15 */
- unsigned char ReadWriteDataErrorCounter[3]; /* Byte 16-18 */
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit LBOT:1; /* Byte 19 Bits 0 */
- PackedBit TNP:1; /* Byte 19 Bits 1 */
- PackedBit TME:1; /* Byte 19 Bits 2 */
- PackedBit ECO:1; /* Byte 19 Bits 3 */
- PackedBit ME:1; /* Byte 19 Bits 4 */
- PackedBit FPE:1; /* Byte 19 Bits 5 */
- PackedBit BPE:1; /* Byte 19 Bits 6 */
- PackedBit PF:1; /* Byte 19 Bits 7 */
-#else
- PackedBit PF:1; /* Byte 19 Bits 7 */
- PackedBit BPE:1; /* Byte 19 Bits 6 */
- PackedBit FPE:1; /* Byte 19 Bits 5 */
- PackedBit ME:1; /* Byte 19 Bits 4 */
- PackedBit ECO:1; /* Byte 19 Bits 3 */
- PackedBit TME:1; /* Byte 19 Bits 2 */
- PackedBit TNP:1; /* Byte 19 Bits 1 */
- PackedBit LBOT:1; /* Byte 19 Bits 0 */
-#endif
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit FE:1; /* Byte 20 Bits 0 */
- PackedBit SSE:1; /* Byte 20 Bits 1 */
- PackedBit WEI:1; /* Byte 20 Bits 2 */
- PackedBit URE:1; /* Byte 20 Bits 3 */
- PackedBit FMKE:1; /* Byte 20 Bits 4 */
- PackedBit WP:1; /* Byte 20 Bits 5 */
- PackedBit TMD:1; /* Byte 20 Bits 6 */
- PackedBit :1; /* Byte 20 Bits 7 */
-#else
- PackedBit :1; /* Byte 20 Bits 7 */
- PackedBit TMD:1; /* Byte 20 Bits 6 */
- PackedBit WP:1; /* Byte 20 Bits 5 */
- PackedBit FMKE:1; /* Byte 20 Bits 4 */
- PackedBit URE:1; /* Byte 20 Bits 3 */
- PackedBit WEI:1; /* Byte 20 Bits 2 */
- PackedBit SSE:1; /* Byte 20 Bits 1 */
- PackedBit FE:1; /* Byte 20 Bits 0 */
-#endif
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit WSEO:1; /* Byte 21 Bits 0 */
- PackedBit WSEB:1; /* Byte 21 Bits 1 */
- PackedBit PEOT:1; /* Byte 21 Bits 2 */
- PackedBit CLN:1; /* Byte 21 Bits 3 */
- PackedBit CLND:1; /* Byte 21 Bits 4 */
- PackedBit RRR:1; /* Byte 21 Bits 5 */
- PackedBit UCLN:1; /* Byte 21 Bits 6 */
- PackedBit :1; /* Byte 21 Bits 7 */
-#else
- PackedBit :1; /* Byte 21 Bits 7 */
- PackedBit UCLN:1; /* Byte 21 Bits 6 */
- PackedBit RRR:1; /* Byte 21 Bits 5 */
- PackedBit CLND:1; /* Byte 21 Bits 4 */
- PackedBit CLN:1; /* Byte 21 Bits 3 */
- PackedBit PEOT:1; /* Byte 21 Bits 2 */
- PackedBit WSEB:1; /* Byte 21 Bits 1 */
- PackedBit WSEO:1; /* Byte 21 Bits 0 */
-#endif
- unsigned char Byte21; /* Byte 22 */
- unsigned char RemainingTape[3]; /* Byte 23-25 */
- unsigned char TrackingRetryCounter; /* Byte 26 */
- unsigned char ReadWriteRetryCounter; /* Byte 27 */
- unsigned char FaultSymptomCode; /* Byte 28 */
-
-} ExtendedRequestSense_T;
-
-/* ======================================================= */
-/* ReadElementStatus_T */
-/* ======================================================= */
-typedef struct
-{
- unsigned char cmd; /* Byte 1 */
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit type : 4;
- PackedBit voltag :1;
- PackedBit lun :3;
-#else
- PackedBit lun :3;
- PackedBit voltag :1;
- PackedBit type : 4;
-#endif
- unsigned char start[2]; /* Byte 3-4 */
- unsigned char number[2]; /* Byte 5-6 */
- unsigned char byte4; /* Byte 7 */
- unsigned char length[4]; /* Byte 8-11 */
- unsigned char byte78[2]; /* Byte 12-13 */
-} ReadElementStatus_T;
-
-/* ======================================================= */
-/* ElementStatusPage_T */
-/* ======================================================= */
-typedef struct
-{
- unsigned char type; /* Byte 1 = Element Type Code*/
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit bitres : 6;
- PackedBit avoltag : 1;
- PackedBit pvoltag : 1;
-#else
- PackedBit pvoltag : 1;
- PackedBit avoltag : 1;
- PackedBit bitres : 6;
-#endif
- unsigned char length[2]; /* Byte 2-3 = Element Descriptor Length */
- unsigned char byte4; /* Byte 4 */
- unsigned char count[3]; /* Byte 5-7 = Byte Count of Descriptor Available */
-} ElementStatusPage_T;
-
-
-/* ======================================================= */
-/* ElementStatusData_T */
-/* ======================================================= */
-typedef struct
-{
- unsigned char first[2]; /* Byte 1-2 = First Element Adress Reported */
- unsigned char number[2]; /* Byte 3-4 = Number of Elements Available */
- unsigned char byte5; /* Reserved */
- unsigned char count[3]; /* Byte 6-8 = Byte Count of Report Available */
-} ElementStatusData_T;
-
-/* ======================================================= */
-/* MediumTransportElementDescriptor_T */
-/* ======================================================= */
-typedef struct
-{
- unsigned char address[2]; /* Byte 1-2 = Element Address */
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit full : 1;
- PackedBit rsvd : 1;
- PackedBit except : 1;
- PackedBit res : 5;
-#else
- PackedBit res : 5;
- PackedBit except : 1;
- PackedBit rsvd : 1;
- PackedBit full : 1;
-#endif
- unsigned char byte4; /* Byte 4 */
- unsigned char asc; /* Byte 5 ASC */
- unsigned char ascq; /* Byte 6 ASCQ */
- unsigned char byte79[3]; /* Byte 7-9 */
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit byte10res : 6;
- PackedBit invert : 1;
- PackedBit svalid : 1;
-#else
- PackedBit svalid : 1;
- PackedBit invert : 1;
- PackedBit byte10res : 6;
-#endif
- unsigned char source[2];
- unsigned char pvoltag[36];
- unsigned char res4[4];
-} MediumTransportElementDescriptor_T;
-
-/* ======================================================= */
-/* ImportExportElementDescriptor_T */
-/* ======================================================= */
-typedef struct
-{
- unsigned char address[2]; /* Byte 1 = Element Address */
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit full : 1;
- PackedBit impexp : 1;
- PackedBit except : 1;
- PackedBit access : 1;
- PackedBit exenab : 1;
- PackedBit inenab : 1;
- PackedBit res : 2;
-#else
- PackedBit res : 2;
- PackedBit inenab : 1;
- PackedBit exenab : 1;
- PackedBit access : 1;
- PackedBit except : 1;
- PackedBit rsvd : 1;
- PackedBit full : 1;
-#endif
- unsigned char byte4;
- unsigned char asc;
- unsigned char ascq;
- unsigned char byte79[3];
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit byte10res : 6;
- PackedBit invert : 1;
- PackedBit svalid : 1;
-#else
- PackedBit svalid : 1;
- PackedBit invert : 1;
- PackedBit byte10res : 6;
-#endif
- unsigned char source[2];
- unsigned char pvoltag[36];
- unsigned char res4[4];
- unsigned char mediadomain[1];
- unsigned char mediatype[1];
- unsigned char res5[2];
-} ImportExportElementDescriptor_T;
-
-/* ======================================================= */
-/* StorageElementDescriptor_T */
-/* ======================================================= */
-typedef struct
-{
- unsigned char address[2];
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit full : 1;
- PackedBit rsvd : 1;
- PackedBit except : 1;
- PackedBit access : 1;
- PackedBit res : 4;
-#else
- PackedBit res : 4;
- PackedBit access : 1;
- PackedBit except : 1;
- PackedBit rsvd : 1;
- PackedBit full : 1;
-#endif
- unsigned char res1;
- unsigned char asc;
- unsigned char ascq;
- unsigned char res2[3];
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit res3 : 6;
- PackedBit invert : 1;
- PackedBit svalid : 1;
-#else
- PackedBit svalid : 1;
- PackedBit invert : 1;
- PackedBit res3 : 6;
-#endif
- unsigned char source[2];
- unsigned char pvoltag[36];
- unsigned char res4[4];
- unsigned char mediadomain[1];
- unsigned char mediatype[1];
- unsigned char res5[2];
-} StorageElementDescriptor_T;
-
-/* ======================================================= */
-/* DataTransferElementDescriptor_T */
-/* ======================================================= */
-typedef struct
-{
- unsigned char address[2];
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit full : 1;
- PackedBit rsvd : 1;
- PackedBit except : 1;
- PackedBit access : 1;
- PackedBit res : 4;
-#else
- PackedBit res : 4;
- PackedBit access : 1;
- PackedBit except : 1;
- PackedBit rsvd : 1;
- PackedBit full : 1;
-#endif
- unsigned char res1;
- unsigned char asc;
- unsigned char ascq;
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit lun : 3;
- PackedBit rsvd1 : 1;
- PackedBit luvalid : 1;
- PackedBit idvalid : 1;
- PackedBit rsvd2 : 1;
- PackedBit notbus : 1;
-#else
- PackedBit notbus : 1;
- PackedBit rsvd2 : 1;
- PackedBit idvalid : 1;
- PackedBit luvalid : 1;
- PackedBit rsvd1 : 1;
- PackedBit lun : 3;
-#endif
- unsigned char scsi;
- unsigned char res2;
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit res3 : 6;
- PackedBit invert : 1;
- PackedBit svalid : 1;
-#else
- PackedBit svalid : 1;
- PackedBit invert : 1;
- PackedBit res3 : 6;
-#endif
- unsigned char source[2];
- unsigned char pvoltag[36];
- unsigned char res4[42];
-} DataTransferElementDescriptor_T;
-
-/* ======================================================= */
-/* SCSIInquiry_T */
-/* ======================================================= */
-typedef struct
-{
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit type : 5;
- PackedBit qualifier : 3;
-
- PackedBit type_modifier : 7;
- PackedBit removable : 1;
-
- PackedBit ansi_version : 3;
- PackedBit ecma_version : 3;
- PackedBit iso_version : 2;
-
- PackedBit data_format : 4;
- PackedBit res3_54 : 2;
- PackedBit termiop : 1;
- PackedBit aenc : 1;
-#else
- PackedBit qualifier : 3;
- PackedBit type : 5;
-
- PackedBit removable : 1;
- PackedBit type_modifier : 7;
-
- PackedBit iso_version : 2;
- PackedBit ecma_version : 3;
- PackedBit ansi_version : 3;
-
- PackedBit aenc : 1;
- PackedBit termiop : 1;
- PackedBit res3_54 : 2;
- PackedBit data_format : 4;
-#endif
-
- unsigned char add_len;
-
- unsigned char res2;
- unsigned char res3;
-
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit softreset : 1;
- PackedBit cmdque : 1;
- PackedBit res7_2 : 1;
- PackedBit linked : 1;
- PackedBit sync : 1;
- PackedBit wbus16 : 1;
- PackedBit wbus32 : 1;
- PackedBit reladr : 1;
-#else
- PackedBit reladr : 1;
- PackedBit wbus32 : 1;
- PackedBit wbus16 : 1;
- PackedBit sync : 1;
- PackedBit linked : 1;
- PackedBit res7_2 : 1;
- PackedBit cmdque : 1;
- PackedBit softreset : 1;
-#endif
- char vendor_info[8];
- char prod_ident[16];
- char prod_version[4];
- char vendor_specific[20];
-} SCSIInquiry_T;
-
-/* ======================================================= */
-/* ModeSenseHeader_T */
-/* ======================================================= */
-typedef struct
-{
- unsigned char DataLength;
- unsigned char MediumType;
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit Speed:4;
- PackedBit BufferedMode:3;
- PackedBit WP:1;
-#else
- PackedBit WP:1;
- PackedBit BufferedMode:3;
- PackedBit Speed:4;
-#endif
- unsigned char BlockDescLength;
-} ModeSenseHeader_T;
-/* ======================================================= */
-/* ModeBlockDescriptor_T */
-/* ======================================================= */
-typedef struct
-{
- unsigned char DensityCode;
- unsigned char NumberOfBlocks[3];
- unsigned char Reserved;
- unsigned char BlockLength[3];
-} ModeBlockDescriptor_T;
-/* ======================================================= */
-/* LogSenseHeader_T */
-/* ======================================================= */
-typedef struct
-{
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit PageCode:6;
- PackedBit Reserved:2;
-#else
- PackedBit Reserved:2;
- PackedBit PageCode:6;
-#endif
- unsigned char Reserved1;
- unsigned char PageLength[2];
-} LogSenseHeader_T ;
-/* ======================================================= */
-/* LogParameters_T */
-/* ======================================================= */
-typedef struct
-{
- unsigned char ParameterCode[2];
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit LP:1;
- PackedBit RSCD:1;
- PackedBit TMC:1;
- PackedBit ETC:1;
- PackedBit TSD:1;
- PackedBit DS:1;
- PackedBit DU:1;
-#else
- PackedBit DU:1;
- PackedBit DS:1;
- PackedBit TSD:1;
- PackedBit ETC:1;
- PackedBit TMC:1;
- PackedBit RSCD:1;
- PackedBit LP:1;
-#endif
- char ParameterLength;
-} LogParameter_T;
-/*
- * Pages returned by the MODE_SENSE command
- */
-typedef struct {
- unsigned char SenseDataLength;
- char res[3];
-} ParameterListHeader_T;
-/* ======================================================= */
-/* ReadWriteErrorRecoveryPage_T */
-/* ======================================================= */
-typedef struct
-{
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit PageCode : 6;
- PackedBit res : 1;
- PackedBit PS : 1;
-#else
- PackedBit PS : 1;
- PackedBit res : 1;
- PackedBit PageCode : 6;
-#endif
- unsigned char ParameterListLength;
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit dcr :1; /* Disable ECC Correction */
- PackedBit dte :1; /* Disable Transfer on Error */
- PackedBit per :1; /* Enable Post Error reporting */
- PackedBit eer :1; /* Enable early recovery */
- PackedBit res1 :1;
- PackedBit tb :1; /* Transfer block (when not fully recovered) */
- PackedBit res2 :1;
- PackedBit res3 :1;
-#else
- PackedBit res3 :1;
- PackedBit res2 :1;
- PackedBit tb :1;
- PackedBit res1 :1;
- PackedBit eer :1;
- PackedBit per :1;
- PackedBit dte :1;
- PackedBit dcr :1;
-#endif
- unsigned char ReadRetryCount;
- unsigned char res4[4];
- unsigned char WriteRetryCount;
- unsigned char res5[3];
-} ReadWriteErrorRecoveryPage_T;
-/* ======================================================= */
-/* EDisconnectReconnectPage_T */
-/* ======================================================= */
-typedef struct
-{
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit PageCode : 6;
- PackedBit RSVD : 1;
- PackedBit PS : 1;
-#else
- PackedBit PS : 1;
- PackedBit RSVD : 1;
- PackedBit PageCode : 6;
-#endif
-
- unsigned char BufferFullRatio;
- unsigned char BufferEmptyRatio;
- unsigned char BusInactivityLimit[2];
- unsigned char DisconnectTimeLimit[2];
- unsigned char ConnectTimeLimit[2];
- unsigned char MaximumBurstSize[2];
-
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit DTDC :2;
- PackedBit res :6;
-#else
- PackedBit res :6;
- PackedBit DTDC :2;
-#endif
- unsigned char res1[3];
-} DisconnectReconnectPage_T;
-
-/* ======================================================= */
-/* EAAPage_T */
-/* ======================================================= */
-typedef struct
-{
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit PageCode : 6;
- PackedBit RSVD : 1;
- PackedBit PS : 1;
-#else
- PackedBit PS : 1;
- PackedBit RSVD : 1;
- PackedBit PageCode : 6;
-#endif
- unsigned char ParameterListLength;
- unsigned char MediumTransportElementAddress[2];
- unsigned char NoMediumTransportElements[2];
- unsigned char FirstStorageElementAddress[2];
- unsigned char NoStorageElements[2];
- unsigned char FirstImportExportElementAddress[2];
- unsigned char NoImportExportElements[2];
- unsigned char FirstDataTransferElementAddress[2];
- unsigned char NoDataTransferElements[2];
- unsigned char res[2];
-} EAAPage_T;
-/* ======================================================= */
-/* TransPortGeometryDescriptorPage_T */
-/* ======================================================= */
-typedef struct {
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit PageCode : 6;
- PackedBit RSVD : 1;
- PackedBit PS : 1;
-#else
- PackedBit PS : 1;
- PackedBit RSVD : 1;
- PackedBit PageCode : 6;
-#endif
- unsigned char ParameterListLength;
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit Rotate : 1;
- PackedBit res : 7;
-#else
- PackedBit res : 7;
- PackedBit Rotate : 1;
-#endif
- unsigned char MemberNumber;
-} TransportGeometryDescriptorPage_T;
-/* ======================================================= */
-/* DeviceCapabilitiesPage_T */
-/* ======================================================= */
-typedef struct
-{
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit PageCode : 6;
- PackedBit RSVD : 1;
- PackedBit PS : 1;
-#else
- PackedBit PS : 1;
- PackedBit RSVD : 1;
- PackedBit PageCode : 6;
-#endif
- unsigned char ParameterLength;
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit MT : 1;
- PackedBit ST : 1;
- PackedBit IE : 1;
- PackedBit DT : 1;
- PackedBit res1 : 4;
-#else
- PackedBit res1 : 4;
- PackedBit DT : 1;
- PackedBit IE : 1;
- PackedBit ST : 1;
- PackedBit MT : 1;
-#endif
- unsigned char res;
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit MT2MT : 1;
- PackedBit MT2ST : 1;
- PackedBit MT2IE : 1;
- PackedBit MT2DT : 1;
- PackedBit res2 : 4;
-#else
- PackedBit res2 : 4;
- PackedBit MT2DT : 1;
- PackedBit MT2IE : 1;
- PackedBit MT2ST : 1;
- PackedBit MT2MT : 1;
-#endif
-
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit ST2MT : 1;
- PackedBit ST2ST : 1;
- PackedBit ST2IE : 1;
- PackedBit ST2DT : 1;
- PackedBit res3 : 4;
-#else
- PackedBit res3 : 4;
- PackedBit ST2DT : 1;
- PackedBit ST2IE : 1;
- PackedBit ST2ST : 1;
- PackedBit ST2MT : 1;
-#endif
-
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit IE2MT : 1;
- PackedBit IE2ST : 1;
- PackedBit IE2IE : 1;
- PackedBit IE2DT : 1;
- PackedBit res4 : 4;
-#else
- PackedBit res4 : 4;
- PackedBit IE2DT : 1;
- PackedBit IE2IE : 1;
- PackedBit IE2ST : 1;
- PackedBit IE2MT : 1;
-#endif
-
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit DT2MT : 1;
- PackedBit DT2ST : 1;
- PackedBit DT2IE : 1;
- PackedBit DT2DT : 1;
- PackedBit res5 : 4;
-#else
- PackedBit res5 : 4;
- PackedBit DT2DT : 1;
- PackedBit DT2IE : 1;
- PackedBit DT2ST : 1;
- PackedBit DT2MT : 1;
-#endif
- unsigned char res0819[12];
-} DeviceCapabilitiesPage_T;
-/* ======================================================= */
-/* ModePageEXB10hLCD_T */
-/* ======================================================= */
-typedef struct ModePageEXB10hLCD
-{
- unsigned char PageCode;
- unsigned char ParameterListLength;
-
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit WriteLine4 : 1;
- PackedBit WriteLine3 : 1;
- PackedBit WriteLine2 : 1;
- PackedBit WriteLine1 : 1;
- PackedBit res : 4;
-#else
- PackedBit res : 4;
- PackedBit WriteLine1 : 1;
- PackedBit WriteLine2 : 1;
- PackedBit WriteLine3 : 1;
- PackedBit WriteLine4 : 1;
-#endif
- unsigned char reserved;
- unsigned char line1[20];
- unsigned char line2[20];
- unsigned char line3[20];
- unsigned char line4[20];
-} ModePageEXB10hLCD_T;
-/* ======================================================= */
-/* ModePageEXBBaudRatePage_T */
-/* ======================================================= */
-typedef struct ModePageEXBBaudRatePage
-{
- unsigned char PageCode;
- unsigned char ParameterListLength;
- unsigned char BaudRate[2];
-} ModePageEXBBaudRatePage_T;
-/* ======================================================= */
-/* ModePageEXB120VendorUnique_T */
-/* ======================================================= */
-typedef struct ModePageEXB120VendorUnique
-{
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit PageCode : 6;
- PackedBit RSVD0 : 1;
- PackedBit PS : 1;
-#else
- PackedBit PS : 1;
- PackedBit RSVD0 : 1;
- PackedBit PageCode : 6;
-#endif
- unsigned char ParameterListLength;
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit MDC : 2;
- PackedBit NRDC : 1;
- PackedBit RSVD : 1;
- PackedBit NBL : 1;
- PackedBit PRTY : 1;
- PackedBit UINT : 1;
- PackedBit AINT : 1;
-#else
- PackedBit AINT : 1;
- PackedBit UINT : 1;
- PackedBit PRTY : 1;
- PackedBit NBL : 1;
- PackedBit RSVD : 1;
- PackedBit NRDC : 1;
- PackedBit MDC : 2;
-#endif
- unsigned char MaxParityRetries;
- unsigned char DisplayMessage[60];
-} ModePageEXB120VendorUnique_T;
-/* ======================================================= */
-/* ModePageTreeFrogVendorUnique_T */
-/* ======================================================= */
-typedef struct ModePageTreeFrogVendorUnique
-{
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit PageCode : 6;
- PackedBit res0 : 1;
- PackedBit PS : 1;
-#else
- PackedBit PS : 1;
- PackedBit res0 : 1;
- PackedBit PageCode : 6;
-#endif
- unsigned char ParameterListLength;
-#ifdef LITTLE_ENDIAN_BITFIELDS
- PackedBit EBARCO : 1;
- PackedBit CHKSUM : 1;
- PackedBit res2 : 6;
-#else
- PackedBit res2 : 6;
- PackedBit CHKSUM : 1;
- PackedBit EBARCO : 1;
-#endif
- unsigned char res3;
- unsigned char res4;
- unsigned char res5;
- unsigned char res6;
- unsigned char res7;
- unsigned char res8;
- unsigned char res9;
-} ModePageTreeFrogVendorUnique_T;
-/* ======================================================= */
-/* ElementInfo_T */
-/* ======================================================= */
-typedef struct ElementInfo
-{
- int type; /* CHANGER - 1, STORAGE - 2, TAPE - 4 */
- int address; /* Adress of this Element */
- int from; /* From where did it come */
- char status; /* F -> Full, E -> Empty */
- char VolTag[TAG_SIZE+1]; /* Label Info if Barcode reader exsist */
- unsigned char ASC; /* Additional Sense Code from read element status */
- unsigned char ASCQ; /* */
- unsigned char scsi; /* if DTE, which scsi address */
-
- PackedBit svalid : 1;
- PackedBit invert : 1;
- PackedBit full : 1;
- PackedBit impexp : 1;
- PackedBit except : 1;
- PackedBit access : 1;
- PackedBit inenab : 1;
- PackedBit exenab : 1;
-
-} ElementInfo_T;
-
-
-
-typedef struct {
- char *ident; /* Name of the device from inquiry */
- char *type; /* Device Type, tape|robot */
- int (*function_move)(int, int, int);
- int (*function_status)(int, int);
- int (*function_reset_status)(int);
- int (*function_free)(void);
- int (*function_eject)(char *, int);
- int (*function_clean)(char *);
- int (*function_rewind)(int);
- int (*function_barcode)(int);
- int (*function_search)(void);
- int (*function_error)(int, unsigned char, unsigned char, unsigned char, unsigned char, RequestSense_T *);
-} ChangerCMD_T ;
-
-typedef struct {
- unsigned char command; /* The SCSI command byte */
- int length; /* How long */
- char *name; /* Name of the command */
-} SC_COM_T;
-
-typedef struct OpenFiles {
- int fd; /* The filedescriptor */
-#ifdef HAVE_CAM_LIKE_SCSI
- struct cam_device *curdev;
-#endif
- unsigned char avail; /* Is this device available */
- unsigned char devopen; /* Is the device open */
- unsigned char inqdone; /* Did we try to get device infos, was an open sucessfull */
- unsigned char SCSI; /* Can we send SCSI commands */
- int flags; /* Can be used for some flags ... */
- char *dev; /* The device which is used */
- char *type; /* Type of device, tape/changer */
- char *ConfigName; /* The name in the config */
- char ident[17]; /* The identifier from the inquiry command */
- ChangerCMD_T *functions; /* Pointer to the function array for this device */
- SCSIInquiry_T *inquiry; /* The result from the Inquiry */
-} OpenFiles_T;
-
-typedef struct LogPageDecode {
- int LogPage;
- char *ident;
- void (*decode)(LogParameter_T *, size_t);
-} LogPageDecode_T;
-
-typedef struct {
- char *ident; /* Ident as returned from the inquiry */
- char *vendor; /* Vendor as returned from the inquiry */
- unsigned char type; /* removable .... */
- unsigned char sense;/* Sense key as returned from the device */
- unsigned char asc; /* ASC as set in the sense struct */
- unsigned char ascq; /* ASCQ as set in the sense struct */
- int ret; /* What we think that we should return on this conditon */
- char text[80]; /* A short text describing this condition */
-} SenseType_T;
-
-/* ======================================================= */
-/* Function-Declaration */
-/* ======================================================= */
-int SCSI_OpenDevice(int);
-int OpenDevice(int, char *DeviceName, char *ConfigName, char *ident);
-
-int SCSI_CloseDevice(int DeviceFD);
-int CloseDevice(char *, int);
-int Tape_Eject(int);
-int Tape_Status(int);
-void DumpSense(void);
-int Sense2Action(char *ident,
- unsigned char type,
- unsigned char ignsense,
- unsigned char sense,
- unsigned char asc,
- unsigned char ascq,
- char **text);
-
-int SCSI_ExecuteCommand(int DeviceFD,
- Direction_T Direction,
- CDB_T CDB,
- size_t CDB_Length,
- void *DataBuffer,
- size_t DataBufferLength,
- RequestSense_T *RequestSense,
- size_t RequestSenseLength);
-
-int Tape_Ioctl(int DeviceFD, int command);
-void ChangerStatus(char * option,
- char * labelfile,
- int HasBarCode,
- char *changer_file,
- char *changer_dev,
- char *tape_device);
-
-int SCSI_Inquiry(int, SCSIInquiry_T *, size_t);
-int PrintInquiry(SCSIInquiry_T *);
-int DecodeSCSI(CDB_T CDB, char *string);
-
-int RequestSense(int fd, ExtendedRequestSense_T *s, int ClearErrorCounters);
-int DecodeSense(RequestSense_T *sense, char *pstring, FILE *out);
-int DecodeExtSense(ExtendedRequestSense_T *sense, char *pstring, FILE *out);
-
-void ChgExit(char *, char *, int);
-
-void ChangerReplay(char *option);
-void ChangerStatus(char *option, char *labelfile, int HasBarCode, char *changer_file, char *changer_dev, char *tape_device);
-int BarCode(int fd);
-int MapBarCode(char *labelfile, MBC_T *);
-
-int Tape_Ready(int fd, time_t wait_time);
-
-void Inventory(char *labelfile, int drive, int eject, int start, int stop, int clean);
-void ChangerDriverVersion(void);
-void PrintConf(void);
-int LogSense(int fd);
-int ScanBus(int print);
-void DebugPrint(int level, int section, char * fmt, ...);
-int DecodeSense(RequestSense_T *sense, char *pstring, FILE *out);
-void SCSI_OS_Version(void);
-int get_clean_state(char *tapedev);
-int find_empty(int fd, int start, int count);
-int get_slot_count(int fd);
-int get_drive_count(int fd);
-int GetCurrentSlot(int fd, int drive);
-void DumpDev(OpenFiles_T *p, char *device);
-int isempty(int fd, int slot);
-
-#endif /* !SCSIDEFS_H */
-/*
- * Local variables:
- * indent-tabs-mode: nil
- * c-file-style: gnu
- * End:
- */