/* ** sim_extended_path_inquiry returns info on the target/lun. */ static long sim_extended_path_inquiry(Symbios *s, CCB_HEADER *ccbh) { CCB_EXTENDED_PATHINQ *ccb; sim_path_inquiry(s, ccbh); ccb = (CCB_EXTENDED_PATHINQ *) ccbh; sprintf(ccb->cam_sim_version, "%d.0", SIM_VERSION); sprintf(ccb->cam_hba_version, "%d.0", HBA_VERSION); strncpy(ccb->cam_controller_family, "Symbios", FAM_ID); strncpy(ccb->cam_controller_type, s->name, TYPE_ID); return 0; }
/* ** sim_extended_path_inquiry returns info on the target/lun. */ static long sim_extended_path_inquiry(BusLogic *bl, CCB_HEADER *ccbh) { CCB_EXTENDED_PATHINQ *ccb; sim_path_inquiry(bl, ccbh); ccb = (CCB_EXTENDED_PATHINQ *) ccbh; sprintf(ccb->cam_sim_version, "%d.0", SIM_VERSION); sprintf(ccb->cam_hba_version, "%d.0", HBA_VERSION); strncpy(ccb->cam_controller_family, controller_family, FAM_ID); strncpy(ccb->cam_controller_type, bl->productname, TYPE_ID); return 0; }
/* ** scsi_sim_action performes the scsi i/o command embedded in the ** passed ccb. ** ** The target/lun ids are assumed to be in range. */ static long sim_action(Symbios *s, CCB_HEADER *ccbh) { ccbh->cam_status = CAM_REQ_INPROG; switch(ccbh->cam_func_code){ case XPT_SCSI_IO: return sim_execute_scsi_io(s,ccbh); case XPT_PATH_INQ: return sim_path_inquiry(s,ccbh); case XPT_EXTENDED_PATH_INQ: return sim_extended_path_inquiry(s, ccbh); default: ccbh->cam_status = CAM_REQ_INVALID; return -1; } }