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()
874 struct DeviceCtlBlk *dcb; in waiting_process_next() local
892 list_for_each_entry(dcb, dcb_list_head, list) in waiting_process_next()
893 if (dcb == acb->dcb_run_robin) { in waiting_process_next()
894 start = dcb; in waiting_process_next()
958 struct DeviceCtlBlk *dcb = srb->dcb; in send_srb() local
960 if (dcb->max_command <= list_size(&dcb->srb_going_list) || in send_srb()
963 srb_waiting_append(dcb, srb); in send_srb()
968 if (!start_scsi(acb, dcb, srb)) in send_srb()
969 srb_going_append(dcb, srb); in send_srb()
971 srb_waiting_insert(dcb, srb); in send_srb()
977 static void build_srb(struct scsi_cmnd *cmd, struct DeviceCtlBlk *dcb, in build_srb() argument
983 cmd, dcb->target_id, dcb->target_lun); in build_srb()
985 srb->dcb = dcb; in build_srb()
1042 if (dcb->sync_period & WIDE_SYNC && in build_srb()
1048 srb->sg_bus_addr = pci_map_single(dcb->acb->dev, in build_srb()
1082 struct DeviceCtlBlk *dcb; in dc395x_queue_command_lck() local
1107 dcb = find_dcb(acb, cmd->device->id, cmd->device->lun); in dc395x_queue_command_lck()
1108 if (!dcb) { in dc395x_queue_command_lck()
1130 build_srb(cmd, dcb, srb); in dc395x_queue_command_lck()
1132 if (!list_empty(&dcb->srb_waiting_list)) { in dc395x_queue_command_lck()
1134 srb_waiting_append(dcb, srb); in dc395x_queue_command_lck()
1189 struct DeviceCtlBlk *dcb, struct ScsiReqBlk *srb) in dump_register_info() argument
1194 if (!dcb) in dump_register_info()
1195 dcb = acb->active_dcb; in dump_register_info()
1196 if (!srb && dcb) in dump_register_info()
1197 srb = dcb->active_srb; in dump_register_info()
1270 struct DeviceCtlBlk *dcb; in reset_dev_param() local
1274 list_for_each_entry(dcb, &acb->dcb_list, list) { in reset_dev_param()
1277 dcb->sync_mode &= ~(SYNC_NEGO_DONE + WIDE_NEGO_DONE); in reset_dev_param()
1278 dcb->sync_period = 0; in reset_dev_param()
1279 dcb->sync_offset = 0; in reset_dev_param()
1281 dcb->dev_mode = eeprom->target[dcb->target_id].cfg0; in reset_dev_param()
1282 period_index = eeprom->target[dcb->target_id].period & 0x07; in reset_dev_param()
1283 dcb->min_nego_period = clock_period[period_index]; in reset_dev_param()
1284 if (!(dcb->dev_mode & NTC_DO_WIDE_NEGO) in reset_dev_param()
1286 dcb->sync_mode &= ~WIDE_NEGO_ENABLE; in reset_dev_param()
1366 struct DeviceCtlBlk *dcb; in dc395x_eh_abort() local
1371 dcb = find_dcb(acb, cmd->device->id, cmd->device->lun); in dc395x_eh_abort()
1372 if (!dcb) { in dc395x_eh_abort()
1377 srb = find_cmd(cmd, &dcb->srb_waiting_list); in dc395x_eh_abort()
1379 srb_waiting_remove(dcb, srb); in dc395x_eh_abort()
1382 free_tag(dcb, srb); in dc395x_eh_abort()
1388 srb = find_cmd(cmd, &dcb->srb_going_list); in dc395x_eh_abort()
1400 static void build_sdtr(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb, in build_sdtr() argument
1411 if (!(dcb->dev_mode & NTC_DO_SYNC_NEGO)) { in build_sdtr()
1412 dcb->sync_offset = 0; in build_sdtr()
1413 dcb->min_nego_period = 200 >> 2; in build_sdtr()
1414 } else if (dcb->sync_offset == 0) in build_sdtr()
1415 dcb->sync_offset = SYNC_NEGO_OFFSET; in build_sdtr()
1420 *ptr++ = dcb->min_nego_period; /* Transfer period (in 4ns) */ in build_sdtr()
1421 *ptr++ = dcb->sync_offset; /* Transfer period (max. REQ/ACK dist) */ in build_sdtr()
1428 static void build_wdtr(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb, in build_wdtr() argument
1431 u8 wide = ((dcb->dev_mode & NTC_DO_WIDE_NEGO) & in build_wdtr()
1489 static u8 start_scsi(struct AdapterCtlBlk* acb, struct DeviceCtlBlk* dcb, in start_scsi() argument
1496 dcb->target_id, dcb->target_lun, srb); in start_scsi()
1543 DC395x_write8(acb, TRM_S1040_SCSI_TARGETID, dcb->target_id); in start_scsi()
1544 DC395x_write8(acb, TRM_S1040_SCSI_SYNC, dcb->sync_period); in start_scsi()
1545 DC395x_write8(acb, TRM_S1040_SCSI_OFFSET, dcb->sync_offset); in start_scsi()
1548 identify_message = dcb->identify_msg; in start_scsi()
1557 && (((dcb->sync_mode & WIDE_NEGO_ENABLE) in start_scsi()
1558 && !(dcb->sync_mode & WIDE_NEGO_DONE)) in start_scsi()
1559 || ((dcb->sync_mode & SYNC_NEGO_ENABLE) in start_scsi()
1560 && !(dcb->sync_mode & SYNC_NEGO_DONE))) in start_scsi()
1561 && (dcb->target_lun == 0)) { in start_scsi()
1567 if (dcb->sync_mode & WIDE_NEGO_ENABLE in start_scsi()
1568 && dcb->inquiry7 & SCSI_INQ_WBUS16) { in start_scsi()
1569 build_wdtr(acb, dcb, srb); in start_scsi()
1573 if (dcb->sync_mode & SYNC_NEGO_ENABLE in start_scsi()
1574 && dcb->inquiry7 & SCSI_INQ_SYNC) { in start_scsi()
1575 build_sdtr(acb, dcb, srb); in start_scsi()
1578 if (dcb->sync_mode & WIDE_NEGO_ENABLE in start_scsi()
1579 && dcb->inquiry7 & SCSI_INQ_WBUS16) { in start_scsi()
1580 build_wdtr(acb, dcb, srb); in start_scsi()
1591 if ((dcb->sync_mode & EN_TAG_QUEUEING) in start_scsi()
1596 while (tag_mask & dcb->tag_mask in start_scsi()
1597 && tag_number < dcb->max_command) { in start_scsi()
1601 if (tag_number >= dcb->max_command) { in start_scsi()
1614 dcb->tag_mask |= tag_mask; in start_scsi()
1627 DC395x_write8(acb, TRM_S1040_SCSI_FIFO, (dcb->target_lun << 5)); in start_scsi()
1647 srb->cmd, dcb->target_id, dcb->target_lun); in start_scsi()
1649 free_tag(dcb, srb); in start_scsi()
1659 dcb->active_srb = srb; in start_scsi()
1660 acb->active_dcb = dcb; in start_scsi()
1699 struct DeviceCtlBlk *dcb; in dc395x_handle_interrupt() local
1740 dcb = acb->active_dcb; in dc395x_handle_interrupt()
1741 if (!dcb) { in dc395x_handle_interrupt()
1747 srb = dcb->active_srb; in dc395x_handle_interrupt()
1748 if (dcb->flag & ABORT_DEV_) { in dc395x_handle_interrupt()
1895 struct DeviceCtlBlk *dcb; in command_phase1() local
1910 dcb = acb->active_dcb; in command_phase1()
1912 DC395x_write8(acb, TRM_S1040_SCSI_FIFO, (dcb->target_lun << 5)); in command_phase1()
1975 pci_dma_sync_single_for_device(srb->dcb-> in sg_update_list()
2037 struct DeviceCtlBlk *dcb = srb->dcb; in data_out_phase0() local
2083 if (dcb->sync_period & WIDE_SYNC) in data_out_phase0()
2090 (dcb->sync_period & WIDE_SYNC) ? "words" : "bytes", in data_out_phase0()
2113 if (d_left_counter == 1 && dcb->sync_period & WIDE_SYNC in data_out_phase0()
2141 (dcb->sync_period & WIDE_SYNC) ? 2 : 1; in data_out_phase0()
2241 << ((srb->dcb->sync_period & WIDE_SYNC) ? 1 : in data_in_phase0()
2248 (srb->dcb->sync_period & WIDE_SYNC) ? "words" : "bytes", in data_in_phase0()
2265 (srb->dcb->sync_period & WIDE_SYNC) ? in data_in_phase0()
2268 if (srb->dcb->sync_period & WIDE_SYNC) in data_in_phase0()
2309 if (fc == 0x40 && (srb->dcb->sync_period & WIDE_SYNC)) { in data_in_phase0()
2346 if (srb->dcb->sync_period & WIDE_SYNC) in data_in_phase0()
2402 struct DeviceCtlBlk *dcb = srb->dcb; in data_io_transfer() local
2425 dump_register_info(acb, dcb, srb); in data_io_transfer()
2485 if (srb->dcb->sync_period & WIDE_SYNC) in data_io_transfer()
2515 if (srb->dcb->sync_period & WIDE_SYNC) { in data_io_transfer()
2542 if (dcb->sync_period & WIDE_SYNC) { in data_io_transfer()
2625 srb->dcb->target_id, srb->dcb->target_lun); in msgin_reject()
2630 struct DeviceCtlBlk *dcb, u8 tag) in msgin_qtag() argument
2637 if (!(dcb->tag_mask & (1 << tag))) in msgin_qtag()
2640 dcb->tag_mask, tag); in msgin_qtag()
2642 if (list_empty(&dcb->srb_going_list)) in msgin_qtag()
2644 list_for_each_entry(i, &dcb->srb_going_list, list) { in msgin_qtag()
2654 srb->cmd, srb->dcb->target_id, srb->dcb->target_lun); in msgin_qtag()
2655 if (dcb->flag & ABORT_DEV_) { in msgin_qtag()
2663 memcpy(srb->msgin_buf, dcb->active_srb->msgin_buf, acb->msg_len); in msgin_qtag()
2664 srb->state |= dcb->active_srb->state; in msgin_qtag()
2666 dcb->active_srb = srb; in msgin_qtag()
2673 dcb->active_srb = srb; in msgin_qtag()
2683 struct DeviceCtlBlk *dcb) in reprogram_regs() argument
2685 DC395x_write8(acb, TRM_S1040_SCSI_TARGETID, dcb->target_id); in reprogram_regs()
2686 DC395x_write8(acb, TRM_S1040_SCSI_SYNC, dcb->sync_period); in reprogram_regs()
2687 DC395x_write8(acb, TRM_S1040_SCSI_OFFSET, dcb->sync_offset); in reprogram_regs()
2688 set_xfer_rate(acb, dcb); in reprogram_regs()
2695 struct DeviceCtlBlk *dcb = srb->dcb; in msgin_set_async() local
2697 dcb->target_id, dcb->target_lun); in msgin_set_async()
2699 dcb->sync_mode &= ~(SYNC_NEGO_ENABLE); in msgin_set_async()
2700 dcb->sync_mode |= SYNC_NEGO_DONE; in msgin_set_async()
2702 dcb->sync_offset = 0; in msgin_set_async()
2703 dcb->min_nego_period = 200 >> 2; /* 200ns <=> 5 MHz */ in msgin_set_async()
2705 reprogram_regs(acb, dcb); in msgin_set_async()
2706 if ((dcb->sync_mode & WIDE_NEGO_ENABLE) in msgin_set_async()
2707 && !(dcb->sync_mode & WIDE_NEGO_DONE)) { in msgin_set_async()
2708 build_wdtr(acb, dcb, srb); in msgin_set_async()
2718 struct DeviceCtlBlk *dcb = srb->dcb; in msgin_set_sync() local
2723 dcb->target_id, srb->msgin_buf[3] << 2, in msgin_set_sync()
2730 if (!(dcb->dev_mode & NTC_DO_SYNC_NEGO)) in msgin_set_sync()
2731 dcb->sync_offset = 0; in msgin_set_sync()
2732 else if (dcb->sync_offset == 0) in msgin_set_sync()
2733 dcb->sync_offset = srb->msgin_buf[4]; in msgin_set_sync()
2734 if (srb->msgin_buf[4] > dcb->sync_offset) in msgin_set_sync()
2735 srb->msgin_buf[4] = dcb->sync_offset; in msgin_set_sync()
2737 dcb->sync_offset = srb->msgin_buf[4]; in msgin_set_sync()
2740 || dcb->min_nego_period > in msgin_set_sync()
2748 dcb->sync_period &= 0xf0; in msgin_set_sync()
2749 dcb->sync_period |= ALT_SYNC | bval; in msgin_set_sync()
2750 dcb->min_nego_period = srb->msgin_buf[3]; in msgin_set_sync()
2752 if (dcb->sync_period & WIDE_SYNC) in msgin_set_sync()
2759 dcb->target_id, (fact == 500) ? "Wide16" : "", in msgin_set_sync()
2760 dcb->min_nego_period << 2, dcb->sync_offset, in msgin_set_sync()
2761 (fact / dcb->min_nego_period), in msgin_set_sync()
2762 ((fact % dcb->min_nego_period) * 10 + in msgin_set_sync()
2763 dcb->min_nego_period / 2) / dcb->min_nego_period); in msgin_set_sync()
2773 dcb->sync_mode |= SYNC_NEGO_DONE; in msgin_set_sync()
2775 if ((dcb->sync_mode & WIDE_NEGO_ENABLE) in msgin_set_sync()
2776 && !(dcb->sync_mode & WIDE_NEGO_DONE)) { in msgin_set_sync()
2777 build_wdtr(acb, dcb, srb); in msgin_set_sync()
2783 dcb->sync_mode |= SYNC_NEGO_DONE | SYNC_NEGO_ENABLE; in msgin_set_sync()
2785 reprogram_regs(acb, dcb); in msgin_set_sync()
2792 struct DeviceCtlBlk *dcb = srb->dcb; in msgin_set_nowide() local
2793 dprintkdbg(DBG_1, "msgin_set_nowide: <%02i>\n", dcb->target_id); in msgin_set_nowide()
2795 dcb->sync_period &= ~WIDE_SYNC; in msgin_set_nowide()
2796 dcb->sync_mode &= ~(WIDE_NEGO_ENABLE); in msgin_set_nowide()
2797 dcb->sync_mode |= WIDE_NEGO_DONE; in msgin_set_nowide()
2799 reprogram_regs(acb, dcb); in msgin_set_nowide()
2800 if ((dcb->sync_mode & SYNC_NEGO_ENABLE) in msgin_set_nowide()
2801 && !(dcb->sync_mode & SYNC_NEGO_DONE)) { in msgin_set_nowide()
2802 build_sdtr(acb, dcb, srb); in msgin_set_nowide()
2810 struct DeviceCtlBlk *dcb = srb->dcb; in msgin_set_wide() local
2811 u8 wide = (dcb->dev_mode & NTC_DO_WIDE_NEGO in msgin_set_wide()
2813 dprintkdbg(DBG_1, "msgin_set_wide: <%02i>\n", dcb->target_id); in msgin_set_wide()
2821 dcb->target_id); in msgin_set_wide()
2828 dcb->sync_mode |= (WIDE_NEGO_ENABLE | WIDE_NEGO_DONE); in msgin_set_wide()
2830 dcb->sync_period |= WIDE_SYNC; in msgin_set_wide()
2832 dcb->sync_period &= ~WIDE_SYNC; in msgin_set_wide()
2837 (8 << srb->msgin_buf[3]), dcb->target_id); in msgin_set_wide()
2838 reprogram_regs(acb, dcb); in msgin_set_wide()
2839 if ((dcb->sync_mode & SYNC_NEGO_ENABLE) in msgin_set_wide()
2840 && !(dcb->sync_mode & SYNC_NEGO_DONE)) { in msgin_set_wide()
2841 build_sdtr(acb, dcb, srb); in msgin_set_wide()
2863 struct DeviceCtlBlk *dcb = acb->active_dcb; in msgin_phase0() local
2878 msgin_qtag(acb, dcb, in msgin_phase0()
2942 srb->cmd, dcb->target_id, in msgin_phase0()
2943 dcb->target_lun); in msgin_phase0()
2944 dcb->flag |= ABORT_DEV_; in msgin_phase0()
2953 srb->msgout_buf[0] = dcb->identify_msg; in msgin_phase0()
2999 static void set_xfer_rate(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb) in set_xfer_rate() argument
3004 if (dcb->identify_msg & 0x07) in set_xfer_rate()
3008 current_sync_offset = dcb->sync_offset; in set_xfer_rate()
3013 if (i->target_id == dcb->target_id) { in set_xfer_rate()
3014 i->sync_period = dcb->sync_period; in set_xfer_rate()
3015 i->sync_offset = dcb->sync_offset; in set_xfer_rate()
3016 i->sync_mode = dcb->sync_mode; in set_xfer_rate()
3017 i->min_nego_period = dcb->min_nego_period; in set_xfer_rate()
3024 struct DeviceCtlBlk *dcb = acb->active_dcb; in disconnect() local
3027 if (!dcb) { in disconnect()
3038 srb = dcb->active_srb; in disconnect()
3048 dcb->target_id, dcb->target_lun); in disconnect()
3052 dcb->flag &= ~ABORT_DEV_; in disconnect()
3078 dcb->target_id, dcb->target_lun); in disconnect()
3085 free_tag(dcb, srb); in disconnect()
3086 srb_going_to_waiting_move(dcb, srb); in disconnect()
3109 free_tag(dcb, srb); in disconnect()
3110 dcb->active_srb = NULL; in disconnect()
3112 srb_done(acb, dcb, srb); in disconnect()
3120 struct DeviceCtlBlk *dcb = acb->active_dcb; in reselect() local
3131 if (dcb) { /* Arbitration lost but Reselection win */ in reselect()
3132 srb = dcb->active_srb; in reselect()
3143 srb->cmd, dcb->target_id, in reselect()
3144 dcb->target_lun, rsel_tar_lun_id, in reselect()
3150 free_tag(dcb, srb); in reselect()
3151 srb_going_to_waiting_move(dcb, srb); in reselect()
3163 dcb = find_dcb(acb, id, lun); in reselect()
3164 if (!dcb) { in reselect()
3170 acb->active_dcb = dcb; in reselect()
3172 if (!(dcb->dev_mode & NTC_DO_DISCONNECT)) in reselect()
3175 dcb->target_id, dcb->target_lun); in reselect()
3177 if (dcb->sync_mode & EN_TAG_QUEUEING /*&& !arblostflag */) { in reselect()
3179 dcb->active_srb = srb; in reselect()
3182 srb = dcb->active_srb; in reselect()
3189 dcb->target_id, dcb->target_lun); in reselect()
3192 dcb->active_srb = srb; in reselect()
3195 if (dcb->flag & ABORT_DEV_) { in reselect()
3206 dprintkdbg(DBG_0, "reselect: select <%i>\n", dcb->target_id); in reselect()
3208 DC395x_write8(acb, TRM_S1040_SCSI_TARGETID, dcb->target_id); /* target ID */ in reselect()
3209 DC395x_write8(acb, TRM_S1040_SCSI_OFFSET, dcb->sync_offset); /* offset */ in reselect()
3210 DC395x_write8(acb, TRM_S1040_SCSI_SYNC, dcb->sync_period); /* sync period, wide */ in reselect()
3233 static void disc_tagq_set(struct DeviceCtlBlk *dcb, struct ScsiInqData *ptr) in disc_tagq_set() argument
3238 && (dcb->dev_mode & NTC_DO_TAG_QUEUEING) && in disc_tagq_set()
3243 if (dcb->max_command == 1) in disc_tagq_set()
3244 dcb->max_command = in disc_tagq_set()
3245 dcb->acb->tag_max_num; in disc_tagq_set()
3246 dcb->sync_mode |= EN_TAG_QUEUEING; in disc_tagq_set()
3249 dcb->max_command = 1; in disc_tagq_set()
3254 static void add_dev(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb, in add_dev() argument
3258 dcb->dev_type = bval1; in add_dev()
3260 disc_tagq_set(dcb, ptr); in add_dev()
3309 static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb, in srb_done() argument
3337 cmd->cmnd[0], dcb->target_id, in srb_done()
3338 dcb->target_lun, status, acb->scan_devices); in srb_done()
3343 cmd->cmnd[0], dcb->target_id, in srb_done()
3344 dcb->target_lun, status, acb->scan_devices); in srb_done()
3349 cmd->cmnd[0], dcb->target_id, in srb_done()
3350 dcb->target_lun, status, acb->scan_devices); in srb_done()
3355 cmd->cmnd[0], dcb->target_id, in srb_done()
3356 dcb->target_lun, status, acb->scan_devices); in srb_done()
3361 cmd->cmnd[0], dcb->target_id, in srb_done()
3362 dcb->target_lun, status, acb->scan_devices); in srb_done()
3404 request_sense(acb, dcb, srb); in srb_done()
3407 tempcnt = (u8)list_size(&dcb->srb_going_list); in srb_done()
3409 dcb->target_id, dcb->target_lun, tempcnt); in srb_done()
3412 dcb->max_command = tempcnt; in srb_done()
3413 free_tag(dcb, srb); in srb_done()
3414 srb_going_to_waiting_move(dcb, srb); in srb_done()
3472 dcb->inquiry7 = ptr->Flags; in srb_done()
3478 if (!dcb->init_tcq_flag) { in srb_done()
3479 add_dev(acb, dcb, ptr); in srb_done()
3480 dcb->init_tcq_flag = 1; in srb_done()
3501 srb_going_remove(dcb, srb); in srb_done()
3521 struct DeviceCtlBlk *dcb; in doing_srb_done() local
3524 list_for_each_entry(dcb, &acb->dcb_list, list) { in doing_srb_done()
3529 list_for_each_entry_safe(srb, tmp, &dcb->srb_going_list, list) { in doing_srb_done()
3538 srb_going_remove(dcb, srb); in doing_srb_done()
3539 free_tag(dcb, srb); in doing_srb_done()
3550 if (!list_empty(&dcb->srb_going_list)) in doing_srb_done()
3553 dcb->target_id, dcb->target_lun); in doing_srb_done()
3554 if (dcb->tag_mask) in doing_srb_done()
3557 dcb->target_id, dcb->target_lun, in doing_srb_done()
3558 dcb->tag_mask); in doing_srb_done()
3561 list_for_each_entry_safe(srb, tmp, &dcb->srb_waiting_list, list) { in doing_srb_done()
3568 srb_waiting_remove(dcb, srb); in doing_srb_done()
3579 if (!list_empty(&dcb->srb_waiting_list)) in doing_srb_done()
3581 list_size(&dcb->srb_waiting_list), dcb->target_id, in doing_srb_done()
3582 dcb->target_lun); in doing_srb_done()
3583 dcb->flag &= ~ABORT_DEV_; in doing_srb_done()
3671 static void request_sense(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb, in request_sense() argument
3704 if (start_scsi(acb, dcb, srb)) { /* Should only happen, if sb. else grabs the bus */ in request_sense()
3707 srb->cmd, dcb->target_id, dcb->target_lun); in request_sense()
3708 srb_going_to_waiting_move(dcb, srb); in request_sense()
3732 struct DeviceCtlBlk *dcb; in device_alloc() local
3734 dcb = kmalloc(sizeof(struct DeviceCtlBlk), GFP_ATOMIC); in device_alloc()
3736 if (!dcb) in device_alloc()
3738 dcb->acb = NULL; in device_alloc()
3739 INIT_LIST_HEAD(&dcb->srb_going_list); in device_alloc()
3740 INIT_LIST_HEAD(&dcb->srb_waiting_list); in device_alloc()
3741 dcb->active_srb = NULL; in device_alloc()
3742 dcb->tag_mask = 0; in device_alloc()
3743 dcb->max_command = 1; in device_alloc()
3744 dcb->target_id = target; in device_alloc()
3745 dcb->target_lun = lun; in device_alloc()
3746 dcb->dev_mode = eeprom->target[target].cfg0; in device_alloc()
3748 dcb->identify_msg = in device_alloc()
3749 IDENTIFY(dcb->dev_mode & NTC_DO_DISCONNECT, lun); in device_alloc()
3751 dcb->identify_msg = IDENTIFY(0, lun); in device_alloc()
3753 dcb->inquiry7 = 0; in device_alloc()
3754 dcb->sync_mode = 0; in device_alloc()
3755 dcb->min_nego_period = clock_period[period_index]; in device_alloc()
3756 dcb->sync_period = 0; in device_alloc()
3757 dcb->sync_offset = 0; in device_alloc()
3758 dcb->flag = 0; in device_alloc()
3761 if ((dcb->dev_mode & NTC_DO_WIDE_NEGO) in device_alloc()
3763 dcb->sync_mode |= WIDE_NEGO_ENABLE; in device_alloc()
3766 if (dcb->dev_mode & NTC_DO_SYNC_NEGO) in device_alloc()
3768 dcb->sync_mode |= SYNC_NEGO_ENABLE; in device_alloc()
3770 if (dcb->target_lun != 0) { in device_alloc()
3774 if (p->target_id == dcb->target_id) in device_alloc()
3778 dcb->target_id, dcb->target_lun, in device_alloc()
3780 dcb->sync_mode = p->sync_mode; in device_alloc()
3781 dcb->sync_period = p->sync_period; in device_alloc()
3782 dcb->min_nego_period = p->min_nego_period; in device_alloc()
3783 dcb->sync_offset = p->sync_offset; in device_alloc()
3784 dcb->inquiry7 = p->inquiry7; in device_alloc()
3786 return dcb; in device_alloc()
3797 struct DeviceCtlBlk *dcb) in adapter_add_device() argument
3800 dcb->acb = acb; in adapter_add_device()
3804 acb->dcb_run_robin = dcb; in adapter_add_device()
3807 list_add_tail(&dcb->list, &acb->dcb_list); in adapter_add_device()
3810 acb->dcb_map[dcb->target_id] |= (1 << dcb->target_lun); in adapter_add_device()
3811 acb->children[dcb->target_id][dcb->target_lun] = dcb; in adapter_add_device()
3825 struct DeviceCtlBlk *dcb) in adapter_remove_device() argument
3830 dcb->target_id, dcb->target_lun); in adapter_remove_device()
3833 if (acb->active_dcb == dcb) in adapter_remove_device()
3835 if (acb->dcb_run_robin == dcb) in adapter_remove_device()
3836 acb->dcb_run_robin = dcb_get_next(&acb->dcb_list, dcb); in adapter_remove_device()
3840 if (dcb == i) { in adapter_remove_device()
3846 acb->dcb_map[dcb->target_id] &= ~(1 << dcb->target_lun); in adapter_remove_device()
3847 acb->children[dcb->target_id][dcb->target_lun] = NULL; in adapter_remove_device()
3848 dcb->acb = NULL; in adapter_remove_device()
3860 struct DeviceCtlBlk *dcb) in adapter_remove_and_free_device() argument
3862 if (list_size(&dcb->srb_going_list) > 1) { in adapter_remove_and_free_device()
3865 dcb->target_id, dcb->target_lun, in adapter_remove_and_free_device()
3866 list_size(&dcb->srb_going_list)); in adapter_remove_and_free_device()
3869 adapter_remove_device(acb, dcb); in adapter_remove_and_free_device()
3870 kfree(dcb); in adapter_remove_and_free_device()
3882 struct DeviceCtlBlk *dcb; in adapter_remove_and_free_all_devices() local
3887 list_for_each_entry_safe(dcb, tmp, &acb->dcb_list, list) in adapter_remove_and_free_all_devices()
3888 adapter_remove_and_free_device(acb, dcb); in adapter_remove_and_free_all_devices()
3902 struct DeviceCtlBlk *dcb; in dc395x_slave_alloc() local
3904 dcb = device_alloc(acb, scsi_device->id, scsi_device->lun); in dc395x_slave_alloc()
3905 if (!dcb) in dc395x_slave_alloc()
3907 adapter_add_device(acb, dcb); in dc395x_slave_alloc()
3922 struct DeviceCtlBlk *dcb = find_dcb(acb, scsi_device->id, scsi_device->lun); in dc395x_slave_destroy() local
3923 if (dcb) in dc395x_slave_destroy()
3924 adapter_remove_and_free_device(acb, dcb); in dc395x_slave_destroy()
4618 struct DeviceCtlBlk *dcb; in dc395x_show_info() local
4658 list_for_each_entry(dcb, &acb->dcb_list, list) { in dc395x_show_info()
4660 seq_printf(m, "%02i %02i %02i ", dev, dcb->target_id, in dc395x_show_info()
4661 dcb->target_lun); in dc395x_show_info()
4662 YESNO(dcb->dev_mode & NTC_DO_PARITY_CHK); in dc395x_show_info()
4663 YESNO(dcb->sync_offset); in dc395x_show_info()
4664 YESNO(dcb->sync_period & WIDE_SYNC); in dc395x_show_info()
4665 YESNO(dcb->dev_mode & NTC_DO_DISCONNECT); in dc395x_show_info()
4666 YESNO(dcb->dev_mode & NTC_DO_SEND_START); in dc395x_show_info()
4667 YESNO(dcb->sync_mode & EN_TAG_QUEUEING); in dc395x_show_info()
4668 nego_period = clock_period[dcb->sync_period & 0x07] << 2; in dc395x_show_info()
4669 if (dcb->sync_offset) in dc395x_show_info()
4672 seq_printf(m, " (%03i ns)", (dcb->min_nego_period << 2)); in dc395x_show_info()
4674 if (dcb->sync_offset & 0x0f) { in dc395x_show_info()
4679 (dcb->sync_offset & 0x0f)); in dc395x_show_info()
4684 seq_printf(m, " %02i\n", dcb->max_command); in dc395x_show_info()
4693 list_for_each_entry(dcb, &acb->dcb_list, list) { in dc395x_show_info()
4695 if (!list_empty(&dcb->srb_waiting_list)) in dc395x_show_info()
4697 dcb->target_id, dcb->target_lun, in dc395x_show_info()
4698 list_size(&dcb->srb_waiting_list)); in dc395x_show_info()
4699 list_for_each_entry(srb, &dcb->srb_waiting_list, list) in dc395x_show_info()
4701 if (!list_empty(&dcb->srb_going_list)) in dc395x_show_info()
4703 dcb->target_id, dcb->target_lun, in dc395x_show_info()
4704 list_size(&dcb->srb_going_list)); in dc395x_show_info()
4705 list_for_each_entry(srb, &dcb->srb_going_list, list) in dc395x_show_info()
4707 if (!list_empty(&dcb->srb_waiting_list) || !list_empty(&dcb->srb_going_list)) in dc395x_show_info()
4713 list_for_each_entry(dcb, &acb->dcb_list, list) { in dc395x_show_info()
4714 seq_printf(m, "%p -> ", dcb); in dc395x_show_info()