#ifndef _DEV_SCSIPI_SCSIPI_ALL_H_
#define _DEV_SCSIPI_SCSIPI_ALL_H_
#define CDB_GROUPID(cmd) ((cmd >> 5) & 0x7)
#define CDB_GROUPID_0 0
#define CDB_GROUPID_1 1
#define CDB_GROUPID_2 2
#define CDB_GROUPID_3 3
#define CDB_GROUPID_4 4
#define CDB_GROUPID_5 5
#define CDB_GROUPID_6 6
#define CDB_GROUPID_7 7
#define CDB_GROUP0 6
#define CDB_GROUP1 10
#define CDB_GROUP2 10
#define CDB_GROUP3 0
#define CDB_GROUP4 16
#define CDB_GROUP5 12
#define CDB_GROUP6 0
#define CDB_GROUP7 0
#define INQUIRY 0x12
struct scsipi_inquiry {
u_int8_t opcode;
u_int8_t byte2;
#define SINQ_EVPD 0x01
u_int8_t pagecode;
u_int8_t length_hi;
u_int8_t length;
u_int8_t control;
} __packed;
#define START_STOP 0x1b
struct scsipi_start_stop {
u_int8_t opcode;
u_int8_t byte2;
u_int8_t unused[2];
u_int8_t how;
#define SSS_STOP 0x00
#define SSS_START 0x01
#define SSS_LOEJ 0x02
u_int8_t control;
};
#define T_REMOV 1
#define T_FIXED 0
struct scsipi_inquiry_data {
u_int8_t device;
#define SID_TYPE 0x1f
#define SID_QUAL 0xe0
#define SID_QUAL_LU_PRESENT 0x00
#define SID_QUAL_LU_NOTPRESENT 0x20
#define SID_QUAL_reserved 0x40
#define SID_QUAL_LU_NOT_SUPP 0x60
#define T_DIRECT 0x00
#define T_SEQUENTIAL 0x01
#define T_PRINTER 0x02
#define T_PROCESSOR 0x03
#define T_WORM 0x04
#define T_CDROM 0x05
#define T_SCANNER 0x06
#define T_OPTICAL 0x07
#define T_CHANGER 0x08
#define T_COMM 0x09
#define T_IT8_1 0x0a
#define T_IT8_2 0x0b
#define T_STORARRAY 0x0c
#define T_ENCLOSURE 0x0d
#define T_SIMPLE_DIRECT 0x0E
#define T_OPTIC_CARD_RW 0x0F
#define T_OBJECT_STORED 0x11
#define T_NODEVICE 0x1f
u_int8_t dev_qual2;
#define SID_QUAL2 0x7F
#define SID_REMOVABLE 0x80
u_int8_t version;
#define SID_ANSII 0x07
#define SID_ECMA 0x38
#define SID_ISO 0xC0
u_int8_t response_format;
#define SID_RespDataFmt 0x0F
#define SID_FORMAT_SCSI1 0x00
#define SID_FORMAT_CCS 0x01
#define SID_FORMAT_ISO 0x02
u_int8_t additional_length;
u_int8_t flags1;
#define SID_SCC 0x80
u_int8_t flags2;
#define SID_Addr16 0x01
#define SID_MChngr 0x08
#define SID_MultiPort 0x10
#define SID_EncServ 0x40
#define SID_BasQue 0x80
u_int8_t flags3;
#define SID_SftRe 0x01
#define SID_CmdQue 0x02
#define SID_Linked 0x08
#define SID_Sync 0x10
#define SID_WBus16 0x20
#define SID_WBus32 0x40
#define SID_RelAdr 0x80
char vendor[8];
char product[16];
char revision[4];
#define SCSIPI_INQUIRY_LENGTH_SCSI2 36
u_int8_t vendor_specific[20];
u_int8_t flags4;
#define SID_IUS 0x01
#define SID_QAS 0x02
#define SID_Clocking 0x0C
#define SID_CLOCKING_ST_ONLY 0x00
#define SID_CLOCKING_DT_ONLY 0x04
#define SID_CLOCKING_SD_DT 0x0C
u_int8_t reserved;
char version_descriptor[8][2];
#define SCSIPI_INQUIRY_LENGTH_SCSI3 74
} __packed;
struct scsipi_inquiry_evpd_header {
u_int8_t device;
u_int8_t pagecode;
u_int8_t length[2];
};
#define SINQ_VPD_PAGES 0x00
#define SINQ_VPD_UNIT_SERIAL 0x80
#define SINQ_VPD_DEVICE_ID 0x83
#define SINQ_VPD_SOFTWARE_ID 0x84
#define SINQ_VPD_MN_ADDRESS 0x85
#define SINQ_VPD_INQUIRY 0x86
#define SINQ_VPD_MP_POLICY 0x87
#define SINQ_VPD_PORTS 0x88
#define SINQ_VPD_POWER_COND 0x8a
#define SINQ_VPD_CONSTITUENTS 0x8b
#define SINQ_VPD_CFA_PROFILE 0x8c
#define SINQ_VPD_CONSUMPTION 0x8d
#define SINQ_VPD_BLOCK_LIMITS 0xb0
#define SINQ_VPD_BLOCK_CHARS 0xb1
#define SINQ_VPD_LOGICAL_PROV 0xb2
#define SINQ_VPD_REFERRALS 0xb3
#define SINQ_VPD_SUPPORTED 0xb4
#define SINQ_VPD_BLOCK_CHARSX 0xb5
#define SINQ_VPD_BLOCK_ZONED 0xb6
#define SINQ_VPD_BLOCK_LIMITSX 0xb7
#define SINQ_VPD_FIRMWARE_NUM 0xc0
#define SINQ_VPD_JUMPERS 0xc2
#define SINQ_VPD_BEHAVIOUR 0xc3
#define SINQ_VPD_DATE_CODE 0xc1
struct scsipi_inquiry_evpd_date_code {
u_int8_t etf_log_date[8];
u_int8_t compile_date[8];
u_int8_t spindown_count[2];
u_int8_t spindown_time[6];
} __packed;
#define SINQ_VPD_SERIAL 0x80
struct scsipi_inquiry_evpd_serial {
u_int8_t serial_number[251];
} __packed;
#define SINQ_VPD_DEVICE_ID 0x83
struct scsipi_inquiry_evpd_device_id {
u_int8_t pc;
#define SINQ_DEVICE_ID_PROTOCOL 0xf0
#define SINQ_DEVICE_ID_PROTOCOL_FC 0x00
#define SINQ_DEVICE_ID_PROTOCOL_SSA 0x20
#define SINQ_DEVICE_ID_PROTOCOL_IEEE1394 0x30
#define SINQ_DEVICE_ID_PROTOCOL_RDMA 0x40
#define SINQ_DEVICE_ID_PROTOCOL_ISCSI 0x50
#define SINQ_DEVICE_ID_PROTOCOL_SAS 0x60
#define SINQ_DEVICE_ID_CODESET 0x0f
#define SINQ_DEVICE_ID_CODESET_BINARY 0x01
#define SINQ_DEVICE_ID_CODESET_ASCII 0x02
#define SINQ_DEVICE_ID_CODESET_UTF8 0x03
u_int8_t flags;
#define SINQ_DEVICE_ID_PIV 0x80
#define SINQ_DEVICE_ID_ASSOCIATION 0x30
#define SINQ_DEVICE_ID_ASSOCIATION_DEVICE 0x00
#define SINQ_DEVICE_ID_ASSOCIATION_PORT 0x10
#define SINQ_DEVICE_ID_ASSOCIATION_TARGET 0x20
#define SINQ_DEVICE_ID_TYPE 0x0f
#define SINQ_DEVICE_ID_TYPE_UNASSIGNED 0x00
#define SINQ_DEVICE_ID_TYPE_VENDOR 0x01
#define SINQ_DEVICE_ID_TYPE_EUI64 0x02
#define SINQ_DEVICE_ID_TYPE_FC 0x03
#define SINQ_DEVICE_ID_TYPE_PORTNUMBER1 0x04
#define SINQ_DEVICE_ID_TYPE_PORTNUMBER2 0x05
#define SINQ_DEVICE_ID_TYPE_PORTNUMBER3 0x06
#define SINQ_DEVICE_ID_TYPE_MD5 0x07
u_int8_t reserved;
u_int8_t designator_length;
u_int8_t designator[1];
} __packed;
#endif