📄 advansys.c
字号:
#define SCSI_TYPE_SASD 0x01#define SCSI_TYPE_PRN 0x02#define SCSI_TYPE_PROC 0x03#define SCSI_TYPE_WORM 0x04#define SCSI_TYPE_CDROM 0x05#define SCSI_TYPE_SCANNER 0x06#define SCSI_TYPE_OPTMEM 0x07#define SCSI_TYPE_MED_CHG 0x08#define SCSI_TYPE_COMM 0x09#define SCSI_TYPE_UNKNOWN 0x1F#define ADV_INQ_CLOCKING_ST_ONLY 0x0#define ADV_INQ_CLOCKING_DT_ONLY 0x1#define ADV_INQ_CLOCKING_ST_AND_DT 0x3/* * Inquiry SPC-2 SPI Byte 1 EVPD (Enable Vital Product Data) * and CmdDt (Command Support Data) field bit definitions. */#define ADV_INQ_RTN_VPD_AND_CMDDT 0x3#define ADV_INQ_RTN_CMDDT_FOR_OP_CODE 0x2#define ADV_INQ_RTN_VPD_FOR_PG_CODE 0x1#define ADV_INQ_RTN_STD_INQUIRY_DATA 0x0#define ASC_SCSIDIR_NOCHK 0x00#define ASC_SCSIDIR_T2H 0x08#define ASC_SCSIDIR_H2T 0x10#define ASC_SCSIDIR_NODATA 0x18#define SCSI_SENKEY_NO_SENSE 0x00#define SCSI_SENKEY_UNDEFINED 0x01#define SCSI_SENKEY_NOT_READY 0x02#define SCSI_SENKEY_MEDIUM_ERR 0x03#define SCSI_SENKEY_HW_ERR 0x04#define SCSI_SENKEY_ILLEGAL 0x05#define SCSI_SENKEY_ATTENTION 0x06#define SCSI_SENKEY_PROTECTED 0x07#define SCSI_SENKEY_BLANK 0x08#define SCSI_SENKEY_V_UNIQUE 0x09#define SCSI_SENKEY_CPY_ABORT 0x0A#define SCSI_SENKEY_ABORT 0x0B#define SCSI_SENKEY_EQUAL 0x0C#define SCSI_SENKEY_VOL_OVERFLOW 0x0D#define SCSI_SENKEY_MISCOMP 0x0E#define SCSI_SENKEY_RESERVED 0x0F#define SCSI_ASC_NOMEDIA 0x3A#define ASC_SRB_HOST(x) ((uchar)((uchar)(x) >> 4))#define ASC_SRB_TID(x) ((uchar)((uchar)(x) & (uchar)0x0F))#define ASC_SRB_LUN(x) ((uchar)((uint)(x) >> 13))#define PUT_CDB1(x) ((uchar)((uint)(x) >> 8))#define SS_GOOD 0x00#define SS_CHK_CONDITION 0x02#define SS_CONDITION_MET 0x04#define SS_TARGET_BUSY 0x08#define SS_INTERMID 0x10#define SS_INTERMID_COND_MET 0x14#define SS_RSERV_CONFLICT 0x18#define SS_CMD_TERMINATED 0x22#define SS_QUEUE_FULL 0x28#define MS_CMD_DONE 0x00#define MS_EXTEND 0x01#define MS_SDTR_LEN 0x03#define MS_SDTR_CODE 0x01#define MS_WDTR_LEN 0x02#define MS_WDTR_CODE 0x03#define MS_MDP_LEN 0x05#define MS_MDP_CODE 0x00#define M1_SAVE_DATA_PTR 0x02#define M1_RESTORE_PTRS 0x03#define M1_DISCONNECT 0x04#define M1_INIT_DETECTED_ERR 0x05#define M1_ABORT 0x06#define M1_MSG_REJECT 0x07#define M1_NO_OP 0x08#define M1_MSG_PARITY_ERR 0x09#define M1_LINK_CMD_DONE 0x0A#define M1_LINK_CMD_DONE_WFLAG 0x0B#define M1_BUS_DVC_RESET 0x0C#define M1_ABORT_TAG 0x0D#define M1_CLR_QUEUE 0x0E#define M1_INIT_RECOVERY 0x0F#define M1_RELEASE_RECOVERY 0x10#define M1_KILL_IO_PROC 0x11#define M2_QTAG_MSG_SIMPLE 0x20#define M2_QTAG_MSG_HEAD 0x21#define M2_QTAG_MSG_ORDERED 0x22#define M2_IGNORE_WIDE_RESIDUE 0x23/* * Inquiry data structure and bitfield macros * * Only quantities of more than 1 bit are shifted, since the others are * just tested for true or false. C bitfields aren't portable between big * and little-endian platforms so they are not used. */#define ASC_INQ_DVC_TYPE(inq) ((inq)->periph & 0x1f)#define ASC_INQ_QUALIFIER(inq) (((inq)->periph & 0xe0) >> 5)#define ASC_INQ_DVC_TYPE_MOD(inq) ((inq)->devtype & 0x7f)#define ASC_INQ_REMOVABLE(inq) ((inq)->devtype & 0x80)#define ASC_INQ_ANSI_VER(inq) ((inq)->ver & 0x07)#define ASC_INQ_ECMA_VER(inq) (((inq)->ver & 0x38) >> 3)#define ASC_INQ_ISO_VER(inq) (((inq)->ver & 0xc0) >> 6)#define ASC_INQ_RESPONSE_FMT(inq) ((inq)->byte3 & 0x0f)#define ASC_INQ_TERM_IO(inq) ((inq)->byte3 & 0x40)#define ASC_INQ_ASYNC_NOTIF(inq) ((inq)->byte3 & 0x80)#define ASC_INQ_SOFT_RESET(inq) ((inq)->flags & 0x01)#define ASC_INQ_CMD_QUEUE(inq) ((inq)->flags & 0x02)#define ASC_INQ_LINK_CMD(inq) ((inq)->flags & 0x08)#define ASC_INQ_SYNC(inq) ((inq)->flags & 0x10)#define ASC_INQ_WIDE16(inq) ((inq)->flags & 0x20)#define ASC_INQ_WIDE32(inq) ((inq)->flags & 0x40)#define ASC_INQ_REL_ADDR(inq) ((inq)->flags & 0x80)#define ASC_INQ_INFO_UNIT(inq) ((inq)->info & 0x01)#define ASC_INQ_QUICK_ARB(inq) ((inq)->info & 0x02)#define ASC_INQ_CLOCKING(inq) (((inq)->info & 0x0c) >> 2)typedef struct { uchar periph; uchar devtype; uchar ver; uchar byte3; uchar add_len; uchar res1; uchar res2; uchar flags; uchar vendor_id[8]; uchar product_id[16]; uchar product_rev_level[4];} ASC_SCSI_INQUIRY;#define ASC_SG_LIST_PER_Q 7#define QS_FREE 0x00#define QS_READY 0x01#define QS_DISC1 0x02#define QS_DISC2 0x04#define QS_BUSY 0x08#define QS_ABORTED 0x40#define QS_DONE 0x80#define QC_NO_CALLBACK 0x01#define QC_SG_SWAP_QUEUE 0x02#define QC_SG_HEAD 0x04#define QC_DATA_IN 0x08#define QC_DATA_OUT 0x10#define QC_URGENT 0x20#define QC_MSG_OUT 0x40#define QC_REQ_SENSE 0x80#define QCSG_SG_XFER_LIST 0x02#define QCSG_SG_XFER_MORE 0x04#define QCSG_SG_XFER_END 0x08#define QD_IN_PROGRESS 0x00#define QD_NO_ERROR 0x01#define QD_ABORTED_BY_HOST 0x02#define QD_WITH_ERROR 0x04#define QD_INVALID_REQUEST 0x80#define QD_INVALID_HOST_NUM 0x81#define QD_INVALID_DEVICE 0x82#define QD_ERR_INTERNAL 0xFF#define QHSTA_NO_ERROR 0x00#define QHSTA_M_SEL_TIMEOUT 0x11#define QHSTA_M_DATA_OVER_RUN 0x12#define QHSTA_M_DATA_UNDER_RUN 0x12#define QHSTA_M_UNEXPECTED_BUS_FREE 0x13#define QHSTA_M_BAD_BUS_PHASE_SEQ 0x14#define QHSTA_D_QDONE_SG_LIST_CORRUPTED 0x21#define QHSTA_D_ASC_DVC_ERROR_CODE_SET 0x22#define QHSTA_D_HOST_ABORT_FAILED 0x23#define QHSTA_D_EXE_SCSI_Q_FAILED 0x24#define QHSTA_D_EXE_SCSI_Q_BUSY_TIMEOUT 0x25#define QHSTA_D_ASPI_NO_BUF_POOL 0x26#define QHSTA_M_WTM_TIMEOUT 0x41#define QHSTA_M_BAD_CMPL_STATUS_IN 0x42#define QHSTA_M_NO_AUTO_REQ_SENSE 0x43#define QHSTA_M_AUTO_REQ_SENSE_FAIL 0x44#define QHSTA_M_TARGET_STATUS_BUSY 0x45#define QHSTA_M_BAD_TAG_CODE 0x46#define QHSTA_M_BAD_QUEUE_FULL_OR_BUSY 0x47#define QHSTA_M_HUNG_REQ_SCSI_BUS_RESET 0x48#define QHSTA_D_LRAM_CMP_ERROR 0x81#define QHSTA_M_MICRO_CODE_ERROR_HALT 0xA1#define ASC_FLAG_SCSIQ_REQ 0x01#define ASC_FLAG_BIOS_SCSIQ_REQ 0x02#define ASC_FLAG_BIOS_ASYNC_IO 0x04#define ASC_FLAG_SRB_LINEAR_ADDR 0x08#define ASC_FLAG_WIN16 0x10#define ASC_FLAG_WIN32 0x20#define ASC_FLAG_ISA_OVER_16MB 0x40#define ASC_FLAG_DOS_VM_CALLBACK 0x80#define ASC_TAG_FLAG_EXTRA_BYTES 0x10#define ASC_TAG_FLAG_DISABLE_DISCONNECT 0x04#define ASC_TAG_FLAG_DISABLE_ASYN_USE_SYN_FIX 0x08#define ASC_TAG_FLAG_DISABLE_CHK_COND_INT_HOST 0x40#define ASC_SCSIQ_CPY_BEG 4#define ASC_SCSIQ_SGHD_CPY_BEG 2#define ASC_SCSIQ_B_FWD 0#define ASC_SCSIQ_B_BWD 1#define ASC_SCSIQ_B_STATUS 2#define ASC_SCSIQ_B_QNO 3#define ASC_SCSIQ_B_CNTL 4#define ASC_SCSIQ_B_SG_QUEUE_CNT 5#define ASC_SCSIQ_D_DATA_ADDR 8#define ASC_SCSIQ_D_DATA_CNT 12#define ASC_SCSIQ_B_SENSE_LEN 20#define ASC_SCSIQ_DONE_INFO_BEG 22#define ASC_SCSIQ_D_SRBPTR 22#define ASC_SCSIQ_B_TARGET_IX 26#define ASC_SCSIQ_B_CDB_LEN 28#define ASC_SCSIQ_B_TAG_CODE 29#define ASC_SCSIQ_W_VM_ID 30#define ASC_SCSIQ_DONE_STATUS 32#define ASC_SCSIQ_HOST_STATUS 33#define ASC_SCSIQ_SCSI_STATUS 34#define ASC_SCSIQ_CDB_BEG 36#define ASC_SCSIQ_DW_REMAIN_XFER_ADDR 56#define ASC_SCSIQ_DW_REMAIN_XFER_CNT 60#define ASC_SCSIQ_B_FIRST_SG_WK_QP 48#define ASC_SCSIQ_B_SG_WK_QP 49#define ASC_SCSIQ_B_SG_WK_IX 50#define ASC_SCSIQ_W_ALT_DC1 52#define ASC_SCSIQ_B_LIST_CNT 6#define ASC_SCSIQ_B_CUR_LIST_CNT 7#define ASC_SGQ_B_SG_CNTL 4#define ASC_SGQ_B_SG_HEAD_QP 5#define ASC_SGQ_B_SG_LIST_CNT 6#define ASC_SGQ_B_SG_CUR_LIST_CNT 7#define ASC_SGQ_LIST_BEG 8#define ASC_DEF_SCSI1_QNG 4#define ASC_MAX_SCSI1_QNG 4#define ASC_DEF_SCSI2_QNG 16#define ASC_MAX_SCSI2_QNG 32#define ASC_TAG_CODE_MASK 0x23#define ASC_STOP_REQ_RISC_STOP 0x01#define ASC_STOP_ACK_RISC_STOP 0x03#define ASC_STOP_CLEAN_UP_BUSY_Q 0x10#define ASC_STOP_CLEAN_UP_DISC_Q 0x20#define ASC_STOP_HOST_REQ_RISC_HALT 0x40#define ASC_TIDLUN_TO_IX(tid, lun) (ASC_SCSI_TIX_TYPE)((tid) + ((lun)<<ASC_SCSI_ID_BITS))#define ASC_TID_TO_TARGET_ID(tid) (ASC_SCSI_BIT_ID_TYPE)(0x01 << (tid))#define ASC_TIX_TO_TARGET_ID(tix) (0x01 << ((tix) & ASC_MAX_TID))#define ASC_TIX_TO_TID(tix) ((tix) & ASC_MAX_TID)#define ASC_TID_TO_TIX(tid) ((tid) & ASC_MAX_TID)#define ASC_TIX_TO_LUN(tix) (((tix) >> ASC_SCSI_ID_BITS) & ASC_MAX_LUN)#define ASC_QNO_TO_QADDR(q_no) ((ASC_QADR_BEG)+((int)(q_no) << 6))typedef struct asc_scsiq_1 { uchar status; uchar q_no; uchar cntl; uchar sg_queue_cnt; uchar target_id; uchar target_lun; ASC_PADDR data_addr; ASC_DCNT data_cnt; ASC_PADDR sense_addr; uchar sense_len; uchar extra_bytes;} ASC_SCSIQ_1;typedef struct asc_scsiq_2 { ASC_VADDR srb_ptr; uchar target_ix; uchar flag; uchar cdb_len; uchar tag_code; ushort vm_id;} ASC_SCSIQ_2;typedef struct asc_scsiq_3 { uchar done_stat; uchar host_stat; uchar scsi_stat; uchar scsi_msg;} ASC_SCSIQ_3;typedef struct asc_scsiq_4 { uchar cdb[ASC_MAX_CDB_LEN]; uchar y_first_sg_list_qp; uchar y_working_sg_qp; uchar y_working_sg_ix; uchar y_res; ushort x_req_count; ushort x_reconnect_rtn; ASC_PADDR x_saved_data_addr; ASC_DCNT x_saved_data_cnt;} ASC_SCSIQ_4;typedef struct asc_q_done_info { ASC_SCSIQ_2 d2; ASC_SCSIQ_3 d3; uchar q_status; uchar q_no; uchar cntl; uchar sense_len; uchar extra_bytes; uchar res; ASC_DCNT remain_bytes;} ASC_QDONE_INFO;typedef struct asc_sg_list { ASC_PADDR addr; ASC_DCNT bytes;} ASC_SG_LIST;typedef struct asc_sg_head { ushort entry_cnt; ushort queue_cnt; ushort entry_to_copy; ushort res; ASC_SG_LIST sg_list[ASC_MAX_SG_LIST];} ASC_SG_HEAD;#define ASC_MIN_SG_LIST 2typedef struct asc_min_sg_head { ushort entry_cnt; ushort queue_cnt; ushort entry_to_copy; ushort res; ASC_SG_LIST sg_list[ASC_MIN_SG_LIST];} ASC_MIN_SG_HEAD;#define QCX_SORT (0x0001)#define QCX_COALEASE (0x0002)typedef struct asc_scsi_q { ASC_SCSIQ_1 q1; ASC_SCSIQ_2 q2; uchar *cdbptr; ASC_SG_HEAD *sg_head; ushort remain_sg_entry_cnt; ushort next_sg_index;} ASC_SCSI_Q;typedef struct asc_scsi_req_q { ASC_SCSIQ_1 r1; ASC_SCSIQ_2 r2; uchar *cdbptr; ASC_SG_HEAD *sg_head; uchar *sense_ptr; ASC_SCSIQ_3 r3;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -