note;
scsi_request :
-> error = do_command(fd, ccb, req);
do_command->if (ioctl(fd, CAMIOCOMMAND, ccb) < 0) {
CAMIOCOMMAND
---passioctl->
------passsendccb->
--------cam_periph_mapmem
--------cam_periph_runccb->xpt_action
i_fullfeature->
case 1: // start
sp->flags |= ISC_FFPHASE;
error = ic_init(sp);
(*(sim->sim_action))(sim, start_ccb); using ic_action
318:
如何关联:
ISCSI_SCSI_CMD ----------------------------------------func_code
cmd->opcode (bhp->opcode)
#define ISCSI_NOP_OUT 0x00----_nop_out---ism_out(survives link breakdowns)---ism_start--i_create_session
#define ISCSI_SCSI_CMD 0x01----scsi_encap-----XPT_SCSI_IO<--ic_action--xpt_run_dev_sendq?????????????camisr--interrupt..
#define ISCSI_TASK_CMD 0x02----scsi_tm_encap--XPT_RESET_DEV---ic_action
#define ISCSI_LOGIN_CMD 0x03----loginPhase---loginPhase--doLogin--fsm
#define ISCSI_TEXT_CMD 0x04----doDiscovery---doLogin
#define ISCSI_WRITE_DATA 0x05----ISCSI_SCSI_CMD---iscsi_r2t--data_out_t--r2t--ism_recv
#define ISCSI_LOGOUT_CMD 0x06----startLogout
#define ISCSI_SNACK 0x10
mpt -- LSI Fusion-MPT SCSI/Fibre Channel driver
什么时候用XPT_ENG_EXEC?ccb_h.func_code
XPT_ENG_EXEC = 0x21 | XPT_FC_DEV_QUEUED,
/* HBA execute engine request */
for invoking flow :
http://www.leidinger.net/FreeBSD/dox/dev_iscsi/html/db/d78/isc__cam_8c.html#a18f70e00c803f0521939d0abfff9ffac