X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=changer-src%2Fscsi-defs.h;fp=changer-src%2Fscsi-defs.h;h=0000000000000000000000000000000000000000;hb=b116e9366c7b2ea2c2eb53b0a13df4090e176235;hp=b32a180b2f08a17153fcf8b493dfa940d826f1c8;hpb=fd48f3e498442f0cbff5f3606c7c403d0566150e;p=debian%2Famanda diff --git a/changer-src/scsi-defs.h b/changer-src/scsi-defs.h deleted file mode 100644 index b32a180..0000000 --- a/changer-src/scsi-defs.h +++ /dev/null @@ -1,1207 +0,0 @@ - -/* - * 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: - */