Lines Matching refs:ccb
150 static void dpt_action(struct cam_sim *sim, union ccb *ccb);
158 union ccb *ccb, u_int hba_stat,
253 LIST_REMOVE(&dccb->ccb->ccb_h, sim_links.le); in dptfreeccb()
255 dccb->ccb->ccb_h.status |= CAM_RELEASE_SIMQ; in dptfreeccb()
257 && (dccb->ccb->ccb_h.status & CAM_RELEASE_SIMQ) == 0) { in dptfreeccb()
258 dccb->ccb->ccb_h.status |= CAM_RELEASE_SIMQ; in dptfreeccb()
720 union ccb *ccb; in dptexecuteccb() local
724 ccb = dccb->ccb; in dptexecuteccb()
725 dpt = (struct dpt_softc *)ccb->ccb_h.ccb_dpt_ptr; in dptexecuteccb()
734 if (ccb->ccb_h.status == CAM_REQ_INPROG) { in dptexecuteccb()
735 xpt_freeze_devq(ccb->ccb_h.path, /*count*/1); in dptexecuteccb()
736 ccb->ccb_h.status = CAM_REQ_TOO_BIG|CAM_DEV_QFRZN; in dptexecuteccb()
739 xpt_done(ccb); in dptexecuteccb()
769 if ((ccb->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_IN) in dptexecuteccb()
785 if (ccb->ccb_h.status != CAM_REQ_INPROG) { in dptexecuteccb()
789 xpt_done(ccb); in dptexecuteccb()
794 ccb->ccb_h.status |= CAM_SIM_QUEUED; in dptexecuteccb()
795 LIST_INSERT_HEAD(&dpt->pending_ccb_list, &ccb->ccb_h, sim_links.le); in dptexecuteccb()
796 callout_reset_sbt(&dccb->timer, SBT_1MS * ccb->ccb_h.timeout, 0, in dptexecuteccb()
801 ccb->ccb_h.status = CAM_NO_HBA; /* HBA dead or just busy?? */ in dptexecuteccb()
805 xpt_done(ccb); in dptexecuteccb()
810 dpt_action(struct cam_sim *sim, union ccb *ccb) in dpt_action() argument
814 CAM_DEBUG(ccb->ccb_h.path, CAM_DEBUG_TRACE, ("dpt_action\n")); in dpt_action()
820 xpt_print_path(ccb->ccb_h.path); in dpt_action()
822 ccb->ccb_h.status = CAM_NO_HBA; in dpt_action()
823 xpt_done(ccb); in dpt_action()
827 switch (ccb->ccb_h.func_code) { in dpt_action()
836 csio = &ccb->csio; in dpt_action()
837 ccbh = &ccb->ccb_h; in dpt_action()
840 ccb->ccb_h.status = CAM_REQ_INVALID; in dpt_action()
841 xpt_done(ccb); in dpt_action()
847 ccb->ccb_h.status = CAM_REQUEUE_REQ; in dpt_action()
848 xpt_done(ccb); in dpt_action()
854 dccb->ccb = ccb; in dpt_action()
855 ccb->ccb_h.ccb_dccb_ptr = dccb; in dpt_action()
856 ccb->ccb_h.ccb_dpt_ptr = dpt; in dpt_action()
864 eccb->Auto_Req_Sen = (ccb->ccb_h.flags & CAM_DIS_AUTOSENSE) in dpt_action()
869 ccb->ccb_h.target_id == dpt->hostid[cam_sim_bus(sim)] in dpt_action()
871 eccb->DataOut = (ccb->ccb_h.flags & CAM_DIR_OUT) ? 1 : 0; in dpt_action()
872 eccb->DataIn = (ccb->ccb_h.flags & CAM_DIR_IN) ? 1 : 0; in dpt_action()
874 eccb->cp_id = ccb->ccb_h.target_id; in dpt_action()
876 eccb->cp_LUN = ccb->ccb_h.target_lun; in dpt_action()
878 eccb->cp_dispri = (ccb->ccb_h.flags & CAM_DIS_DISCONNECT) in dpt_action()
882 if ((ccb->ccb_h.flags & CAM_TAG_ACTION_VALID) != 0 in dpt_action()
892 if ((ccb->ccb_h.flags & CAM_CDB_POINTER) != 0) { in dpt_action()
893 if ((ccb->ccb_h.flags & CAM_CDB_PHYS) == 0) { in dpt_action()
898 ccb->ccb_h.status = CAM_REQ_INVALID; in dpt_action()
900 xpt_done(ccb); in dpt_action()
917 ccb, in dpt_action()
947 ccb->ccb_h.status = CAM_REQ_INVALID; in dpt_action()
948 xpt_done(ccb); in dpt_action()
952 ccb->ccb_h.status = CAM_FUNC_NOTAVAIL; in dpt_action()
953 xpt_done(ccb); in dpt_action()
959 struct ccb_trans_settings *cts = &ccb->cts; in dpt_action()
985 ccb->ccb_h.status = CAM_REQ_CMP; in dpt_action()
987 ccb->ccb_h.status = CAM_FUNC_NOTAVAIL; in dpt_action()
989 xpt_done(ccb); in dpt_action()
998 cam_calc_geometry(&ccb->ccg, /*extended*/1); in dpt_action()
999 xpt_done(ccb); in dpt_action()
1005 ccb->ccb_h.status = CAM_REQ_CMP; in dpt_action()
1006 xpt_done(ccb); in dpt_action()
1011 ccb->ccb_h.status = CAM_REQ_INVALID; in dpt_action()
1012 xpt_done(ccb); in dpt_action()
1016 struct ccb_pathinq *cpi = &ccb->cpi; in dpt_action()
1039 xpt_done(ccb); in dpt_action()
1043 ccb->ccb_h.status = CAM_REQ_INVALID; in dpt_action()
1044 xpt_done(ccb); in dpt_action()
1601 union ccb *ccb; in dpt_intr_locked() local
1672 ccb = dccb->ccb; in dpt_intr_locked()
1674 if ((ccb->ccb_h.flags & CAM_DIR_MASK) != CAM_DIR_NONE) { in dpt_intr_locked()
1677 if ((ccb->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_IN) in dpt_intr_locked()
1687 ccb->csio.scsi_status = scsi_stat; in dpt_intr_locked()
1688 ccb->ccb_h.status = 0; in dpt_intr_locked()
1691 ccb->ccb_h.status |= CAM_REQ_CMP; in dpt_intr_locked()
1695 bcopy(&dccb->sense_data, &ccb->csio.sense_data, in dpt_intr_locked()
1696 ccb->csio.sense_len); in dpt_intr_locked()
1697 ccb->ccb_h.status |= CAM_AUTOSNS_VALID; in dpt_intr_locked()
1700 ccb->ccb_h.status |= CAM_SCSI_STATUS_ERROR; in dpt_intr_locked()
1704 ccb->csio.resid = residue_len; in dpt_intr_locked()
1706 xpt_done(ccb); in dpt_intr_locked()
1708 dptprocesserror(dpt, dccb, ccb, hba_stat, scsi_stat, in dpt_intr_locked()
1715 dptprocesserror(dpt_softc_t *dpt, dpt_ccb_t *dccb, union ccb *ccb, in dptprocesserror() argument
1718 ccb->csio.resid = resid; in dptprocesserror()
1721 ccb->ccb_h.status = CAM_SEL_TIMEOUT; in dptprocesserror()
1724 ccb->ccb_h.status = CAM_CMD_TIMEOUT; in dptprocesserror()
1728 ccb->ccb_h.status = CAM_SCSI_BUS_RESET; in dptprocesserror()
1734 if ((ccb->ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_INPROG) in dptprocesserror()
1735 ccb->ccb_h.status = CAM_REQ_ABORTED; in dptprocesserror()
1744 ccb->ccb_h.status = CAM_UNCOR_PARITY; in dptprocesserror()
1747 ccb->ccb_h.status = CAM_MSG_REJECT_REC; in dptprocesserror()
1750 ccb->ccb_h.status = CAM_SEQUENCE_FAIL; in dptprocesserror()
1753 ccb->ccb_h.status = CAM_UNEXP_BUSFREE; in dptprocesserror()
1761 ccb->ccb_h.status = CAM_NO_HBA; in dptprocesserror()
1764 ccb->ccb_h.status = CAM_AUTOSENSE_FAIL; in dptprocesserror()
1769 ccb->ccb_h.status = CAM_REQ_CMP_ERR; in dptprocesserror()
1773 xpt_done(ccb); in dptprocesserror()
1780 union ccb *ccb; in dpttimeout() local
1784 ccb = dccb->ccb; in dpttimeout()
1785 dpt = (struct dpt_softc *)ccb->ccb_h.ccb_dpt_ptr; in dpttimeout()
1787 xpt_print_path(ccb->ccb_h.path); in dpttimeout()
1799 xpt_print_path(ccb->ccb_h.path); in dpttimeout()
1808 ccb->ccb_h.status = CAM_CMD_TIMEOUT; in dpttimeout()
1851 eata_ccb_t *ccb;
1865 ccb = &dccb.eata_ccb;
1866 ccb->CP_OpCode = EATA_CMD_RESET;
1867 ccb->SCSI_Reset = 0;
1868 ccb->HBA_Init = 1;
1869 ccb->Auto_Req_Sen = 1;
1870 ccb->cp_id = 0; /* Should be ignored */
1871 ccb->DataIn = 1;
1872 ccb->DataOut = 0;
1873 ccb->Interpret = 1;
1874 ccb->reqlen = htonl(sizeof(struct scsi_sense_data));
1875 ccb->cp_statDMA = htonl(vtophys(&ccb->cp_statDMA));
1876 ccb->cp_reqDMA = htonl(vtophys(&ccb->cp_reqDMA));
1877 ccb->cp_viraddr = (u_int32_t) & ccb;
1879 ccb->cp_msg[0] = HA_IDENTIFY_MSG | HA_DISCO_RECO;
1880 ccb->cp_scsi_cmd = 0; /* Should be ignored */
1954 dpt_ccb_t * ccb, int mode, u_int8_t command,
1967 ccb->xs = NULL;
1968 ccb->flags = 0;
1969 ccb->state = DPT_CCB_STATE_NEW;
1970 ccb->std_callback = (ccb_callback) dpt_target_done;
1971 ccb->wrbuff_callback = NULL;
1973 cp = &ccb->eata_ccb;
1985 cp->cp_viraddr = (u_int32_t) & ccb;
2005 if (dpt_scatter_gather(dpt, ccb, DPT_RW_BUFFER_SIZE,
2017 u_int16_t length, u_int16_t offset, dpt_ccb_t * ccb)
2023 dpt_target_ccb(dpt, bus, target, lun, ccb, mode,
2026 ccb->transaction_id = ++dpt->commands_processed;
2029 dpt->performance.command_count[ccb->eata_ccb.cp_scsi_cmd]++;
2030 ccb->command_started = microtime_now;
2032 dpt_Qadd_waiting(dpt, ccb);
2055 dpt_ccb_t *ccb = NULL;
2084 if ((ccb = dpt_Qpop_free(dpt)) == NULL) {
2091 dpt_target_ccb(dpt, channel, target, lun, ccb, mode,
2094 ccb->std_callback = (ccb_callback) callback; /* Potential trouble */
2096 ccb->transaction_id = ++dpt->commands_processed;
2099 dpt->performance.command_count[ccb->eata_ccb.cp_scsi_cmd]++;
2100 ccb->command_started = microtime_now;
2102 dpt_Qadd_waiting(dpt, ccb);
2113 dpt_target_done(dpt_softc_t * dpt, int bus, dpt_ccb_t * ccb)
2117 cp = &ccb->eata_ccb;
2124 dpt_Qremove_completed(dpt, ccb);
2126 #define br_channel (ccb->eata_ccb.cp_channel)
2127 #define br_target (ccb->eata_ccb.cp_id)
2128 #define br_lun (ccb->eata_ccb.cp_LUN)
2132 #define cb(offset) (ccb->eata_ccb.cp_cdb[offset])
2137 switch (ccb->eata_ccb.cp_scsi_cmd) {
2150 wakeup(ccb);
2158 (ccb->wrbuff_callback) (device_get_unit(dpt->dev), br_channel,
2160 br_lun, ccb->status_packet.hba_stat);
2165 scsi_cmd_name(ccb->eata_ccb.cp_scsi_cmd));
2168 dpt_Qpush_free(dpt, ccb);
2183 dpt_ccb_t *ccb = NULL;
2217 if ((ccb = dpt_Qpop_free(dpt)) == NULL) {
2224 ccb->status = DPT_CCB_STATE_NEW;
2225 dpt->target_ccb[channel][target][lun] = ccb;
2232 dpt_Qpush_free(dpt, ccb);
2237 length, offset, ccb);
2256 dpt_Qpush_free(dpt, ccb);
2304 dpt_ccb_t *ccb;
2341 if ((ccb = dpt_Qpop_free(dpt)) == NULL) {
2346 ccb->status = DPT_CCB_STATE_NEW;
2349 bcopy((caddr_t) & user_cmd->command_packet, (caddr_t) & ccb->eata_ccb,
2353 if (ccb->eata_ccb.scatter == 1)
2356 ccb->eata_ccb.Auto_Req_Sen = 1;
2357 ccb->eata_ccb.reqlen = htonl(sizeof(struct scsi_sense_data));
2358 ccb->eata_ccb.cp_datalen = htonl(sizeof(ccb->eata_ccb.cp_datalen));
2359 ccb->eata_ccb.cp_dataDMA = htonl(vtophys(ccb->eata_ccb.cp_dataDMA));
2360 ccb->eata_ccb.cp_statDMA = htonl(vtophys(&ccb->eata_ccb.cp_statDMA));
2361 ccb->eata_ccb.cp_reqDMA = htonl(vtophys(&ccb->eata_ccb.cp_reqDMA));
2362 ccb->eata_ccb.cp_viraddr = (u_int32_t) & ccb;
2364 if (ccb->eata_ccb.DataIn || ccb->eata_ccb.DataOut) {
2366 if (ccb->eata_ccb.cp_datalen > PAGE_SIZE) {
2367 data = contigmalloc(ccb->eata_ccb.cp_datalen,
2369 ccb->eata_ccb.cp_datalen,
2372 data = malloc(ccb->eata_ccb.cp_datalen, M_TEMP,
2379 ccb->eata_ccb.cp_datalen);
2383 if (ccb->eata_ccb.DataIn == 1) {
2385 data, ccb->eata_ccb.cp_datalen) == -1)
2390 ccb->eata_ccb.cp_datalen = 0;
2394 if (ccb->eata_ccb.FWNEST == 1)
2395 ccb->eata_ccb.FWNEST = 0;
2397 if (ccb->eata_ccb.cp_datalen != 0) {
2398 if (dpt_scatter_gather(dpt, ccb, ccb->eata_ccb.cp_datalen,
2411 if ((ccb->eata_ccb.cp_cdb[0] == MULTIFUNCTION_CMD)
2412 && (ccb->eata_ccb.cp_cdb[2] == BUS_QUIET)) {
2433 if ((ccb->eata_ccb.cp_cdb[0] == MULTIFUNCTION_CMD)
2434 && (ccb->eata_ccb.cp_cdb[2] == BUS_UNQUIET)) {
2441 ccb->xs = NULL;
2442 ccb->flags = 0;
2443 ccb->eata_ccb.Auto_Req_Sen = 1; /* We always want this feature */
2445 ccb->transaction_id = ++dpt->commands_processed;
2446 ccb->std_callback = (ccb_callback) dpt_user_cmd_done;
2447 ccb->result = (u_int32_t) & cmdarg;
2448 ccb->data = data;
2451 ++dpt->performance.command_count[ccb->eata_ccb.cp_scsi_cmd];
2452 ccb->command_started = microtime_now;
2454 dpt_Qadd_waiting(dpt, ccb);
2459 (void) mtx_sleep((void *) ccb, &dpt->lock, PCATCH | PRIBIO, "dptucw",
2470 dpt_user_cmd_done(dpt_softc_t * dpt, int bus, dpt_ccb_t * ccb)
2480 #define usr_pckt_DMA (caddr_t)(intptr_t)ntohl(ccb->eata_ccb.cp_reqDMA)
2481 #define usr_pckt_len ntohl(ccb->eata_ccb.cp_datalen)
2482 if (ccb->eata_ccb.Auto_Req_Sen == 1) {
2483 if (copyout((caddr_t) & ccb->sense_data, usr_pckt_DMA,
2486 ccb->result = EFAULT;
2487 dpt_Qpush_free(dpt, ccb);
2488 wakeup(ccb);
2493 if ((ccb->eata_ccb.DataIn == 1)
2494 && (ccb->status_packet.hba_stat == HA_NO_ERROR)) {
2495 if (copyout(ccb->data, usr_pckt_DMA, usr_pckt_len)) {
2497 dpt_Qpush_free(dpt, ccb);
2498 ccb->result = EFAULT;
2500 wakeup(ccb);
2505 result = ccb->status_packet.hba_stat;
2506 cmd_arg = (caddr_t) ccb->result;
2510 dpt_Qpush_free(dpt, ccb);
2511 ccb->result = EFAULT;
2512 wakeup(ccb);
2517 ccb->state |= DPT_CCB_STATE_COMPLETED;
2518 dpt_Qpush_free(dpt, ccb);