SCSI Library
[Agents]

Collaboration diagram for SCSI Library:

Detailed Description

Platform independent SCSI layer.


Files

file  scsi_types.h
 Special numeric types are required for SCSI subsystem.

Classes

struct  cdb_Buf_t
class  scsi_CDB
 Base class for all CDB commands. More...
class  cdb_Inquiry
 CDB class, specialized for INQUIRY. More...
class  cdb_TestUnitReady
 Implementation of Test Unit Ready SCSI command. More...
class  cdb_LoadUnload
class  cdb_Erase
 Erase medium. More...
class  cdb_Locate
 SCSI command for positioning (also used to change partition). More...
class  cdb_Rewind
 Rewind a tape. More...
class  cdb_Space
class  cdb_ReadPosition
 Get current logical position on tape. More...
class  cdb_ReportDensity
 Get capacity infor from the medium/tape drive. More...
class  cdb_WriteFileMarks
 Write filemarks command. More...
class  cdb_Read
 SCSI read command. More...
class  cdb_Write
 SCSI write command. More...
class  cdb_ModeSense
 SCSI Mode Sense command. More...
class  cdb_ModeSelect
 SCSI Mode Select command. More...
class  cdb_LogSense
 SCSI Log Sense command. More...
class  cdb_LogSelect
 SCSI Log Select command. More...
class  cdb_MoveMedium
 SCSI Move Medium command. More...
class  cdb_ReadElementStatus
 SCSI READ ELEMENT STATUS command. More...
class  cdb_InitElementStatus
 Initialize element status (media changer). More...
class  cdb_ReadAttribute
 Read MAM attributes. More...
class  cdb_WriteAttribute
 Write MAM attributes. More...
class  scsi_Data
 Wrapper for data, returned by SCSI subsystem. More...
class  data_Inquiry
 Inquiry Data. More...
class  data_Position
 Results of read position command. More...
class  data_Density
 Results of report density support CDB. More...
class  data_Mode
 Mode data class. More...
class  data_Log
 Log data class. More...
class  data_ElementStatus
 Element status data (media changer). More...
class  data_Attribute
 MAM data attribute. More...
struct  cdb_Inquiry_t
struct  cdb_Rewind_t
struct  cdb_LoadUnload_t
struct  cdb_TestUnitReady_t
struct  cdb_RequestSense_t
struct  cdb_Space_t
struct  cdb_Erase_t
struct  cdb_Write_t
struct  cdb_Read_t
struct  cdb_WriteFileMarks_t
struct  cdb_ReadPosition_t
struct  cdb_Locate_t
struct  cdb_ModeSense_t
struct  cdb_ModeSelect_t
struct  cdb_LogSense_t
struct  cdb_ReportDensity_t
struct  cdb_LogSelect_t
struct  cdb_InitElemStatus_t
struct  cdb_MoveMedium_t
struct  cdb_ReadElemStatus_t
struct  cdb_ReadAttribute_t
 CDB Read MAM Attribute. More...
struct  cdb_WriteAttribute_t
struct  data_PositionShort_t
struct  data_StdInquiry_t
struct  data_InqPages_t
 Page code 00h. More...
struct  data_InqSerialNo_t
 Page code 80h. More...
struct  data_InqDevId_t
struct  data_InqDeviceID_t
 Page code 83h. More...
union  data_Inquiry_t
 Union of all inquiry pages. More...
struct  data_FieldPointer_t
 Member of data_Sense_t if sense key is ILLEGAL_REQUEST and sskv is 1. More...
struct  data_RetryCount_t
 Member of data_Sense_t if sense key is RECOVERED ERROR, MEDIUM ERROR, HARDWARE ERROR and sskv is 1. More...
struct  data_Attribute_t
 MAM Attributes. More...
struct  data_Progress_t
 Member of data_Sense_t if sense key is NOT_READY and sskv is 1. More...
struct  data_AITRuntime_t
 Member of data_Sense_t if sskv is 0. More...
struct  data_AIT_Sense_t
struct  data_LTO_Sense_t
struct  data_Sense_t
struct  data_ModeTapeHdr_t
struct  data_ModeHdr_t
 Mode sense parameter header of 6-byte MODE SENSE/SELECT command. More...
struct  data_ModeGenBlkDesc_t
struct  data_ModePartPage_t
 (TAPE) Mode page 0x11: Partition info (used also for Page 0x32) More...
struct  data_ModeAITConfigPage_t
 (TAPE) Page 0x31: AIT device configuration page More...
struct  data_ModeDevCfgPage_t
 (TAPE) Device configuration page 0x10 More...
struct  data_ModeElemAddrPage_t
 (EXCHANGER) Element address assignment page 0x1d More...
struct  data_ModeAIT_t
struct  data_ModePartitions_t
struct  data_ModeCompressPage_t
struct  data_ModeCompress_t
struct  data_ModeDevConfig_t
struct  data_ModeElemAddr_t
struct  data_Mode_t
struct  data_LogHdr_t
struct  data_LogPartCapacity_t
 Log Page 31h (Tape capacity info). More...
struct  data_LogPages_t
 Log Page 31 parameter code 00h. More...
struct  data_LogTapeCapacity_t
struct  data_LogMICMedID_t
struct  data_LogMICFixedParam_t
 MIC Fixed Length Info Page (0x3D). More...
struct  data_LogMICFixed_t
struct  data_LogMICVarParam_t
 MIC Variable Length Info Page (0x3E). More...
struct  data_LogMICVar_t
struct  data_Log_t
struct  data_RDSHdr_t
struct  data_RDSDescriptor_t
struct  data_ReportDensitySupport_t
struct  data_ESHdr_t
struct  data_ESPageHdr_t
struct  data_ESDescriptor_t
class  scsi_SenseVnd
class  scsi_IO
 Interface class to access SCSI devices. More...
class  scsi_LnxSG
 Implementation of scsi_IO interface using Linux SCSI Generic (sg) driver. More...
class  scsi_UInt16
 Class that behaves like a UInt16_t. More...
class  scsi_Wrapper16
 Class thatis a wrapper around scsi_UInt16_t and behaves like a UInt16_t. More...
class  scsi_UInt24
 Class that behaves like a 24-bit integer. More...
class  scsi_Wrapper24
 Class thatis a wrapper around scsi_UInt24_t and behaves like a 24-bit integer. More...
class  scsi_UInt32
 Class that behaves like a UInt32_t. More...
class  scsi_Wrapper32
 Class thatis a wrapper around scsi_UInt16_t and behaves like a UInt16_t. More...

Defines

#define op_TEST_UNIT_READY   0x00
#define op_REZERO_UNIT   0x01
#define op_REWIND   (op_REZERO_UNIT)
#define op_REQUEST_SENSE   0x03
#define op_FORMAT   0x04
#define op_FORMAT_UNIT   (op_FORMAT)
#define op_FORMAT_MEDIUM   (op_FORMAT)
#define op_READ_BLOCK_LIMITS   0x05
#define op_REASSIGN_BLOCKS   0x07
#define op_INIT_ELEMENT_STATUS   (op_REASSIGN_BLOCKS)
#define op_READ_6   0x08
#define op_WRITE_6   0x0A
#define op_SEND   (op_WRITE_6)
#define op_SEND_MESSAGE   (op_WRITE_6)
#define op_PRINT   (op_WRITE_6)
#define op_SEEK_6   0x0B
#define op_SLEW_AND_PRINT   (op_SEEK_6)
#define op_READ_REVERSE   0x0F
#define op_WRITE_FILEMARKS   0x10
#define op_SYNCHRONIZE_BUFFER   (op_WRITE_FILEMARKS)
#define op_SPACE   0x11
#define op_INQUIRY   0x12
#define op_VERIFY_6   0x13
#define op_RECOVER_BUFFERED_DATA   0x14
#define op_MODE_SELECT   0x15
#define op_RESERVE   0x16
#define op_RESERVE_ELEMENT   (op_RESERVE)
#define op_RELEASE   0x17
#define op_RELEASE_ELEMENT   (op_RELEASE)
#define op_COPY   0x18
#define op_ERASE   0x19
#define op_MODE_SENSE   0x1A
#define op_START_STOP   0x1B
#define op_LOAD_UNLOAD   (op_START_STOP)
#define op_SCAN   (op_START_STOP)
#define op_STOP_PRINT   (op_START_STOP)
#define op_RECEIVE_DIAGNOSTIC   0x1C
#define op_SEND_DIAGNOSTIC   0x1D
#define op_ALLOW_MEDIUM_REMOVAL   0x1E
#define op_READ_FORMAT_CAPACITIES   0x23
#define op_SET_WINDOW   0x24
#define op_READ_CAPACITY   0x25
#define op_READ_CARD_CAPACITY   (op_READ_CAPACITY)
#define op_GET_WINDOW   (op_READ_CAPACITY)
#define op_READ_10   0x28
#define op_WRITE_10   0x2a
#define op_SEEK_10   0x2b
#define op_LOCATE   (op_SEEK_10)
#define op_WRITE_VERIFY   0x2e
#define op_VERIFY_10   0x2f
#define op_SEARCH_HIGH   0x30
#define op_SEARCH_EQUAL   0x31
#define op_SEARCH_LOW   0x32
#define op_SET_LIMITS   0x33
#define op_PRE_FETCH   0x34
#define op_READ_POSITION   0x34
#define op_SYNCHRONIZE_CACHE   0x35
#define op_LOCK_UNLOCK_CACHE   0x36
#define op_READ_DEFECT_DATA   0x37
#define op_MEDIUM_SCAN   0x38
#define op_COMPARE   0x39
#define op_COPY_VERIFY   0x3a
#define op_WRITE_BUFFER   0x3b
#define op_READ_BUFFER   0x3c
#define op_UPDATE_BLOCK   0x3d
#define op_READ_LONG   0x3e
#define op_WRITE_LONG   0x3f
#define op_CHANGE_DEFINITION   0x40
#define op_WRITE_SAME   0x41
#define op_READ_TOC   0x43
#define op_REPORT_DENSITY_SUPPORT   0x44
#define op_LOG_SELECT   0x4c
#define op_LOG_SENSE   0x4d
#define op_MODE_SELECT_10   0x55
#define op_RESERVE_10   0x56
#define op_RELEASE_10   0x57
#define op_MODE_SENSE_10   0x5a
#define op_PERSISTENT_RESERVE_IN   0x5e
#define op_PERSISTENT_RESERVE_OUT   0x5f
#define op_READ_ATTRIBUTE   0x8c
#define op_WRITE_ATTRIBUTE   0x8d
#define op_MOVE_MEDIUM   0xa5
#define op_READ_12   0xa8
#define op_WRITE_12   0xaa
#define op_WRITE_VERIFY_12   0xae
#define op_SEARCH_HIGH_12   0xb0
#define op_SEARCH_EQUAL_12   0xb1
#define op_SEARCH_LOW_12   0xb2
#define op_READ_ELEMENT_STATUS   0xb8
#define op_SEND_VOLUME_TAG   0xb6
#define op_WRITE_LONG_2   0xea
#define st_STATUS_MASK   0x3E
#define sns_NOT_DEFERRED   0x70
#define sns_DEFERRED   0x71
#define inqstd_VENDOR_ID_LEN_d   (8)
#define inqstd_PRODUCT_ID_LEN_d   (16)
#define inqstd_PROD_REVISION_LEN_d   (4)
#define mic_AVAILABLE_d   UInt16_t(0x03)
#define mic_SIZEVOLNOTE_d   UInt16_t(0x04)
#define mic_SERNUM_d   UInt16_t(0x06)
#define mic_NOTEMAP_d   UInt16_t(0x14)
#define mic_SIZEPARTNOTE_d   UInt16_t(0x18)
 Parameter code for partition 0.
#define mic_DATAVOLNOTE_d   UInt16_t(0x01)
#define mic_DATAPARTNOTE_d   UInt16_t(0x02)
 Parameter code for partition 0.
#define mic_MAXNOTESIZE_d   (1024*16)
 Maximum size that is read/written from/to MIC.
#define scsi_TIMEOUT_FOREVER_d   (UINT_MAX)
#define scsi_TIMEOUT_NORMAL_d   (20*60*1000)
#define scsi_TIMEOUT_LONG_d   (30*60*1000)
#define scsi_TIMEOUT_LONGLONG_d   (200*60*1000)
#define scsi_TIMEOUT_FORMAT_d   (12*60*60*1000)

Typedefs

typedef set< UInt8_tdata_PageSet
typedef UInt8_t scsi_UInt16_t [2]
typedef UInt8_t scsi_UInt24_t [3]
typedef UInt8_t scsi_UInt32_t [4]

Enumerations

enum  Direction_e {
  TRANSFER_NONE = -1, TRANSFER_OUT = -2,
  TRANSFER_IN = -3, TRANSFER_INOUT = -4,
  TRANSFER_UNKNOWN = -5
}
enum  spaceUnit_e {
  spaceBlocks = 0x0, spaceFileMarks = 0x1,
  spaceEndOfData = 0x3, spaceSetMarks = 0x4
}
 Tape positioning command. More...
enum  Mode_t { mode_DDS = 0, mode_AIT = 1 }
enum  scsi_Status_e {
  st_GOOD = 0x00, st_CHECK_CONDITION = 0x02,
  st_CONDITION_GOOD = 0x04, st_BUSY = 0x08,
  st_INTERMEDIATE_GOOD = 0x10, st_INTERMEDIATE_C_GOOD = 0x14,
  st_RESERVATION_CONFLICT = 0x18, st_COMMAND_TERMINATED = 0x22,
  st_QUEUE_FULL = 0x28, st_ACA_ACTIVE = 0x30
}
 SCSI-3 status codes:. More...
enum  scsi_SenseKey_e {
  sk_NO_SENSE = 0x00, sk_RECOVERED_ERROR = 0x01,
  sk_NOT_READY = 0x02, sk_MEDIUM_ERROR = 0x03,
  sk_HARDWARE_ERROR = 0x04, sk_ILLEGAL_REQUEST = 0x05,
  sk_UNIT_ATTENTION = 0x06, sk_DATA_PROTECT = 0x07,
  sk_BLANK_CHECK = 0x08, sk_VENDOR_SPECIFIC = 0x09,
  sk_COPY_ABORTED = 0x0A, sk_ABORTED_COMMAND = 0x0B,
  sk_OBSOLETE = 0x0C, sk_VOLUME_OVERFLOW = 0x0D,
  sk_MISCOMPARE = 0x0E, sk_RESERVED = 0x0F
}
enum  scsi_DeviceType_e {
  dt_DISK = 0x00, dt_TAPE = 0x01,
  dt_PRINTER = 0x02, dt_PROCESSOR = 0x03,
  dt_WORM = 0x04, dt_ROM = 0x05,
  dt_SCANNER = 0x06, dt_MOD = 0x07,
  dt_MEDIUM_CHANGER = 0x08, dt_COMM = 0x09,
  dt_PRESS1 = 0x0A, dt_PRESS2 = 0x0B,
  dt_STORAGE_ARRAY = 0x0C, dt_ENCLOSURE = 0x0D,
  dt_RBC = 0x0E, dt_OCRW = 0x0F,
  dt_RESERVED2 = 0x10, dt_OSD = 0x11,
  dt_NO_LUN = 0x7F
}

Functions

UInt8_t scsi_CommandSize (UInt8_t a_cdbCode)
bool scsi_IsVendorSpecificASC (UInt8_t a_asc, UInt8_t a_ascq)
IVD_SCSI_DECL_d const char * scsi_GetDeviceTypeText (scsi_DeviceType_e a_dt)
const string scsi_GetOpcodeText (UInt16_t a_opcode)
const char * scsi_GetStatusText (scsi_Status_e a_status)
const char * scsi_GetSenseKeyText (scsi_SenseKey_e a_sense)
const scsi_SenseVndscsi_GetVndAddSnsTbl (const string &a_vendor, const string &a_product)
const string scsi_GetSenseAdditional (UInt8_t a_asc, UInt8_t a_ascq, const scsi_SenseVnd *a_vndErr)
const string scsi_GetASCText (const data_Sense_t &a_sense, const scsi_SenseVnd *a_vndErr)
const string scsi_GetSenseText (const data_Sense_t &a_sense, scsi_DeviceType_e a_dt, const scsi_SenseVnd *a_vndErr)


Define Documentation

#define inqstd_PROD_REVISION_LEN_d   (4)

Definition at line 211 of file scsi_const.h.

Referenced by scsi_IO::InqStandard().

#define inqstd_PRODUCT_ID_LEN_d   (16)

Definition at line 210 of file scsi_const.h.

Referenced by scsi_IO::InqStandard().

#define inqstd_VENDOR_ID_LEN_d   (8)

Definition at line 209 of file scsi_const.h.

Referenced by scsi_IO::InqStandard().

#define mic_AVAILABLE_d   UInt16_t(0x03)

Definition at line 214 of file scsi_const.h.

Referenced by bea_MicMemory::GetAvailable(), data_Log::GetMICAvailSize(), and Micfree().

#define mic_DATAPARTNOTE_d   UInt16_t(0x02)

Parameter code for partition 0.

Just add partition index for other partitions.

Definition at line 230 of file scsi_const.h.

Referenced by Micnotelen().

#define mic_DATAVOLNOTE_d   UInt16_t(0x01)

#define mic_MAXNOTESIZE_d   (1024*16)

Maximum size that is read/written from/to MIC.

Definition at line 233 of file scsi_const.h.

Referenced by data_Log::SetMICNote().

#define mic_NOTEMAP_d   UInt16_t(0x14)

Definition at line 217 of file scsi_const.h.

Referenced by Micnotemap().

#define mic_SERNUM_d   UInt16_t(0x06)

#define mic_SIZEPARTNOTE_d   UInt16_t(0x18)

Parameter code for partition 0.

Add partition offset for other partitions.

Definition at line 222 of file scsi_const.h.

Referenced by bea_MicMemory::GetSize().

#define mic_SIZEVOLNOTE_d   UInt16_t(0x04)

Definition at line 215 of file scsi_const.h.

Referenced by bea_MicMemory::GetSize(), Micnotesize(), and bea_MicMemory::Read().

#define op_ALLOW_MEDIUM_REMOVAL   0x1E

Definition at line 63 of file scsi_const.h.

#define op_CHANGE_DEFINITION   0x40

Definition at line 93 of file scsi_const.h.

#define op_COMPARE   0x39

Definition at line 86 of file scsi_const.h.

#define op_COPY   0x18

Definition at line 54 of file scsi_const.h.

#define op_COPY_VERIFY   0x3a

Definition at line 87 of file scsi_const.h.

#define op_ERASE   0x19

Definition at line 55 of file scsi_const.h.

Referenced by cdb_Erase::cdb_Erase().

#define op_FORMAT   0x04

Definition at line 29 of file scsi_const.h.

#define op_FORMAT_MEDIUM   (op_FORMAT)

Definition at line 31 of file scsi_const.h.

#define op_FORMAT_UNIT   (op_FORMAT)

Definition at line 30 of file scsi_const.h.

#define op_GET_WINDOW   (op_READ_CAPACITY)

Definition at line 68 of file scsi_const.h.

#define op_INIT_ELEMENT_STATUS   (op_REASSIGN_BLOCKS)

Definition at line 34 of file scsi_const.h.

Referenced by cdb_InitElementStatus::cdb_InitElementStatus().

#define op_INQUIRY   0x12

Definition at line 46 of file scsi_const.h.

Referenced by cdb_Inquiry::cdb_Inquiry().

#define op_LOAD_UNLOAD   (op_START_STOP)

Definition at line 58 of file scsi_const.h.

#define op_LOCATE   (op_SEEK_10)

Definition at line 73 of file scsi_const.h.

Referenced by cdb_Locate::cdb_Locate().

#define op_LOCK_UNLOCK_CACHE   0x36

Definition at line 83 of file scsi_const.h.

#define op_LOG_SELECT   0x4c

Definition at line 97 of file scsi_const.h.

Referenced by cdb_LogSelect::cdb_LogSelect().

#define op_LOG_SENSE   0x4d

Definition at line 98 of file scsi_const.h.

Referenced by cdb_LogSense::cdb_LogSense().

#define op_MEDIUM_SCAN   0x38

Definition at line 85 of file scsi_const.h.

#define op_MODE_SELECT   0x15

Definition at line 49 of file scsi_const.h.

Referenced by cdb_ModeSelect::cdb_ModeSelect().

#define op_MODE_SELECT_10   0x55

Definition at line 99 of file scsi_const.h.

#define op_MODE_SENSE   0x1A

Definition at line 56 of file scsi_const.h.

Referenced by cdb_ModeSense::cdb_ModeSense().

#define op_MODE_SENSE_10   0x5a

Definition at line 102 of file scsi_const.h.

#define op_MOVE_MEDIUM   0xa5

Definition at line 107 of file scsi_const.h.

Referenced by cdb_MoveMedium::cdb_MoveMedium().

#define op_PERSISTENT_RESERVE_IN   0x5e

Definition at line 103 of file scsi_const.h.

#define op_PERSISTENT_RESERVE_OUT   0x5f

Definition at line 104 of file scsi_const.h.

#define op_PRE_FETCH   0x34

Definition at line 80 of file scsi_const.h.

#define op_PRINT   (op_WRITE_6)

Definition at line 39 of file scsi_const.h.

#define op_READ_10   0x28

Definition at line 70 of file scsi_const.h.

Referenced by scsi_LnxSG::DoIOCtl(), and scsi_IO::IOCtl().

#define op_READ_12   0xa8

Definition at line 108 of file scsi_const.h.

#define op_READ_6   0x08

Definition at line 35 of file scsi_const.h.

Referenced by cdb_Read::cdb_Read(), scsi_LnxSG::DoIOCtl(), and scsi_IO::IOCtl().

#define op_READ_ATTRIBUTE   0x8c

Definition at line 105 of file scsi_const.h.

Referenced by cdb_ReadAttribute::cdb_ReadAttribute().

#define op_READ_BLOCK_LIMITS   0x05

Definition at line 32 of file scsi_const.h.

#define op_READ_BUFFER   0x3c

Definition at line 89 of file scsi_const.h.

#define op_READ_CAPACITY   0x25

Definition at line 66 of file scsi_const.h.

#define op_READ_CARD_CAPACITY   (op_READ_CAPACITY)

Definition at line 67 of file scsi_const.h.

#define op_READ_DEFECT_DATA   0x37

Definition at line 84 of file scsi_const.h.

#define op_READ_ELEMENT_STATUS   0xb8

Definition at line 114 of file scsi_const.h.

Referenced by cdb_ReadElementStatus::cdb_ReadElementStatus().

#define op_READ_FORMAT_CAPACITIES   0x23

Definition at line 64 of file scsi_const.h.

#define op_READ_LONG   0x3e

Definition at line 91 of file scsi_const.h.

#define op_READ_POSITION   0x34

Definition at line 81 of file scsi_const.h.

Referenced by cdb_ReadPosition::cdb_ReadPosition().

#define op_READ_REVERSE   0x0F

Definition at line 42 of file scsi_const.h.

#define op_READ_TOC   0x43

Definition at line 95 of file scsi_const.h.

#define op_REASSIGN_BLOCKS   0x07

Definition at line 33 of file scsi_const.h.

#define op_RECEIVE_DIAGNOSTIC   0x1C

Definition at line 61 of file scsi_const.h.

#define op_RECOVER_BUFFERED_DATA   0x14

Definition at line 48 of file scsi_const.h.

#define op_RELEASE   0x17

Definition at line 52 of file scsi_const.h.

#define op_RELEASE_10   0x57

Definition at line 101 of file scsi_const.h.

#define op_RELEASE_ELEMENT   (op_RELEASE)

Definition at line 53 of file scsi_const.h.

#define op_REPORT_DENSITY_SUPPORT   0x44

Definition at line 96 of file scsi_const.h.

Referenced by cdb_ReportDensity::cdb_ReportDensity().

#define op_REQUEST_SENSE   0x03

Definition at line 28 of file scsi_const.h.

#define op_RESERVE   0x16

Definition at line 50 of file scsi_const.h.

#define op_RESERVE_10   0x56

Definition at line 100 of file scsi_const.h.

#define op_RESERVE_ELEMENT   (op_RESERVE)

Definition at line 51 of file scsi_const.h.

#define op_REWIND   (op_REZERO_UNIT)

Definition at line 27 of file scsi_const.h.

Referenced by cdb_Rewind::cdb_Rewind().

#define op_REZERO_UNIT   0x01

Definition at line 26 of file scsi_const.h.

#define op_SCAN   (op_START_STOP)

Definition at line 59 of file scsi_const.h.

#define op_SEARCH_EQUAL   0x31

Definition at line 77 of file scsi_const.h.

#define op_SEARCH_EQUAL_12   0xb1

Definition at line 112 of file scsi_const.h.

#define op_SEARCH_HIGH   0x30

Definition at line 76 of file scsi_const.h.

#define op_SEARCH_HIGH_12   0xb0

Definition at line 111 of file scsi_const.h.

#define op_SEARCH_LOW   0x32

Definition at line 78 of file scsi_const.h.

#define op_SEARCH_LOW_12   0xb2

Definition at line 113 of file scsi_const.h.

#define op_SEEK_10   0x2b

Definition at line 72 of file scsi_const.h.

#define op_SEEK_6   0x0B

Definition at line 40 of file scsi_const.h.

#define op_SEND   (op_WRITE_6)

Definition at line 37 of file scsi_const.h.

#define op_SEND_DIAGNOSTIC   0x1D

Definition at line 62 of file scsi_const.h.

#define op_SEND_MESSAGE   (op_WRITE_6)

Definition at line 38 of file scsi_const.h.

#define op_SEND_VOLUME_TAG   0xb6

Definition at line 115 of file scsi_const.h.

#define op_SET_LIMITS   0x33

Definition at line 79 of file scsi_const.h.

#define op_SET_WINDOW   0x24

Definition at line 65 of file scsi_const.h.

#define op_SLEW_AND_PRINT   (op_SEEK_6)

Definition at line 41 of file scsi_const.h.

#define op_SPACE   0x11

Definition at line 45 of file scsi_const.h.

Referenced by cdb_Space::cdb_Space().

#define op_START_STOP   0x1B

Definition at line 57 of file scsi_const.h.

Referenced by cdb_LoadUnload::cdb_LoadUnload().

#define op_STOP_PRINT   (op_START_STOP)

Definition at line 60 of file scsi_const.h.

#define op_SYNCHRONIZE_BUFFER   (op_WRITE_FILEMARKS)

Definition at line 44 of file scsi_const.h.

#define op_SYNCHRONIZE_CACHE   0x35

Definition at line 82 of file scsi_const.h.

#define op_TEST_UNIT_READY   0x00

Definition at line 25 of file scsi_const.h.

Referenced by cdb_TestUnitReady::cdb_TestUnitReady().

#define op_UPDATE_BLOCK   0x3d

Definition at line 90 of file scsi_const.h.

#define op_VERIFY_10   0x2f

Definition at line 75 of file scsi_const.h.

#define op_VERIFY_6   0x13

Definition at line 47 of file scsi_const.h.

#define op_WRITE_10   0x2a

Definition at line 71 of file scsi_const.h.

Referenced by scsi_LnxSG::DoIOCtl(), and scsi_IO::IOCtl().

#define op_WRITE_12   0xaa

Definition at line 109 of file scsi_const.h.

#define op_WRITE_6   0x0A

Definition at line 36 of file scsi_const.h.

Referenced by cdb_Write::cdb_Write(), scsi_LnxSG::DoIOCtl(), and scsi_IO::IOCtl().

#define op_WRITE_ATTRIBUTE   0x8d

Definition at line 106 of file scsi_const.h.

Referenced by cdb_WriteAttribute::cdb_WriteAttribute().

#define op_WRITE_BUFFER   0x3b

Definition at line 88 of file scsi_const.h.

#define op_WRITE_FILEMARKS   0x10

Definition at line 43 of file scsi_const.h.

Referenced by cdb_WriteFileMarks::cdb_WriteFileMarks().

#define op_WRITE_LONG   0x3f

Definition at line 92 of file scsi_const.h.

#define op_WRITE_LONG_2   0xea

Definition at line 116 of file scsi_const.h.

#define op_WRITE_SAME   0x41

Definition at line 94 of file scsi_const.h.

#define op_WRITE_VERIFY   0x2e

Definition at line 74 of file scsi_const.h.

#define op_WRITE_VERIFY_12   0xae

Definition at line 110 of file scsi_const.h.

#define scsi_TIMEOUT_FOREVER_d   (UINT_MAX)

Definition at line 23 of file scsi_io.h.

#define scsi_TIMEOUT_FORMAT_d   (12*60*60*1000)

Definition at line 28 of file scsi_io.h.

Referenced by Append(), bea_TapeMedium::AppendVolume(), Fmt(), and bea_TapeMedium::Format().

#define scsi_TIMEOUT_LONG_d   (30*60*1000)

Definition at line 26 of file scsi_io.h.

Referenced by Inventory(), and la_SCSILibrary::Status().

#define scsi_TIMEOUT_LONGLONG_d   (200*60*1000)

Definition at line 27 of file scsi_io.h.

#define scsi_TIMEOUT_NORMAL_d   (20*60*1000)

Definition at line 25 of file scsi_io.h.

#define sns_DEFERRED   0x71

Definition at line 180 of file scsi_const.h.

Referenced by ParseTapeMedium(), scsi_GetSenseText(), and scsi_IO::SkipAttAndDeferred().

#define sns_NOT_DEFERRED   0x70

Definition at line 179 of file scsi_const.h.

Referenced by scsi_GetSenseText().

#define st_STATUS_MASK   0x3E

Definition at line 155 of file scsi_const.h.

Referenced by scsi_WinSG::GetCDBStatus(), and scsi_LnxSG::GetCDBStatus().


Typedef Documentation

typedef set<UInt8_t> data_PageSet

Definition at line 26 of file data.h.

typedef UInt8_t scsi_UInt16_t[2]

Definition at line 47 of file scsi_types.h.

typedef UInt8_t scsi_UInt24_t[3]

Definition at line 48 of file scsi_types.h.

typedef UInt8_t scsi_UInt32_t[4]

Definition at line 49 of file scsi_types.h.


Enumeration Type Documentation

Enumerator:
TRANSFER_NONE 
TRANSFER_OUT 
TRANSFER_IN 
TRANSFER_INOUT 
TRANSFER_UNKNOWN 

Definition at line 51 of file cdb.h.

00051                  {
00052         TRANSFER_NONE   = -1,
00053         TRANSFER_OUT    = -2,
00054         TRANSFER_IN     = -3,
00055         TRANSFER_INOUT  = -4,
00056         TRANSFER_UNKNOWN= -5
00057     } Direction_e;

enum Mode_t

Enumerator:
mode_DDS  DDS mode.
mode_AIT  AIT mode.

Definition at line 28 of file data.h.

00028              {
00030     mode_DDS            = 0,
00032     mode_AIT            = 1
00033 } Mode_t;

Enumerator:
dt_DISK 
dt_TAPE 
dt_PRINTER 
dt_PROCESSOR 
dt_WORM 
dt_ROM 
dt_SCANNER 
dt_MOD 
dt_MEDIUM_CHANGER 
dt_COMM 
dt_PRESS1 
dt_PRESS2 
dt_STORAGE_ARRAY 
dt_ENCLOSURE 
dt_RBC 
dt_OCRW 
dt_RESERVED2 
dt_OSD 
dt_NO_LUN 

Definition at line 185 of file scsi_const.h.

00185              {
00186     dt_DISK             = 0x00,
00187     dt_TAPE             = 0x01,
00188     dt_PRINTER          = 0x02,
00189     dt_PROCESSOR        = 0x03,    /* HP scanners use this */
00190     dt_WORM             = 0x04,    /* Treated as ROM by our system */
00191     dt_ROM              = 0x05,
00192     dt_SCANNER          = 0x06,
00193     dt_MOD              = 0x07,    /* Magneto-optical disk - treated as dt_DISK */
00194     dt_MEDIUM_CHANGER   = 0x08,
00195     dt_COMM             = 0x09,    /* Communications device */
00196     dt_PRESS1           = 0x0A,    /* Pre-press devices */
00197     dt_PRESS2           = 0x0B,
00198     dt_STORAGE_ARRAY    = 0x0C,
00199     dt_ENCLOSURE        = 0x0D,    /* Enclosure Services Device */
00200     dt_RBC              = 0x0E,    /* RBC Simplified direct-access device (e.g., magnetic disk) */
00201     dt_OCRW             = 0x0F,    /* OCRW Optical card reader/writer device */
00202     dt_RESERVED2        = 0x10,
00203     dt_OSD              = 0x11,    /* OSD Object-based Storage Device */
00204     dt_NO_LUN           = 0x7F
00205 } scsi_DeviceType_e;

Enumerator:
sk_NO_SENSE 
sk_RECOVERED_ERROR 
sk_NOT_READY 
sk_MEDIUM_ERROR 
sk_HARDWARE_ERROR 
sk_ILLEGAL_REQUEST 
sk_UNIT_ATTENTION 
sk_DATA_PROTECT 
sk_BLANK_CHECK 
sk_VENDOR_SPECIFIC 
sk_COPY_ABORTED 
sk_ABORTED_COMMAND 
sk_OBSOLETE 
sk_VOLUME_OVERFLOW 
sk_MISCOMPARE 
sk_RESERVED 

Definition at line 160 of file scsi_const.h.

00160              {
00161     sk_NO_SENSE            = 0x00,
00162     sk_RECOVERED_ERROR     = 0x01,
00163     sk_NOT_READY           = 0x02,
00164     sk_MEDIUM_ERROR        = 0x03,
00165     sk_HARDWARE_ERROR      = 0x04,
00166     sk_ILLEGAL_REQUEST     = 0x05,
00167     sk_UNIT_ATTENTION      = 0x06,
00168     sk_DATA_PROTECT        = 0x07,
00169     sk_BLANK_CHECK         = 0x08,
00170     sk_VENDOR_SPECIFIC     = 0x09,
00171     sk_COPY_ABORTED        = 0x0A,
00172     sk_ABORTED_COMMAND     = 0x0B,
00173     sk_OBSOLETE            = 0x0C,
00174     sk_VOLUME_OVERFLOW     = 0x0D,
00175     sk_MISCOMPARE          = 0x0E,
00176     sk_RESERVED            = 0x0F
00177 } scsi_SenseKey_e;

SCSI-3 status codes:.

0x00 - GOOD 0x02 - CHECK CONDITION 0x04 - CONDITION MET 0x08 - BUSY 0x10 - INTERMEDIATE 0x14 - INTERMEDIATE-CONDITION MET 0x18 - RESERVATION CONFLICT 0x22 - COMMAND TERMINATED 0x28 - TASK SET FULL 0x30 - ACA ACTIVE

Linux SG: Use "sg_io_hdr_t.status" (not "sg_io_hdr_t.masked_status") byte and mask it with 0x3E to strip vendor specific bytes.

Enumerator:
st_GOOD 
st_CHECK_CONDITION 
st_CONDITION_GOOD 
st_BUSY 
st_INTERMEDIATE_GOOD 
st_INTERMEDIATE_C_GOOD 
st_RESERVATION_CONFLICT 
st_COMMAND_TERMINATED 
st_QUEUE_FULL 
st_ACA_ACTIVE 

Definition at line 142 of file scsi_const.h.

00142              {
00143     st_GOOD                 = 0x00,
00144     st_CHECK_CONDITION      = 0x02,
00145     st_CONDITION_GOOD       = 0x04,
00146     st_BUSY                 = 0x08,
00147     st_INTERMEDIATE_GOOD    = 0x10,
00148     st_INTERMEDIATE_C_GOOD  = 0x14,
00149     st_RESERVATION_CONFLICT = 0x18,
00150     st_COMMAND_TERMINATED   = 0x22,
00151     st_QUEUE_FULL           = 0x28,
00152     st_ACA_ACTIVE           = 0x30 // auto contingent allegiance
00153 } scsi_Status_e;

Tape positioning command.

Enumerator:
spaceBlocks 
spaceFileMarks 
spaceEndOfData 
spaceSetMarks 

Definition at line 256 of file cdb.h.

00256                  {
00257     spaceBlocks         = 0x0,
00258     spaceFileMarks      = 0x1,
00259     spaceEndOfData      = 0x3,
00260     spaceSetMarks       = 0x4
00261 };


Function Documentation

UInt8_t scsi_CommandSize ( UInt8_t  a_cdbCode  ) 

Definition at line 35 of file scsi_err.cpp.

Referenced by scsi_LnxSG::CheckDriverStatus(), scsi_LnxSG::CheckHostStatus(), and scsi_IO::IOCtl().

00035                                            {
00036     switch ((a_cdbCode >> 5) & 0x7) {
00037     case 0:
00038         return 6;
00039     case 1: case 2: case 6: case 7:
00040         return 10;
00041     case 3: case 5:
00042         return 12;
00043         break;
00044     case 4:
00045         return 16;
00046     default:
00047         return 10;
00048     }
00049 }

Here is the caller graph for this function:

const string scsi_GetASCText ( const data_Sense_t a_sense,
const scsi_SenseVnd a_vndErr 
)

Definition at line 668 of file scsi_err.cpp.

References data_Sense_t::additionalLen, data_Sense_t::asc, data_Sense_t::ascq, cmn_Num2Str(), and scsi_GetSenseAdditional().

Referenced by scsi_IO::CheckStatusAndSense(), and scsi_IO::WaitToBecomeReady().

00668                                                                                          {
00669 
00670     // Additional qualifiers (+ FRU)
00671     if (a_sense.additionalLen > 6) {
00672         return
00673             string("[") + cmn_Num2Str(a_sense.asc, true) + string(",") +
00674             cmn_Num2Str(a_sense.ascq, true) + string("] ") +
00675             scsi_GetSenseAdditional(a_sense.asc, a_sense.ascq, a_vndErr);
00676     }
00677     else {
00678         static const string s_empty("");
00679         return s_empty;
00680     };
00681 
00682 }

Here is the call graph for this function:

Here is the caller graph for this function:

IVD_SCSI_DECL_d const char* scsi_GetDeviceTypeText ( scsi_DeviceType_e  a_dt  ) 

Definition at line 83 of file scsi_err.cpp.

References dt_NO_LUN, scsi_DevType_t::m_dt, and scsi_DevType_t::m_text.

Referenced by la_SCSILibrary::EjectMedium(), scsi_IO::InqStandard(), main(), scsi_IO::Open(), la_SCSILibrary::Open(), bea_TapeDrive::Open(), scsi_DeviceList::Print(), and STapeOpen().

00083                                                            {
00084     for (int i = 0; ;i++) {
00085         const scsi_DevType_t &dtText = s_deviceType[i];
00086         if (dtText.m_dt == dt_NO_LUN ||dtText.m_dt == a_dt) {
00087             return dtText.m_text;
00088         }
00089     }
00090 }

Here is the caller graph for this function:

const string scsi_GetOpcodeText ( UInt16_t  a_opcode  ) 

Definition at line 165 of file scsi_err.cpp.

References cmn_Num2Str(), s_grp0, s_grp1, s_grp2, s_grp4, s_grp5, s_reserved(), s_vendor(), and scsi_GROUP_m.

Referenced by scsi_LnxSG::CheckDriverStatus(), scsi_LnxSG::CheckHostStatus(), scsi_IO::CheckStatusAndSense(), and scsi_IO::IOCtl().

00165                                                    {
00166     const UInt32_t  group = scsi_GROUP_m(a_opcode);
00167     switch (group) {
00168         case 0: return string(s_grp0[a_opcode & 0x1F]) + string(" ") + cmn_Num2Str(a_opcode, true);
00169         case 1: return string(s_grp1[a_opcode & 0x1F]) + string(" ") + cmn_Num2Str(a_opcode, true);
00170         case 2: return string(s_grp2[a_opcode & 0x1F]) + string(" ") + cmn_Num2Str(a_opcode, true);
00171         case 3: return string(s_reserved) + string(" ") + cmn_Num2Str(a_opcode, true);
00172         case 4: return string(s_grp4[a_opcode & 0x1F]) + string(" ") + cmn_Num2Str(a_opcode, true);
00173         case 5: return string(s_grp5[a_opcode & 0x1F]) + string(" ") + cmn_Num2Str(a_opcode, true);
00174         case 6: return string(s_vendor) + string(" ") + cmn_Num2Str(a_opcode, true);
00175         case 7: return string(s_vendor) + string(" ") + cmn_Num2Str(a_opcode, true);
00176         default: return string("unknown") + string(" ") + cmn_Num2Str(a_opcode, true);
00177     }
00178 }

Here is the call graph for this function:

Here is the caller graph for this function:

const string scsi_GetSenseAdditional ( UInt8_t  a_asc,
UInt8_t  a_ascq,
const scsi_SenseVnd a_vndErr 
)

Definition at line 649 of file scsi_err.cpp.

References cmn_Num2Str(), scsi_SenseVnd::GetSenseText(), NULL, scsi_FindSenseText(), and scsi_IsVendorSpecificASC().

Referenced by data_ElementStatus::ParseElemStatus(), scsi_GetASCText(), and scsi_GetSenseText().

00649                                                                                                    {
00650     if (scsi_IsVendorSpecificASC(a_asc, a_ascq)) {
00651         if (a_vndErr == NULL) {
00652             // No device type specific sense code table
00653             ostringstream sstr;
00654             sstr
00655                 << "Vendor specific ASC "
00656                 << cmn_Num2Str(a_asc, true) << string(" ")
00657                 << cmn_Num2Str(a_ascq, true);
00658             return sstr.str();
00659         }
00660         else {
00661             return a_vndErr->GetSenseText(a_asc, a_ascq);
00662         }
00663     }
00664 
00665     return scsi_FindSenseText(a_asc, a_ascq, s_senseAdditional);
00666 }

Here is the call graph for this function:

Here is the caller graph for this function:

const char* scsi_GetSenseKeyText ( scsi_SenseKey_e  a_sense  ) 

Definition at line 235 of file scsi_err.cpp.

Referenced by scsi_IO::CheckStatusAndSense(), scsi_GetSenseText(), and scsi_IO::WaitToBecomeReady().

00235                                                              {
00236     return s_senseText[(int)a_senseKey].m_text;
00237 }

Here is the caller graph for this function:

const string scsi_GetSenseText ( const data_Sense_t a_sense,
scsi_DeviceType_e  a_dt,
const scsi_SenseVnd a_vndErr 
)

Definition at line 697 of file scsi_err.cpp.

References data_Sense_t::additionalLen, data_Sense_t::ait, data_Sense_t::asc, data_Sense_t::ascq, data_FieldPointer_t::bitPtr, data_FieldPointer_t::bpv, data_FieldPointer_t::cd, data_AIT_Sense_t::clean, cmn_Num2Str(), data_RetryCount_t::count, dt_TAPE, data_Sense_t::eom, data_Sense_t::fileMark, data_FieldPointer_t::fldPtr, data_Sense_t::fPtr, data_Sense_t::fruCode, ie_IMPOSSIBLE, data_Sense_t::incorrectLength, data_Sense_t::infoBytes, data_Sense_t::isValid, data_AIT_Sense_t::mew, ntoh(), data_Progress_t::progress, data_Sense_t::progress, data_AIT_Sense_t::remainingTape, data_Sense_t::responseCode, data_Sense_t::retryCnt, data_AIT_Sense_t::rwErrorCnt, scsi_GetSenseAdditional(), scsi_GetSenseKeyText(), data_Sense_t::senseKey, sk_ABORTED_COMMAND, sk_BLANK_CHECK, sk_COPY_ABORTED, sk_DATA_PROTECT, sk_HARDWARE_ERROR, sk_ILLEGAL_REQUEST, sk_MEDIUM_ERROR, sk_MISCOMPARE, sk_NOT_READY, sk_OBSOLETE, sk_RECOVERED_ERROR, sk_RESERVED, sk_UNIT_ATTENTION, sk_VENDOR_SPECIFIC, sk_VOLUME_OVERFLOW, sns_DEFERRED, sns_NOT_DEFERRED, and data_FieldPointer_t::sskv.

Referenced by scsi_IO::CheckStatusAndSense(), and scsi_IO::WaitToBecomeReady().

00697                                                                                                                    {
00698 
00699     ostringstream snsTxt;
00700 
00701     snsTxt << endl;
00702     if (a_sense.responseCode == sns_NOT_DEFERRED) {
00703         snsTxt << "Current, ";
00704     }
00705     else if (a_sense.responseCode == sns_DEFERRED) {
00706         snsTxt << "Deferred, ";
00707     }
00708     else {
00709         snsTxt << "Unknown, ";
00710     }
00711     snsTxt
00712         << "(" << (int)a_sense.senseKey << ") "
00713         << scsi_GetSenseKeyText((scsi_SenseKey_e)a_sense.senseKey) << " ";
00714 
00715     if (a_sense.fileMark) snsTxt << "FM ";
00716     if (a_sense.eom) snsTxt << "EOM ";
00717     if (a_sense.incorrectLength) snsTxt << "ILI ";
00718     if (a_sense.isValid) {
00719         snsTxt << "INFO: " << hex << ntoh(a_sense.infoBytes) << " ";
00720     }
00721 
00722     if (a_sense.additionalLen > 7 && a_sense.fruCode > 0) {
00723         snsTxt << "FRU: " << (int)(a_sense.fruCode) << " ";
00724     }
00725     snsTxt << " ";
00726 
00727     // Command specific information (not displayed!)
00728     if (a_sense.additionalLen > 3) {
00729         // Empty
00730     }
00731     // Additional qualifiers (+ FRU)
00732     if (a_sense.additionalLen > 6) {
00733         snsTxt
00734             << "(" << cmn_Num2Str(a_sense.asc, true) << ", "
00735             <<        cmn_Num2Str(a_sense.ascq, true)  << ") "
00736             << scsi_GetSenseAdditional(a_sense.asc, a_sense.ascq, a_vndErr)
00737             << endl;
00738     }
00739     //Sense key specific
00740     if (a_sense.additionalLen > 9 && a_sense.fPtr.sskv != 0) {
00741         switch (a_sense.senseKey) {
00742             case sk_ILLEGAL_REQUEST:
00743             {
00744                 if (a_sense.fPtr.cd == 0) {
00745                     snsTxt << "FPTR (DATA OUT)";
00746                 }
00747                 else {
00748                     snsTxt << "FPTR (COMMAND)";
00749                 }
00750                 scsi_Wrapper16 ptrW(a_sense.fPtr.fldPtr);
00751                 snsTxt << ", byte: " << dec << ntoh(ptrW);
00752                 if (a_sense.fPtr.bpv != 0) {
00753                     snsTxt << ", bit: " << (int)(a_sense.fPtr.bitPtr);
00754                 }
00755                 break;
00756             }
00757             case sk_NOT_READY:
00758             {
00759                 scsi_Wrapper16 progressW(a_sense.progress.progress);
00760                 snsTxt
00761                     << "PROGRESS (%): "
00762                     << (int)((ntoh(progressW) * 100) / 65536);
00763                 break;
00764             }
00765             case sk_RECOVERED_ERROR:
00766             case sk_MEDIUM_ERROR:
00767             case sk_HARDWARE_ERROR:
00768             {
00769                 scsi_Wrapper16 countW(a_sense.retryCnt.count);
00770                 snsTxt << "RETRIES: " << ntoh(countW);
00771                 break;
00772             }
00773             case sk_UNIT_ATTENTION:
00774             case sk_DATA_PROTECT:
00775             case sk_BLANK_CHECK:
00776             case sk_VENDOR_SPECIFIC:
00777             case sk_COPY_ABORTED:
00778             case sk_ABORTED_COMMAND:
00779             case sk_OBSOLETE:
00780             case sk_VOLUME_OVERFLOW:
00781             case sk_MISCOMPARE:
00782             case sk_RESERVED:
00783                 break;
00784             default:
00785                 throw ivd_InternalError(
00786                     ie_IMPOSSIBLE,
00787                     string("Impossible sense: ") +
00788                     string( scsi_GetSenseKeyText(
00789                         (scsi_SenseKey_e)a_sense.senseKey) ) );
00790                 break;
00791         }
00792         snsTxt << endl;
00793     }
00794     if (a_dt == dt_TAPE) {
00795         // Additional sense bytes (Currently we display only AIT-2 codes)
00796         if (a_sense.additionalLen > 11) {
00797             if (a_sense.ait.rwErrorCnt > 0) {
00798                 scsi_Wrapper32 errW(a_sense.ait.rwErrorCnt);
00799                 snsTxt << "RW Error cnt : " << ntoh(errW) << " ";
00800             }
00801         }
00802         if (a_sense.additionalLen > 15) {
00803             scsi_Wrapper32 remW(a_sense.ait.remainingTape);
00804             snsTxt
00805                 << "Remaining tape : " << ntoh(remW) << endl;
00806         }
00807         if (a_sense.additionalLen > 19) {
00808             if (a_sense.ait.clean != 0) {
00809                 snsTxt << "CLEAN RQ ";
00810             }
00811             if (a_sense.ait.mew != 0) {
00812                 snsTxt << "MEDIA WARNING ";
00813             }
00814         }
00815         snsTxt << endl;
00816     }
00817 
00818     return snsTxt.str();
00819 }

Here is the call graph for this function:

Here is the caller graph for this function:

const char* scsi_GetStatusText ( scsi_Status_e  a_status  ) 

Definition at line 205 of file scsi_err.cpp.

References scsi_ErrDesc_t::m_text, and scsi_ErrDesc_t::st.

Referenced by scsi_IO::CheckStatusAndSense().

00205                                                        {
00206     for (int i = 0; ;i++) {
00207         const scsi_ErrDesc_t &stText = s_statusText[i];
00208         if (stText.st == 0xFF || a_status == stText.st) {
00209             return stText.m_text;
00210         }
00211     }
00212 }

Here is the caller graph for this function:

const scsi_SenseVnd* scsi_GetVndAddSnsTbl ( const string &  a_vendor,
const string &  a_product 
)

Definition at line 609 of file scsi_err.cpp.

References dbg_DETAIL, dbg_NORM, log_DBG_m, log_FUNC_m, NULL, scsi_VndErrTable_t::product, scsi_GetVndAddSnsTbl(), scsi_VndErrTable_t::table, and scsi_VndErrTable_t::vendor.

Referenced by scsi_IO::InqStandard(), and scsi_GetVndAddSnsTbl().

00609                                                                                            {
00610     log_FUNC_m(scsi_GetVndAddSnsTbl);
00611 
00612     if (a_vendor.length() == 0 && a_product.length() == 0) {
00613             log_DBG_m(dbg_DETAIL, "Vendor/product not specified.");
00614             return NULL;
00615     }
00616 
00617     for (int i(0); ; ++i) {
00618         const scsi_VndErrTable_t& tbl(s_vndErrTable[i]);
00619 
00620         if (tbl.table == NULL) {
00621             log_DBG_m(dbg_DETAIL, "Error conversion table not found.");
00622             return NULL;
00623         }
00624 
00625         const char* vendor(tbl.vendor);
00626         const char* product(tbl.product);
00627         UInt32_t vndLen(strlen(vendor));
00628         UInt32_t prodLen(strlen(product));
00629 
00630         //
00631         // Compare only strings up to the length of the string in the
00632         // config file.
00633         //
00634         string subVendor(a_vendor.substr(0, vndLen) );
00635         string subProduct(a_product.substr(0, prodLen) );
00636 
00637         if (subVendor.compare(vendor) == 0 && subProduct.compare(product) == 0) {
00638             log_DBG_m(dbg_NORM,
00639                 "Found error table entry: \'" << vendor << "\', \'" << product << "\'");
00640 
00641             return tbl.table;
00642         };
00643     }
00644     return NULL;
00645 }

Here is the call graph for this function:

Here is the caller graph for this function:

bool scsi_IsVendorSpecificASC ( UInt8_t  a_asc,
UInt8_t  a_ascq 
)

Definition at line 684 of file scsi_err.cpp.

Referenced by data_ElementStatus::ParseElemStatus(), scsi_FindSenseText(), and scsi_GetSenseAdditional().

00684                                                              {
00685     if (a_asc >= 0x80) {
00686         return true;
00687     }
00688     else if (a_ascq >= 0x80) {
00689         return true;
00690     }
00691     else {
00692         return false;
00693     }
00694 }

Here is the caller graph for this function:


Generated on Mon Feb 27 18:52:34 2012 for OPENARCHIVE by  doxygen 1.5.6