Lines Matching refs:ccb

148 static void		dpt_action(struct cam_sim *sim, union ccb *ccb);
156 union ccb *ccb, u_int hba_stat,
233 LIST_REMOVE(&dccb->ccb->ccb_h, sim_links.le); in dptfreeccb()
235 dccb->ccb->ccb_h.status |= CAM_RELEASE_SIMQ; in dptfreeccb()
237 && (dccb->ccb->ccb_h.status & CAM_RELEASE_SIMQ) == 0) { in dptfreeccb()
238 dccb->ccb->ccb_h.status |= CAM_RELEASE_SIMQ; in dptfreeccb()
610 union ccb *ccb; in dptexecuteccb() local
614 ccb = dccb->ccb; in dptexecuteccb()
615 dpt = (struct dpt_softc *)ccb->ccb_h.ccb_dpt_ptr; in dptexecuteccb()
624 if (ccb->ccb_h.status == CAM_REQ_INPROG) { in dptexecuteccb()
625 xpt_freeze_devq(ccb->ccb_h.path, /*count*/1); in dptexecuteccb()
626 ccb->ccb_h.status = CAM_REQ_TOO_BIG|CAM_DEV_QFRZN; in dptexecuteccb()
629 xpt_done(ccb); in dptexecuteccb()
659 if ((ccb->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_IN) in dptexecuteccb()
675 if (ccb->ccb_h.status != CAM_REQ_INPROG) { in dptexecuteccb()
679 xpt_done(ccb); in dptexecuteccb()
684 ccb->ccb_h.status |= CAM_SIM_QUEUED; in dptexecuteccb()
685 LIST_INSERT_HEAD(&dpt->pending_ccb_list, &ccb->ccb_h, sim_links.le); in dptexecuteccb()
686 callout_reset_sbt(&dccb->timer, SBT_1MS * ccb->ccb_h.timeout, 0, in dptexecuteccb()
691 ccb->ccb_h.status = CAM_NO_HBA; /* HBA dead or just busy?? */ in dptexecuteccb()
695 xpt_done(ccb); in dptexecuteccb()
700 dpt_action(struct cam_sim *sim, union ccb *ccb) in dpt_action() argument
704 CAM_DEBUG(ccb->ccb_h.path, CAM_DEBUG_TRACE, ("dpt_action\n")); in dpt_action()
710 xpt_print_path(ccb->ccb_h.path); in dpt_action()
712 ccb->ccb_h.status = CAM_NO_HBA; in dpt_action()
713 xpt_done(ccb); in dpt_action()
717 switch (ccb->ccb_h.func_code) { in dpt_action()
726 csio = &ccb->csio; in dpt_action()
727 ccbh = &ccb->ccb_h; in dpt_action()
730 ccb->ccb_h.status = CAM_REQ_INVALID; in dpt_action()
731 xpt_done(ccb); in dpt_action()
737 ccb->ccb_h.status = CAM_REQUEUE_REQ; in dpt_action()
738 xpt_done(ccb); in dpt_action()
744 dccb->ccb = ccb; in dpt_action()
745 ccb->ccb_h.ccb_dccb_ptr = dccb; in dpt_action()
746 ccb->ccb_h.ccb_dpt_ptr = dpt; in dpt_action()
754 eccb->Auto_Req_Sen = (ccb->ccb_h.flags & CAM_DIS_AUTOSENSE) in dpt_action()
759 ccb->ccb_h.target_id == dpt->hostid[cam_sim_bus(sim)] in dpt_action()
761 eccb->DataOut = (ccb->ccb_h.flags & CAM_DIR_OUT) ? 1 : 0; in dpt_action()
762 eccb->DataIn = (ccb->ccb_h.flags & CAM_DIR_IN) ? 1 : 0; in dpt_action()
764 eccb->cp_id = ccb->ccb_h.target_id; in dpt_action()
766 eccb->cp_LUN = ccb->ccb_h.target_lun; in dpt_action()
768 eccb->cp_dispri = (ccb->ccb_h.flags & CAM_DIS_DISCONNECT) in dpt_action()
772 if ((ccb->ccb_h.flags & CAM_TAG_ACTION_VALID) != 0 in dpt_action()
782 if ((ccb->ccb_h.flags & CAM_CDB_POINTER) != 0) { in dpt_action()
783 if ((ccb->ccb_h.flags & CAM_CDB_PHYS) == 0) { in dpt_action()
788 ccb->ccb_h.status = CAM_REQ_INVALID; in dpt_action()
790 xpt_done(ccb); in dpt_action()
807 ccb, in dpt_action()
837 ccb->ccb_h.status = CAM_REQ_INVALID; in dpt_action()
838 xpt_done(ccb); in dpt_action()
842 ccb->ccb_h.status = CAM_FUNC_NOTAVAIL; in dpt_action()
843 xpt_done(ccb); in dpt_action()
849 struct ccb_trans_settings *cts = &ccb->cts; in dpt_action()
875 ccb->ccb_h.status = CAM_REQ_CMP; in dpt_action()
877 ccb->ccb_h.status = CAM_FUNC_NOTAVAIL; in dpt_action()
879 xpt_done(ccb); in dpt_action()
888 cam_calc_geometry(&ccb->ccg, /*extended*/1); in dpt_action()
889 xpt_done(ccb); in dpt_action()
895 ccb->ccb_h.status = CAM_REQ_CMP; in dpt_action()
896 xpt_done(ccb); in dpt_action()
901 ccb->ccb_h.status = CAM_REQ_INVALID; in dpt_action()
902 xpt_done(ccb); in dpt_action()
906 struct ccb_pathinq *cpi = &ccb->cpi; in dpt_action()
929 xpt_done(ccb); in dpt_action()
933 ccb->ccb_h.status = CAM_REQ_INVALID; in dpt_action()
934 xpt_done(ccb); in dpt_action()
1488 union ccb *ccb; in dpt_intr_locked() local
1559 ccb = dccb->ccb; in dpt_intr_locked()
1561 if ((ccb->ccb_h.flags & CAM_DIR_MASK) != CAM_DIR_NONE) { in dpt_intr_locked()
1564 if ((ccb->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_IN) in dpt_intr_locked()
1574 ccb->csio.scsi_status = scsi_stat; in dpt_intr_locked()
1575 ccb->ccb_h.status = 0; in dpt_intr_locked()
1578 ccb->ccb_h.status |= CAM_REQ_CMP; in dpt_intr_locked()
1582 bcopy(&dccb->sense_data, &ccb->csio.sense_data, in dpt_intr_locked()
1583 ccb->csio.sense_len); in dpt_intr_locked()
1584 ccb->ccb_h.status |= CAM_AUTOSNS_VALID; in dpt_intr_locked()
1587 ccb->ccb_h.status |= CAM_SCSI_STATUS_ERROR; in dpt_intr_locked()
1591 ccb->csio.resid = residue_len; in dpt_intr_locked()
1593 xpt_done(ccb); in dpt_intr_locked()
1595 dptprocesserror(dpt, dccb, ccb, hba_stat, scsi_stat, in dpt_intr_locked()
1602 dptprocesserror(dpt_softc_t *dpt, dpt_ccb_t *dccb, union ccb *ccb, in dptprocesserror() argument
1605 ccb->csio.resid = resid; in dptprocesserror()
1608 ccb->ccb_h.status = CAM_SEL_TIMEOUT; in dptprocesserror()
1611 ccb->ccb_h.status = CAM_CMD_TIMEOUT; in dptprocesserror()
1615 ccb->ccb_h.status = CAM_SCSI_BUS_RESET; in dptprocesserror()
1621 if ((ccb->ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_INPROG) in dptprocesserror()
1622 ccb->ccb_h.status = CAM_REQ_ABORTED; in dptprocesserror()
1631 ccb->ccb_h.status = CAM_UNCOR_PARITY; in dptprocesserror()
1634 ccb->ccb_h.status = CAM_MSG_REJECT_REC; in dptprocesserror()
1637 ccb->ccb_h.status = CAM_SEQUENCE_FAIL; in dptprocesserror()
1640 ccb->ccb_h.status = CAM_UNEXP_BUSFREE; in dptprocesserror()
1648 ccb->ccb_h.status = CAM_NO_HBA; in dptprocesserror()
1651 ccb->ccb_h.status = CAM_AUTOSENSE_FAIL; in dptprocesserror()
1656 ccb->ccb_h.status = CAM_REQ_CMP_ERR; in dptprocesserror()
1660 xpt_done(ccb); in dptprocesserror()
1667 union ccb *ccb; in dpttimeout() local
1671 ccb = dccb->ccb; in dpttimeout()
1672 dpt = (struct dpt_softc *)ccb->ccb_h.ccb_dpt_ptr; in dpttimeout()
1674 xpt_print_path(ccb->ccb_h.path); in dpttimeout()
1686 xpt_print_path(ccb->ccb_h.path); in dpttimeout()
1695 ccb->ccb_h.status = CAM_CMD_TIMEOUT; in dpttimeout()
1738 eata_ccb_t *ccb;
1752 ccb = &dccb.eata_ccb;
1753 ccb->CP_OpCode = EATA_CMD_RESET;
1754 ccb->SCSI_Reset = 0;
1755 ccb->HBA_Init = 1;
1756 ccb->Auto_Req_Sen = 1;
1757 ccb->cp_id = 0; /* Should be ignored */
1758 ccb->DataIn = 1;
1759 ccb->DataOut = 0;
1760 ccb->Interpret = 1;
1761 ccb->reqlen = htonl(sizeof(struct scsi_sense_data));
1762 ccb->cp_statDMA = htonl(vtophys(&ccb->cp_statDMA));
1763 ccb->cp_reqDMA = htonl(vtophys(&ccb->cp_reqDMA));
1764 ccb->cp_viraddr = (u_int32_t) & ccb;
1766 ccb->cp_msg[0] = HA_IDENTIFY_MSG | HA_DISCO_RECO;
1767 ccb->cp_scsi_cmd = 0; /* Should be ignored */
1841 dpt_ccb_t * ccb, int mode, u_int8_t command,
1854 ccb->xs = NULL;
1855 ccb->flags = 0;
1856 ccb->state = DPT_CCB_STATE_NEW;
1857 ccb->std_callback = (ccb_callback) dpt_target_done;
1858 ccb->wrbuff_callback = NULL;
1860 cp = &ccb->eata_ccb;
1872 cp->cp_viraddr = (u_int32_t) & ccb;
1892 if (dpt_scatter_gather(dpt, ccb, DPT_RW_BUFFER_SIZE,
1904 u_int16_t length, u_int16_t offset, dpt_ccb_t * ccb)
1910 dpt_target_ccb(dpt, bus, target, lun, ccb, mode,
1913 ccb->transaction_id = ++dpt->commands_processed;
1916 dpt->performance.command_count[ccb->eata_ccb.cp_scsi_cmd]++;
1917 ccb->command_started = microtime_now;
1919 dpt_Qadd_waiting(dpt, ccb);
1942 dpt_ccb_t *ccb = NULL;
1971 if ((ccb = dpt_Qpop_free(dpt)) == NULL) {
1978 dpt_target_ccb(dpt, channel, target, lun, ccb, mode,
1981 ccb->std_callback = (ccb_callback) callback; /* Potential trouble */
1983 ccb->transaction_id = ++dpt->commands_processed;
1986 dpt->performance.command_count[ccb->eata_ccb.cp_scsi_cmd]++;
1987 ccb->command_started = microtime_now;
1989 dpt_Qadd_waiting(dpt, ccb);
2000 dpt_target_done(dpt_softc_t * dpt, int bus, dpt_ccb_t * ccb)
2004 cp = &ccb->eata_ccb;
2011 dpt_Qremove_completed(dpt, ccb);
2013 #define br_channel (ccb->eata_ccb.cp_channel)
2014 #define br_target (ccb->eata_ccb.cp_id)
2015 #define br_lun (ccb->eata_ccb.cp_LUN)
2019 #define cb(offset) (ccb->eata_ccb.cp_cdb[offset])
2024 switch (ccb->eata_ccb.cp_scsi_cmd) {
2037 wakeup(ccb);
2045 (ccb->wrbuff_callback) (device_get_unit(dpt->dev), br_channel,
2047 br_lun, ccb->status_packet.hba_stat);
2052 scsi_cmd_name(ccb->eata_ccb.cp_scsi_cmd));
2055 dpt_Qpush_free(dpt, ccb);
2070 dpt_ccb_t *ccb = NULL;
2104 if ((ccb = dpt_Qpop_free(dpt)) == NULL) {
2111 ccb->status = DPT_CCB_STATE_NEW;
2112 dpt->target_ccb[channel][target][lun] = ccb;
2119 dpt_Qpush_free(dpt, ccb);
2124 length, offset, ccb);
2143 dpt_Qpush_free(dpt, ccb);
2191 dpt_ccb_t *ccb;
2228 if ((ccb = dpt_Qpop_free(dpt)) == NULL) {
2233 ccb->status = DPT_CCB_STATE_NEW;
2236 bcopy((caddr_t) & user_cmd->command_packet, (caddr_t) & ccb->eata_ccb,
2240 if (ccb->eata_ccb.scatter == 1)
2243 ccb->eata_ccb.Auto_Req_Sen = 1;
2244 ccb->eata_ccb.reqlen = htonl(sizeof(struct scsi_sense_data));
2245 ccb->eata_ccb.cp_datalen = htonl(sizeof(ccb->eata_ccb.cp_datalen));
2246 ccb->eata_ccb.cp_dataDMA = htonl(vtophys(ccb->eata_ccb.cp_dataDMA));
2247 ccb->eata_ccb.cp_statDMA = htonl(vtophys(&ccb->eata_ccb.cp_statDMA));
2248 ccb->eata_ccb.cp_reqDMA = htonl(vtophys(&ccb->eata_ccb.cp_reqDMA));
2249 ccb->eata_ccb.cp_viraddr = (u_int32_t) & ccb;
2251 if (ccb->eata_ccb.DataIn || ccb->eata_ccb.DataOut) {
2253 if (ccb->eata_ccb.cp_datalen > PAGE_SIZE) {
2254 data = contigmalloc(ccb->eata_ccb.cp_datalen,
2256 ccb->eata_ccb.cp_datalen,
2259 data = malloc(ccb->eata_ccb.cp_datalen, M_TEMP,
2266 ccb->eata_ccb.cp_datalen);
2270 if (ccb->eata_ccb.DataIn == 1) {
2272 data, ccb->eata_ccb.cp_datalen) == -1)
2277 ccb->eata_ccb.cp_datalen = 0;
2281 if (ccb->eata_ccb.FWNEST == 1)
2282 ccb->eata_ccb.FWNEST = 0;
2284 if (ccb->eata_ccb.cp_datalen != 0) {
2285 if (dpt_scatter_gather(dpt, ccb, ccb->eata_ccb.cp_datalen,
2298 if ((ccb->eata_ccb.cp_cdb[0] == MULTIFUNCTION_CMD)
2299 && (ccb->eata_ccb.cp_cdb[2] == BUS_QUIET)) {
2320 if ((ccb->eata_ccb.cp_cdb[0] == MULTIFUNCTION_CMD)
2321 && (ccb->eata_ccb.cp_cdb[2] == BUS_UNQUIET)) {
2328 ccb->xs = NULL;
2329 ccb->flags = 0;
2330 ccb->eata_ccb.Auto_Req_Sen = 1; /* We always want this feature */
2332 ccb->transaction_id = ++dpt->commands_processed;
2333 ccb->std_callback = (ccb_callback) dpt_user_cmd_done;
2334 ccb->result = (u_int32_t) & cmdarg;
2335 ccb->data = data;
2338 ++dpt->performance.command_count[ccb->eata_ccb.cp_scsi_cmd];
2339 ccb->command_started = microtime_now;
2341 dpt_Qadd_waiting(dpt, ccb);
2346 (void) mtx_sleep((void *) ccb, &dpt->lock, PCATCH | PRIBIO, "dptucw",
2357 dpt_user_cmd_done(dpt_softc_t * dpt, int bus, dpt_ccb_t * ccb)
2367 #define usr_pckt_DMA (caddr_t)(intptr_t)ntohl(ccb->eata_ccb.cp_reqDMA)
2368 #define usr_pckt_len ntohl(ccb->eata_ccb.cp_datalen)
2369 if (ccb->eata_ccb.Auto_Req_Sen == 1) {
2370 if (copyout((caddr_t) & ccb->sense_data, usr_pckt_DMA,
2373 ccb->result = EFAULT;
2374 dpt_Qpush_free(dpt, ccb);
2375 wakeup(ccb);
2380 if ((ccb->eata_ccb.DataIn == 1)
2381 && (ccb->status_packet.hba_stat == HA_NO_ERROR)) {
2382 if (copyout(ccb->data, usr_pckt_DMA, usr_pckt_len)) {
2384 dpt_Qpush_free(dpt, ccb);
2385 ccb->result = EFAULT;
2387 wakeup(ccb);
2392 result = ccb->status_packet.hba_stat;
2393 cmd_arg = (caddr_t) ccb->result;
2397 dpt_Qpush_free(dpt, ccb);
2398 ccb->result = EFAULT;
2399 wakeup(ccb);
2404 ccb->state |= DPT_CCB_STATE_COMPLETED;
2405 dpt_Qpush_free(dpt, ccb);