Lines Matching refs:dcb

230 	struct DeviceCtlBlk *dcb;  member
380 static u8 start_scsi(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
384 static void build_srb(struct scsi_cmnd *cmd, struct DeviceCtlBlk *dcb,
392 static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
394 static void request_sense(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
397 struct DeviceCtlBlk *dcb);
736 static void free_tag(struct DeviceCtlBlk *dcb, struct ScsiReqBlk *srb) in free_tag() argument
739 dcb->tag_mask &= ~(1 << srb->tag_number); /* free tag mask */ in free_tag()
778 static void srb_waiting_insert(struct DeviceCtlBlk *dcb, in srb_waiting_insert() argument
782 srb->cmd, dcb->target_id, dcb->target_lun, srb); in srb_waiting_insert()
783 list_add(&srb->list, &dcb->srb_waiting_list); in srb_waiting_insert()
787 static void srb_waiting_append(struct DeviceCtlBlk *dcb, in srb_waiting_append() argument
791 srb->cmd, dcb->target_id, dcb->target_lun, srb); in srb_waiting_append()
792 list_add_tail(&srb->list, &dcb->srb_waiting_list); in srb_waiting_append()
796 static void srb_going_append(struct DeviceCtlBlk *dcb, struct ScsiReqBlk *srb) in srb_going_append() argument
799 srb->cmd, dcb->target_id, dcb->target_lun, srb); in srb_going_append()
800 list_add_tail(&srb->list, &dcb->srb_going_list); in srb_going_append()
804 static void srb_going_remove(struct DeviceCtlBlk *dcb, struct ScsiReqBlk *srb) in srb_going_remove() argument
809 srb->cmd, dcb->target_id, dcb->target_lun, srb); in srb_going_remove()
811 list_for_each_entry_safe(i, tmp, &dcb->srb_going_list, list) in srb_going_remove()
819 static void srb_waiting_remove(struct DeviceCtlBlk *dcb, in srb_waiting_remove() argument
825 srb->cmd, dcb->target_id, dcb->target_lun, srb); in srb_waiting_remove()
827 list_for_each_entry_safe(i, tmp, &dcb->srb_waiting_list, list) in srb_waiting_remove()
835 static void srb_going_to_waiting_move(struct DeviceCtlBlk *dcb, in srb_going_to_waiting_move() argument
840 srb->cmd, dcb->target_id, dcb->target_lun, srb); in srb_going_to_waiting_move()
841 list_move(&srb->list, &dcb->srb_waiting_list); in srb_going_to_waiting_move()
845 static void srb_waiting_to_going_move(struct DeviceCtlBlk *dcb, in srb_waiting_to_going_move() argument
850 srb->cmd, dcb->target_id, dcb->target_lun, srb); in srb_waiting_to_going_move()
851 list_move(&srb->list, &dcb->srb_going_list); in srb_waiting_to_going_move()
877 struct DeviceCtlBlk *dcb; in waiting_process_next() local
895 list_for_each_entry(dcb, dcb_list_head, list) in waiting_process_next()
896 if (dcb == acb->dcb_run_robin) { in waiting_process_next()
897 start = dcb; in waiting_process_next()
961 struct DeviceCtlBlk *dcb = srb->dcb; in send_srb() local
963 if (dcb->max_command <= list_size(&dcb->srb_going_list) || in send_srb()
966 srb_waiting_append(dcb, srb); in send_srb()
971 if (!start_scsi(acb, dcb, srb)) in send_srb()
972 srb_going_append(dcb, srb); in send_srb()
974 srb_waiting_insert(dcb, srb); in send_srb()
980 static void build_srb(struct scsi_cmnd *cmd, struct DeviceCtlBlk *dcb, in build_srb() argument
986 cmd, dcb->target_id, dcb->target_lun); in build_srb()
988 srb->dcb = dcb; in build_srb()
1045 if (dcb->sync_period & WIDE_SYNC && in build_srb()
1051 srb->sg_bus_addr = pci_map_single(dcb->acb->dev, in build_srb()
1085 struct DeviceCtlBlk *dcb; in dc395x_queue_command_lck() local
1110 dcb = find_dcb(acb, cmd->device->id, cmd->device->lun); in dc395x_queue_command_lck()
1111 if (!dcb) { in dc395x_queue_command_lck()
1133 build_srb(cmd, dcb, srb); in dc395x_queue_command_lck()
1135 if (!list_empty(&dcb->srb_waiting_list)) { in dc395x_queue_command_lck()
1137 srb_waiting_append(dcb, srb); in dc395x_queue_command_lck()
1192 struct DeviceCtlBlk *dcb, struct ScsiReqBlk *srb) in dump_register_info() argument
1197 if (!dcb) in dump_register_info()
1198 dcb = acb->active_dcb; in dump_register_info()
1199 if (!srb && dcb) in dump_register_info()
1200 srb = dcb->active_srb; in dump_register_info()
1273 struct DeviceCtlBlk *dcb; in reset_dev_param() local
1277 list_for_each_entry(dcb, &acb->dcb_list, list) { in reset_dev_param()
1280 dcb->sync_mode &= ~(SYNC_NEGO_DONE + WIDE_NEGO_DONE); in reset_dev_param()
1281 dcb->sync_period = 0; in reset_dev_param()
1282 dcb->sync_offset = 0; in reset_dev_param()
1284 dcb->dev_mode = eeprom->target[dcb->target_id].cfg0; in reset_dev_param()
1285 period_index = eeprom->target[dcb->target_id].period & 0x07; in reset_dev_param()
1286 dcb->min_nego_period = clock_period[period_index]; in reset_dev_param()
1287 if (!(dcb->dev_mode & NTC_DO_WIDE_NEGO) in reset_dev_param()
1289 dcb->sync_mode &= ~WIDE_NEGO_ENABLE; in reset_dev_param()
1369 struct DeviceCtlBlk *dcb; in dc395x_eh_abort() local
1374 dcb = find_dcb(acb, cmd->device->id, cmd->device->lun); in dc395x_eh_abort()
1375 if (!dcb) { in dc395x_eh_abort()
1380 srb = find_cmd(cmd, &dcb->srb_waiting_list); in dc395x_eh_abort()
1382 srb_waiting_remove(dcb, srb); in dc395x_eh_abort()
1385 free_tag(dcb, srb); in dc395x_eh_abort()
1391 srb = find_cmd(cmd, &dcb->srb_going_list); in dc395x_eh_abort()
1403 static void build_sdtr(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb, in build_sdtr() argument
1414 if (!(dcb->dev_mode & NTC_DO_SYNC_NEGO)) { in build_sdtr()
1415 dcb->sync_offset = 0; in build_sdtr()
1416 dcb->min_nego_period = 200 >> 2; in build_sdtr()
1417 } else if (dcb->sync_offset == 0) in build_sdtr()
1418 dcb->sync_offset = SYNC_NEGO_OFFSET; in build_sdtr()
1423 *ptr++ = dcb->min_nego_period; /* Transfer period (in 4ns) */ in build_sdtr()
1424 *ptr++ = dcb->sync_offset; /* Transfer period (max. REQ/ACK dist) */ in build_sdtr()
1431 static void build_wdtr(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb, in build_wdtr() argument
1434 u8 wide = ((dcb->dev_mode & NTC_DO_WIDE_NEGO) & in build_wdtr()
1492 static u8 start_scsi(struct AdapterCtlBlk* acb, struct DeviceCtlBlk* dcb, in start_scsi() argument
1499 dcb->target_id, dcb->target_lun, srb); in start_scsi()
1546 DC395x_write8(acb, TRM_S1040_SCSI_TARGETID, dcb->target_id); in start_scsi()
1547 DC395x_write8(acb, TRM_S1040_SCSI_SYNC, dcb->sync_period); in start_scsi()
1548 DC395x_write8(acb, TRM_S1040_SCSI_OFFSET, dcb->sync_offset); in start_scsi()
1551 identify_message = dcb->identify_msg; in start_scsi()
1560 && (((dcb->sync_mode & WIDE_NEGO_ENABLE) in start_scsi()
1561 && !(dcb->sync_mode & WIDE_NEGO_DONE)) in start_scsi()
1562 || ((dcb->sync_mode & SYNC_NEGO_ENABLE) in start_scsi()
1563 && !(dcb->sync_mode & SYNC_NEGO_DONE))) in start_scsi()
1564 && (dcb->target_lun == 0)) { in start_scsi()
1570 if (dcb->sync_mode & WIDE_NEGO_ENABLE in start_scsi()
1571 && dcb->inquiry7 & SCSI_INQ_WBUS16) { in start_scsi()
1572 build_wdtr(acb, dcb, srb); in start_scsi()
1576 if (dcb->sync_mode & SYNC_NEGO_ENABLE in start_scsi()
1577 && dcb->inquiry7 & SCSI_INQ_SYNC) { in start_scsi()
1578 build_sdtr(acb, dcb, srb); in start_scsi()
1581 if (dcb->sync_mode & WIDE_NEGO_ENABLE in start_scsi()
1582 && dcb->inquiry7 & SCSI_INQ_WBUS16) { in start_scsi()
1583 build_wdtr(acb, dcb, srb); in start_scsi()
1594 if ((dcb->sync_mode & EN_TAG_QUEUEING) in start_scsi()
1599 while (tag_mask & dcb->tag_mask in start_scsi()
1600 && tag_number < dcb->max_command) { in start_scsi()
1604 if (tag_number >= dcb->max_command) { in start_scsi()
1617 dcb->tag_mask |= tag_mask; in start_scsi()
1630 DC395x_write8(acb, TRM_S1040_SCSI_FIFO, (dcb->target_lun << 5)); in start_scsi()
1650 srb->cmd, dcb->target_id, dcb->target_lun); in start_scsi()
1652 free_tag(dcb, srb); in start_scsi()
1662 dcb->active_srb = srb; in start_scsi()
1663 acb->active_dcb = dcb; in start_scsi()
1702 struct DeviceCtlBlk *dcb; in dc395x_handle_interrupt() local
1743 dcb = acb->active_dcb; in dc395x_handle_interrupt()
1744 if (!dcb) { in dc395x_handle_interrupt()
1750 srb = dcb->active_srb; in dc395x_handle_interrupt()
1751 if (dcb->flag & ABORT_DEV_) { in dc395x_handle_interrupt()
1898 struct DeviceCtlBlk *dcb; in command_phase1() local
1913 dcb = acb->active_dcb; in command_phase1()
1915 DC395x_write8(acb, TRM_S1040_SCSI_FIFO, (dcb->target_lun << 5)); in command_phase1()
1978 pci_dma_sync_single_for_device(srb->dcb-> in sg_update_list()
2040 struct DeviceCtlBlk *dcb = srb->dcb; in data_out_phase0() local
2086 if (dcb->sync_period & WIDE_SYNC) in data_out_phase0()
2093 (dcb->sync_period & WIDE_SYNC) ? "words" : "bytes", in data_out_phase0()
2116 if (d_left_counter == 1 && dcb->sync_period & WIDE_SYNC in data_out_phase0()
2144 (dcb->sync_period & WIDE_SYNC) ? 2 : 1; in data_out_phase0()
2244 << ((srb->dcb->sync_period & WIDE_SYNC) ? 1 : in data_in_phase0()
2251 (srb->dcb->sync_period & WIDE_SYNC) ? "words" : "bytes", in data_in_phase0()
2268 (srb->dcb->sync_period & WIDE_SYNC) ? in data_in_phase0()
2271 if (srb->dcb->sync_period & WIDE_SYNC) in data_in_phase0()
2312 if (fc == 0x40 && (srb->dcb->sync_period & WIDE_SYNC)) { in data_in_phase0()
2349 if (srb->dcb->sync_period & WIDE_SYNC) in data_in_phase0()
2405 struct DeviceCtlBlk *dcb = srb->dcb; in data_io_transfer() local
2428 dump_register_info(acb, dcb, srb); in data_io_transfer()
2488 if (srb->dcb->sync_period & WIDE_SYNC) in data_io_transfer()
2518 if (srb->dcb->sync_period & WIDE_SYNC) { in data_io_transfer()
2545 if (dcb->sync_period & WIDE_SYNC) { in data_io_transfer()
2628 srb->dcb->target_id, srb->dcb->target_lun); in msgin_reject()
2633 struct DeviceCtlBlk *dcb, u8 tag) in msgin_qtag() argument
2640 if (!(dcb->tag_mask & (1 << tag))) in msgin_qtag()
2643 dcb->tag_mask, tag); in msgin_qtag()
2645 if (list_empty(&dcb->srb_going_list)) in msgin_qtag()
2647 list_for_each_entry(i, &dcb->srb_going_list, list) { in msgin_qtag()
2657 srb->cmd, srb->dcb->target_id, srb->dcb->target_lun); in msgin_qtag()
2658 if (dcb->flag & ABORT_DEV_) { in msgin_qtag()
2666 memcpy(srb->msgin_buf, dcb->active_srb->msgin_buf, acb->msg_len); in msgin_qtag()
2667 srb->state |= dcb->active_srb->state; in msgin_qtag()
2669 dcb->active_srb = srb; in msgin_qtag()
2676 dcb->active_srb = srb; in msgin_qtag()
2686 struct DeviceCtlBlk *dcb) in reprogram_regs() argument
2688 DC395x_write8(acb, TRM_S1040_SCSI_TARGETID, dcb->target_id); in reprogram_regs()
2689 DC395x_write8(acb, TRM_S1040_SCSI_SYNC, dcb->sync_period); in reprogram_regs()
2690 DC395x_write8(acb, TRM_S1040_SCSI_OFFSET, dcb->sync_offset); in reprogram_regs()
2691 set_xfer_rate(acb, dcb); in reprogram_regs()
2698 struct DeviceCtlBlk *dcb = srb->dcb; in msgin_set_async() local
2700 dcb->target_id, dcb->target_lun); in msgin_set_async()
2702 dcb->sync_mode &= ~(SYNC_NEGO_ENABLE); in msgin_set_async()
2703 dcb->sync_mode |= SYNC_NEGO_DONE; in msgin_set_async()
2705 dcb->sync_offset = 0; in msgin_set_async()
2706 dcb->min_nego_period = 200 >> 2; /* 200ns <=> 5 MHz */ in msgin_set_async()
2708 reprogram_regs(acb, dcb); in msgin_set_async()
2709 if ((dcb->sync_mode & WIDE_NEGO_ENABLE) in msgin_set_async()
2710 && !(dcb->sync_mode & WIDE_NEGO_DONE)) { in msgin_set_async()
2711 build_wdtr(acb, dcb, srb); in msgin_set_async()
2721 struct DeviceCtlBlk *dcb = srb->dcb; in msgin_set_sync() local
2726 dcb->target_id, srb->msgin_buf[3] << 2, in msgin_set_sync()
2733 if (!(dcb->dev_mode & NTC_DO_SYNC_NEGO)) in msgin_set_sync()
2734 dcb->sync_offset = 0; in msgin_set_sync()
2735 else if (dcb->sync_offset == 0) in msgin_set_sync()
2736 dcb->sync_offset = srb->msgin_buf[4]; in msgin_set_sync()
2737 if (srb->msgin_buf[4] > dcb->sync_offset) in msgin_set_sync()
2738 srb->msgin_buf[4] = dcb->sync_offset; in msgin_set_sync()
2740 dcb->sync_offset = srb->msgin_buf[4]; in msgin_set_sync()
2743 || dcb->min_nego_period > in msgin_set_sync()
2751 dcb->sync_period &= 0xf0; in msgin_set_sync()
2752 dcb->sync_period |= ALT_SYNC | bval; in msgin_set_sync()
2753 dcb->min_nego_period = srb->msgin_buf[3]; in msgin_set_sync()
2755 if (dcb->sync_period & WIDE_SYNC) in msgin_set_sync()
2762 dcb->target_id, (fact == 500) ? "Wide16" : "", in msgin_set_sync()
2763 dcb->min_nego_period << 2, dcb->sync_offset, in msgin_set_sync()
2764 (fact / dcb->min_nego_period), in msgin_set_sync()
2765 ((fact % dcb->min_nego_period) * 10 + in msgin_set_sync()
2766 dcb->min_nego_period / 2) / dcb->min_nego_period); in msgin_set_sync()
2776 dcb->sync_mode |= SYNC_NEGO_DONE; in msgin_set_sync()
2778 if ((dcb->sync_mode & WIDE_NEGO_ENABLE) in msgin_set_sync()
2779 && !(dcb->sync_mode & WIDE_NEGO_DONE)) { in msgin_set_sync()
2780 build_wdtr(acb, dcb, srb); in msgin_set_sync()
2786 dcb->sync_mode |= SYNC_NEGO_DONE | SYNC_NEGO_ENABLE; in msgin_set_sync()
2788 reprogram_regs(acb, dcb); in msgin_set_sync()
2795 struct DeviceCtlBlk *dcb = srb->dcb; in msgin_set_nowide() local
2796 dprintkdbg(DBG_1, "msgin_set_nowide: <%02i>\n", dcb->target_id); in msgin_set_nowide()
2798 dcb->sync_period &= ~WIDE_SYNC; in msgin_set_nowide()
2799 dcb->sync_mode &= ~(WIDE_NEGO_ENABLE); in msgin_set_nowide()
2800 dcb->sync_mode |= WIDE_NEGO_DONE; in msgin_set_nowide()
2802 reprogram_regs(acb, dcb); in msgin_set_nowide()
2803 if ((dcb->sync_mode & SYNC_NEGO_ENABLE) in msgin_set_nowide()
2804 && !(dcb->sync_mode & SYNC_NEGO_DONE)) { in msgin_set_nowide()
2805 build_sdtr(acb, dcb, srb); in msgin_set_nowide()
2813 struct DeviceCtlBlk *dcb = srb->dcb; in msgin_set_wide() local
2814 u8 wide = (dcb->dev_mode & NTC_DO_WIDE_NEGO in msgin_set_wide()
2816 dprintkdbg(DBG_1, "msgin_set_wide: <%02i>\n", dcb->target_id); in msgin_set_wide()
2824 dcb->target_id); in msgin_set_wide()
2831 dcb->sync_mode |= (WIDE_NEGO_ENABLE | WIDE_NEGO_DONE); in msgin_set_wide()
2833 dcb->sync_period |= WIDE_SYNC; in msgin_set_wide()
2835 dcb->sync_period &= ~WIDE_SYNC; in msgin_set_wide()
2840 (8 << srb->msgin_buf[3]), dcb->target_id); in msgin_set_wide()
2841 reprogram_regs(acb, dcb); in msgin_set_wide()
2842 if ((dcb->sync_mode & SYNC_NEGO_ENABLE) in msgin_set_wide()
2843 && !(dcb->sync_mode & SYNC_NEGO_DONE)) { in msgin_set_wide()
2844 build_sdtr(acb, dcb, srb); in msgin_set_wide()
2866 struct DeviceCtlBlk *dcb = acb->active_dcb; in msgin_phase0() local
2881 msgin_qtag(acb, dcb, in msgin_phase0()
2945 srb->cmd, dcb->target_id, in msgin_phase0()
2946 dcb->target_lun); in msgin_phase0()
2947 dcb->flag |= ABORT_DEV_; in msgin_phase0()
2956 srb->msgout_buf[0] = dcb->identify_msg; in msgin_phase0()
3002 static void set_xfer_rate(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb) in set_xfer_rate() argument
3007 if (dcb->identify_msg & 0x07) in set_xfer_rate()
3011 current_sync_offset = dcb->sync_offset; in set_xfer_rate()
3016 if (i->target_id == dcb->target_id) { in set_xfer_rate()
3017 i->sync_period = dcb->sync_period; in set_xfer_rate()
3018 i->sync_offset = dcb->sync_offset; in set_xfer_rate()
3019 i->sync_mode = dcb->sync_mode; in set_xfer_rate()
3020 i->min_nego_period = dcb->min_nego_period; in set_xfer_rate()
3027 struct DeviceCtlBlk *dcb = acb->active_dcb; in disconnect() local
3030 if (!dcb) { in disconnect()
3041 srb = dcb->active_srb; in disconnect()
3051 dcb->target_id, dcb->target_lun); in disconnect()
3055 dcb->flag &= ~ABORT_DEV_; in disconnect()
3081 dcb->target_id, dcb->target_lun); in disconnect()
3088 free_tag(dcb, srb); in disconnect()
3089 srb_going_to_waiting_move(dcb, srb); in disconnect()
3112 free_tag(dcb, srb); in disconnect()
3113 dcb->active_srb = NULL; in disconnect()
3115 srb_done(acb, dcb, srb); in disconnect()
3123 struct DeviceCtlBlk *dcb = acb->active_dcb; in reselect() local
3134 if (dcb) { /* Arbitration lost but Reselection win */ in reselect()
3135 srb = dcb->active_srb; in reselect()
3146 srb->cmd, dcb->target_id, in reselect()
3147 dcb->target_lun, rsel_tar_lun_id, in reselect()
3153 free_tag(dcb, srb); in reselect()
3154 srb_going_to_waiting_move(dcb, srb); in reselect()
3166 dcb = find_dcb(acb, id, lun); in reselect()
3167 if (!dcb) { in reselect()
3173 acb->active_dcb = dcb; in reselect()
3175 if (!(dcb->dev_mode & NTC_DO_DISCONNECT)) in reselect()
3178 dcb->target_id, dcb->target_lun); in reselect()
3180 if (dcb->sync_mode & EN_TAG_QUEUEING /*&& !arblostflag */) { in reselect()
3182 dcb->active_srb = srb; in reselect()
3185 srb = dcb->active_srb; in reselect()
3192 dcb->target_id, dcb->target_lun); in reselect()
3195 dcb->active_srb = srb; in reselect()
3198 if (dcb->flag & ABORT_DEV_) { in reselect()
3209 dprintkdbg(DBG_0, "reselect: select <%i>\n", dcb->target_id); in reselect()
3211 DC395x_write8(acb, TRM_S1040_SCSI_TARGETID, dcb->target_id); /* target ID */ in reselect()
3212 DC395x_write8(acb, TRM_S1040_SCSI_OFFSET, dcb->sync_offset); /* offset */ in reselect()
3213 DC395x_write8(acb, TRM_S1040_SCSI_SYNC, dcb->sync_period); /* sync period, wide */ in reselect()
3236 static void disc_tagq_set(struct DeviceCtlBlk *dcb, struct ScsiInqData *ptr) in disc_tagq_set() argument
3241 && (dcb->dev_mode & NTC_DO_TAG_QUEUEING) && in disc_tagq_set()
3246 if (dcb->max_command == 1) in disc_tagq_set()
3247 dcb->max_command = in disc_tagq_set()
3248 dcb->acb->tag_max_num; in disc_tagq_set()
3249 dcb->sync_mode |= EN_TAG_QUEUEING; in disc_tagq_set()
3252 dcb->max_command = 1; in disc_tagq_set()
3257 static void add_dev(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb, in add_dev() argument
3261 dcb->dev_type = bval1; in add_dev()
3263 disc_tagq_set(dcb, ptr); in add_dev()
3312 static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb, in srb_done() argument
3340 cmd->cmnd[0], dcb->target_id, in srb_done()
3341 dcb->target_lun, status, acb->scan_devices); in srb_done()
3346 cmd->cmnd[0], dcb->target_id, in srb_done()
3347 dcb->target_lun, status, acb->scan_devices); in srb_done()
3352 cmd->cmnd[0], dcb->target_id, in srb_done()
3353 dcb->target_lun, status, acb->scan_devices); in srb_done()
3358 cmd->cmnd[0], dcb->target_id, in srb_done()
3359 dcb->target_lun, status, acb->scan_devices); in srb_done()
3364 cmd->cmnd[0], dcb->target_id, in srb_done()
3365 dcb->target_lun, status, acb->scan_devices); in srb_done()
3407 request_sense(acb, dcb, srb); in srb_done()
3410 tempcnt = (u8)list_size(&dcb->srb_going_list); in srb_done()
3412 dcb->target_id, dcb->target_lun, tempcnt); in srb_done()
3415 dcb->max_command = tempcnt; in srb_done()
3416 free_tag(dcb, srb); in srb_done()
3417 srb_going_to_waiting_move(dcb, srb); in srb_done()
3475 dcb->inquiry7 = ptr->Flags; in srb_done()
3482 if (!dcb->init_tcq_flag) { in srb_done()
3483 add_dev(acb, dcb, ptr); in srb_done()
3484 dcb->init_tcq_flag = 1; in srb_done()
3505 srb_going_remove(dcb, srb); in srb_done()
3525 struct DeviceCtlBlk *dcb; in doing_srb_done() local
3528 list_for_each_entry(dcb, &acb->dcb_list, list) { in doing_srb_done()
3533 list_for_each_entry_safe(srb, tmp, &dcb->srb_going_list, list) { in doing_srb_done()
3542 srb_going_remove(dcb, srb); in doing_srb_done()
3543 free_tag(dcb, srb); in doing_srb_done()
3554 if (!list_empty(&dcb->srb_going_list)) in doing_srb_done()
3557 dcb->target_id, dcb->target_lun); in doing_srb_done()
3558 if (dcb->tag_mask) in doing_srb_done()
3561 dcb->target_id, dcb->target_lun, in doing_srb_done()
3562 dcb->tag_mask); in doing_srb_done()
3565 list_for_each_entry_safe(srb, tmp, &dcb->srb_waiting_list, list) { in doing_srb_done()
3572 srb_waiting_remove(dcb, srb); in doing_srb_done()
3583 if (!list_empty(&dcb->srb_waiting_list)) in doing_srb_done()
3585 list_size(&dcb->srb_waiting_list), dcb->target_id, in doing_srb_done()
3586 dcb->target_lun); in doing_srb_done()
3587 dcb->flag &= ~ABORT_DEV_; in doing_srb_done()
3675 static void request_sense(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb, in request_sense() argument
3708 if (start_scsi(acb, dcb, srb)) { /* Should only happen, if sb. else grabs the bus */ in request_sense()
3711 srb->cmd, dcb->target_id, dcb->target_lun); in request_sense()
3712 srb_going_to_waiting_move(dcb, srb); in request_sense()
3736 struct DeviceCtlBlk *dcb; in device_alloc() local
3738 dcb = kmalloc(sizeof(struct DeviceCtlBlk), GFP_ATOMIC); in device_alloc()
3740 if (!dcb) in device_alloc()
3742 dcb->acb = NULL; in device_alloc()
3743 INIT_LIST_HEAD(&dcb->srb_going_list); in device_alloc()
3744 INIT_LIST_HEAD(&dcb->srb_waiting_list); in device_alloc()
3745 dcb->active_srb = NULL; in device_alloc()
3746 dcb->tag_mask = 0; in device_alloc()
3747 dcb->max_command = 1; in device_alloc()
3748 dcb->target_id = target; in device_alloc()
3749 dcb->target_lun = lun; in device_alloc()
3750 dcb->dev_mode = eeprom->target[target].cfg0; in device_alloc()
3752 dcb->identify_msg = in device_alloc()
3753 IDENTIFY(dcb->dev_mode & NTC_DO_DISCONNECT, lun); in device_alloc()
3755 dcb->identify_msg = IDENTIFY(0, lun); in device_alloc()
3757 dcb->inquiry7 = 0; in device_alloc()
3758 dcb->sync_mode = 0; in device_alloc()
3759 dcb->min_nego_period = clock_period[period_index]; in device_alloc()
3760 dcb->sync_period = 0; in device_alloc()
3761 dcb->sync_offset = 0; in device_alloc()
3762 dcb->flag = 0; in device_alloc()
3765 if ((dcb->dev_mode & NTC_DO_WIDE_NEGO) in device_alloc()
3767 dcb->sync_mode |= WIDE_NEGO_ENABLE; in device_alloc()
3770 if (dcb->dev_mode & NTC_DO_SYNC_NEGO) in device_alloc()
3772 dcb->sync_mode |= SYNC_NEGO_ENABLE; in device_alloc()
3774 if (dcb->target_lun != 0) { in device_alloc()
3778 if (p->target_id == dcb->target_id) in device_alloc()
3782 dcb->target_id, dcb->target_lun, in device_alloc()
3784 dcb->sync_mode = p->sync_mode; in device_alloc()
3785 dcb->sync_period = p->sync_period; in device_alloc()
3786 dcb->min_nego_period = p->min_nego_period; in device_alloc()
3787 dcb->sync_offset = p->sync_offset; in device_alloc()
3788 dcb->inquiry7 = p->inquiry7; in device_alloc()
3790 return dcb; in device_alloc()
3801 struct DeviceCtlBlk *dcb) in adapter_add_device() argument
3804 dcb->acb = acb; in adapter_add_device()
3808 acb->dcb_run_robin = dcb; in adapter_add_device()
3811 list_add_tail(&dcb->list, &acb->dcb_list); in adapter_add_device()
3814 acb->dcb_map[dcb->target_id] |= (1 << dcb->target_lun); in adapter_add_device()
3815 acb->children[dcb->target_id][dcb->target_lun] = dcb; in adapter_add_device()
3829 struct DeviceCtlBlk *dcb) in adapter_remove_device() argument
3834 dcb->target_id, dcb->target_lun); in adapter_remove_device()
3837 if (acb->active_dcb == dcb) in adapter_remove_device()
3839 if (acb->dcb_run_robin == dcb) in adapter_remove_device()
3840 acb->dcb_run_robin = dcb_get_next(&acb->dcb_list, dcb); in adapter_remove_device()
3844 if (dcb == i) { in adapter_remove_device()
3850 acb->dcb_map[dcb->target_id] &= ~(1 << dcb->target_lun); in adapter_remove_device()
3851 acb->children[dcb->target_id][dcb->target_lun] = NULL; in adapter_remove_device()
3852 dcb->acb = NULL; in adapter_remove_device()
3864 struct DeviceCtlBlk *dcb) in adapter_remove_and_free_device() argument
3866 if (list_size(&dcb->srb_going_list) > 1) { in adapter_remove_and_free_device()
3869 dcb->target_id, dcb->target_lun, in adapter_remove_and_free_device()
3870 list_size(&dcb->srb_going_list)); in adapter_remove_and_free_device()
3873 adapter_remove_device(acb, dcb); in adapter_remove_and_free_device()
3874 kfree(dcb); in adapter_remove_and_free_device()
3886 struct DeviceCtlBlk *dcb; in adapter_remove_and_free_all_devices() local
3891 list_for_each_entry_safe(dcb, tmp, &acb->dcb_list, list) in adapter_remove_and_free_all_devices()
3892 adapter_remove_and_free_device(acb, dcb); in adapter_remove_and_free_all_devices()
3906 struct DeviceCtlBlk *dcb; in dc395x_slave_alloc() local
3908 dcb = device_alloc(acb, scsi_device->id, scsi_device->lun); in dc395x_slave_alloc()
3909 if (!dcb) in dc395x_slave_alloc()
3911 adapter_add_device(acb, dcb); in dc395x_slave_alloc()
3926 struct DeviceCtlBlk *dcb = find_dcb(acb, scsi_device->id, scsi_device->lun); in dc395x_slave_destroy() local
3927 if (dcb) in dc395x_slave_destroy()
3928 adapter_remove_and_free_device(acb, dcb); in dc395x_slave_destroy()
4622 struct DeviceCtlBlk *dcb; in dc395x_show_info() local
4662 list_for_each_entry(dcb, &acb->dcb_list, list) { in dc395x_show_info()
4664 seq_printf(m, "%02i %02i %02i ", dev, dcb->target_id, in dc395x_show_info()
4665 dcb->target_lun); in dc395x_show_info()
4666 YESNO(dcb->dev_mode & NTC_DO_PARITY_CHK); in dc395x_show_info()
4667 YESNO(dcb->sync_offset); in dc395x_show_info()
4668 YESNO(dcb->sync_period & WIDE_SYNC); in dc395x_show_info()
4669 YESNO(dcb->dev_mode & NTC_DO_DISCONNECT); in dc395x_show_info()
4670 YESNO(dcb->dev_mode & NTC_DO_SEND_START); in dc395x_show_info()
4671 YESNO(dcb->sync_mode & EN_TAG_QUEUEING); in dc395x_show_info()
4672 nego_period = clock_period[dcb->sync_period & 0x07] << 2; in dc395x_show_info()
4673 if (dcb->sync_offset) in dc395x_show_info()
4676 seq_printf(m, " (%03i ns)", (dcb->min_nego_period << 2)); in dc395x_show_info()
4678 if (dcb->sync_offset & 0x0f) { in dc395x_show_info()
4683 (dcb->sync_offset & 0x0f)); in dc395x_show_info()
4688 seq_printf(m, " %02i\n", dcb->max_command); in dc395x_show_info()
4697 list_for_each_entry(dcb, &acb->dcb_list, list) { in dc395x_show_info()
4699 if (!list_empty(&dcb->srb_waiting_list)) in dc395x_show_info()
4701 dcb->target_id, dcb->target_lun, in dc395x_show_info()
4702 list_size(&dcb->srb_waiting_list)); in dc395x_show_info()
4703 list_for_each_entry(srb, &dcb->srb_waiting_list, list) in dc395x_show_info()
4705 if (!list_empty(&dcb->srb_going_list)) in dc395x_show_info()
4707 dcb->target_id, dcb->target_lun, in dc395x_show_info()
4708 list_size(&dcb->srb_going_list)); in dc395x_show_info()
4709 list_for_each_entry(srb, &dcb->srb_going_list, list) in dc395x_show_info()
4711 if (!list_empty(&dcb->srb_waiting_list) || !list_empty(&dcb->srb_going_list)) in dc395x_show_info()
4717 list_for_each_entry(dcb, &acb->dcb_list, list) { in dc395x_show_info()
4718 seq_printf(m, "%p -> ", dcb); in dc395x_show_info()