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()
775 struct DeviceCtlBlk *dcb; in waiting_process_next() local
793 list_for_each_entry(dcb, dcb_list_head, list) in waiting_process_next()
794 if (dcb == acb->dcb_run_robin) { in waiting_process_next()
795 start = dcb; in waiting_process_next()
859 struct DeviceCtlBlk *dcb = srb->dcb; in send_srb() local
861 if (dcb->max_command <= list_size(&dcb->srb_going_list) || in send_srb()
864 list_add_tail(&srb->list, &dcb->srb_waiting_list); in send_srb()
869 if (!start_scsi(acb, dcb, srb)) { in send_srb()
870 list_add_tail(&srb->list, &dcb->srb_going_list); in send_srb()
872 list_add(&srb->list, &dcb->srb_waiting_list); in send_srb()
878 static void build_srb(struct scsi_cmnd *cmd, struct DeviceCtlBlk *dcb, in build_srb() argument
884 cmd, dcb->target_id, dcb->target_lun); in build_srb()
886 srb->dcb = dcb; in build_srb()
943 if (dcb->sync_period & WIDE_SYNC && in build_srb()
949 srb->sg_bus_addr = dma_map_single(&dcb->acb->dev->dev, in build_srb()
981 struct DeviceCtlBlk *dcb; in dc395x_queue_command_lck() local
1006 dcb = find_dcb(acb, cmd->device->id, cmd->device->lun); in dc395x_queue_command_lck()
1007 if (!dcb) { in dc395x_queue_command_lck()
1030 build_srb(cmd, dcb, srb); in dc395x_queue_command_lck()
1032 if (!list_empty(&dcb->srb_waiting_list)) { in dc395x_queue_command_lck()
1034 list_add_tail(&srb->list, &dcb->srb_waiting_list); in dc395x_queue_command_lck()
1089 struct DeviceCtlBlk *dcb, struct ScsiReqBlk *srb) in dump_register_info() argument
1094 if (!dcb) in dump_register_info()
1095 dcb = acb->active_dcb; in dump_register_info()
1096 if (!srb && dcb) in dump_register_info()
1097 srb = dcb->active_srb; in dump_register_info()
1170 struct DeviceCtlBlk *dcb; in reset_dev_param() local
1174 list_for_each_entry(dcb, &acb->dcb_list, list) { in reset_dev_param()
1177 dcb->sync_mode &= ~(SYNC_NEGO_DONE + WIDE_NEGO_DONE); in reset_dev_param()
1178 dcb->sync_period = 0; in reset_dev_param()
1179 dcb->sync_offset = 0; in reset_dev_param()
1181 dcb->dev_mode = eeprom->target[dcb->target_id].cfg0; in reset_dev_param()
1182 period_index = eeprom->target[dcb->target_id].period & 0x07; in reset_dev_param()
1183 dcb->min_nego_period = clock_period[period_index]; in reset_dev_param()
1184 if (!(dcb->dev_mode & NTC_DO_WIDE_NEGO) in reset_dev_param()
1186 dcb->sync_mode &= ~WIDE_NEGO_ENABLE; in reset_dev_param()
1266 struct DeviceCtlBlk *dcb; in dc395x_eh_abort() local
1271 dcb = find_dcb(acb, cmd->device->id, cmd->device->lun); in dc395x_eh_abort()
1272 if (!dcb) { in dc395x_eh_abort()
1277 srb = find_cmd(cmd, &dcb->srb_waiting_list); in dc395x_eh_abort()
1282 free_tag(dcb, srb); in dc395x_eh_abort()
1288 srb = find_cmd(cmd, &dcb->srb_going_list); in dc395x_eh_abort()
1300 static void build_sdtr(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb, in build_sdtr() argument
1311 if (!(dcb->dev_mode & NTC_DO_SYNC_NEGO)) { in build_sdtr()
1312 dcb->sync_offset = 0; in build_sdtr()
1313 dcb->min_nego_period = 200 >> 2; in build_sdtr()
1314 } else if (dcb->sync_offset == 0) in build_sdtr()
1315 dcb->sync_offset = SYNC_NEGO_OFFSET; in build_sdtr()
1320 *ptr++ = dcb->min_nego_period; /* Transfer period (in 4ns) */ in build_sdtr()
1321 *ptr++ = dcb->sync_offset; /* Transfer period (max. REQ/ACK dist) */ in build_sdtr()
1328 static void build_wdtr(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb, in build_wdtr() argument
1331 u8 wide = ((dcb->dev_mode & NTC_DO_WIDE_NEGO) & in build_wdtr()
1389 static u8 start_scsi(struct AdapterCtlBlk* acb, struct DeviceCtlBlk* dcb, in start_scsi() argument
1396 dcb->target_id, dcb->target_lun, srb); in start_scsi()
1443 DC395x_write8(acb, TRM_S1040_SCSI_TARGETID, dcb->target_id); in start_scsi()
1444 DC395x_write8(acb, TRM_S1040_SCSI_SYNC, dcb->sync_period); in start_scsi()
1445 DC395x_write8(acb, TRM_S1040_SCSI_OFFSET, dcb->sync_offset); in start_scsi()
1448 identify_message = dcb->identify_msg; in start_scsi()
1457 && (((dcb->sync_mode & WIDE_NEGO_ENABLE) in start_scsi()
1458 && !(dcb->sync_mode & WIDE_NEGO_DONE)) in start_scsi()
1459 || ((dcb->sync_mode & SYNC_NEGO_ENABLE) in start_scsi()
1460 && !(dcb->sync_mode & SYNC_NEGO_DONE))) in start_scsi()
1461 && (dcb->target_lun == 0)) { in start_scsi()
1467 if (dcb->sync_mode & WIDE_NEGO_ENABLE in start_scsi()
1468 && dcb->inquiry7 & SCSI_INQ_WBUS16) { in start_scsi()
1469 build_wdtr(acb, dcb, srb); in start_scsi()
1473 if (dcb->sync_mode & SYNC_NEGO_ENABLE in start_scsi()
1474 && dcb->inquiry7 & SCSI_INQ_SYNC) { in start_scsi()
1475 build_sdtr(acb, dcb, srb); in start_scsi()
1478 if (dcb->sync_mode & WIDE_NEGO_ENABLE in start_scsi()
1479 && dcb->inquiry7 & SCSI_INQ_WBUS16) { in start_scsi()
1480 build_wdtr(acb, dcb, srb); in start_scsi()
1491 if ((dcb->sync_mode & EN_TAG_QUEUEING) in start_scsi()
1496 while (tag_mask & dcb->tag_mask in start_scsi()
1497 && tag_number < dcb->max_command) { in start_scsi()
1501 if (tag_number >= dcb->max_command) { in start_scsi()
1514 dcb->tag_mask |= tag_mask; in start_scsi()
1527 DC395x_write8(acb, TRM_S1040_SCSI_FIFO, (dcb->target_lun << 5)); in start_scsi()
1547 srb->cmd, dcb->target_id, dcb->target_lun); in start_scsi()
1549 free_tag(dcb, srb); in start_scsi()
1559 dcb->active_srb = srb; in start_scsi()
1560 acb->active_dcb = dcb; in start_scsi()
1599 struct DeviceCtlBlk *dcb; in dc395x_handle_interrupt() local
1640 dcb = acb->active_dcb; in dc395x_handle_interrupt()
1641 if (!dcb) { in dc395x_handle_interrupt()
1647 srb = dcb->active_srb; in dc395x_handle_interrupt()
1648 if (dcb->flag & ABORT_DEV_) { in dc395x_handle_interrupt()
1795 struct DeviceCtlBlk *dcb; in command_phase1() local
1810 dcb = acb->active_dcb; in command_phase1()
1812 DC395x_write8(acb, TRM_S1040_SCSI_FIFO, (dcb->target_lun << 5)); in command_phase1()
1872 dma_sync_single_for_cpu(&srb->dcb->acb->dev->dev, in sg_update_list()
1878 dma_sync_single_for_device(&srb->dcb->acb->dev->dev, in sg_update_list()
1938 struct DeviceCtlBlk *dcb = srb->dcb; in data_out_phase0() local
1984 if (dcb->sync_period & WIDE_SYNC) in data_out_phase0()
1991 (dcb->sync_period & WIDE_SYNC) ? "words" : "bytes", in data_out_phase0()
2014 if (d_left_counter == 1 && dcb->sync_period & WIDE_SYNC in data_out_phase0()
2042 (dcb->sync_period & WIDE_SYNC) ? 2 : 1; in data_out_phase0()
2142 << ((srb->dcb->sync_period & WIDE_SYNC) ? 1 : in data_in_phase0()
2149 (srb->dcb->sync_period & WIDE_SYNC) ? "words" : "bytes", in data_in_phase0()
2166 (srb->dcb->sync_period & WIDE_SYNC) ? in data_in_phase0()
2169 if (srb->dcb->sync_period & WIDE_SYNC) in data_in_phase0()
2210 if (fc == 0x40 && (srb->dcb->sync_period & WIDE_SYNC)) { in data_in_phase0()
2247 if (srb->dcb->sync_period & WIDE_SYNC) in data_in_phase0()
2303 struct DeviceCtlBlk *dcb = srb->dcb; in data_io_transfer() local
2326 dump_register_info(acb, dcb, srb); in data_io_transfer()
2386 if (srb->dcb->sync_period & WIDE_SYNC) in data_io_transfer()
2416 if (srb->dcb->sync_period & WIDE_SYNC) { in data_io_transfer()
2443 if (dcb->sync_period & WIDE_SYNC) { in data_io_transfer()
2526 srb->dcb->target_id, srb->dcb->target_lun); in msgin_reject()
2531 struct DeviceCtlBlk *dcb, u8 tag) in msgin_qtag() argument
2538 if (!(dcb->tag_mask & (1 << tag))) in msgin_qtag()
2541 dcb->tag_mask, tag); in msgin_qtag()
2543 if (list_empty(&dcb->srb_going_list)) in msgin_qtag()
2545 list_for_each_entry(i, &dcb->srb_going_list, list) { in msgin_qtag()
2555 srb->cmd, srb->dcb->target_id, srb->dcb->target_lun); in msgin_qtag()
2556 if (dcb->flag & ABORT_DEV_) { in msgin_qtag()
2564 memcpy(srb->msgin_buf, dcb->active_srb->msgin_buf, acb->msg_len); in msgin_qtag()
2565 srb->state |= dcb->active_srb->state; in msgin_qtag()
2567 dcb->active_srb = srb; in msgin_qtag()
2574 dcb->active_srb = srb; in msgin_qtag()
2584 struct DeviceCtlBlk *dcb) in reprogram_regs() argument
2586 DC395x_write8(acb, TRM_S1040_SCSI_TARGETID, dcb->target_id); in reprogram_regs()
2587 DC395x_write8(acb, TRM_S1040_SCSI_SYNC, dcb->sync_period); in reprogram_regs()
2588 DC395x_write8(acb, TRM_S1040_SCSI_OFFSET, dcb->sync_offset); in reprogram_regs()
2589 set_xfer_rate(acb, dcb); in reprogram_regs()
2596 struct DeviceCtlBlk *dcb = srb->dcb; in msgin_set_async() local
2598 dcb->target_id, dcb->target_lun); in msgin_set_async()
2600 dcb->sync_mode &= ~(SYNC_NEGO_ENABLE); in msgin_set_async()
2601 dcb->sync_mode |= SYNC_NEGO_DONE; in msgin_set_async()
2603 dcb->sync_offset = 0; in msgin_set_async()
2604 dcb->min_nego_period = 200 >> 2; /* 200ns <=> 5 MHz */ in msgin_set_async()
2606 reprogram_regs(acb, dcb); in msgin_set_async()
2607 if ((dcb->sync_mode & WIDE_NEGO_ENABLE) in msgin_set_async()
2608 && !(dcb->sync_mode & WIDE_NEGO_DONE)) { in msgin_set_async()
2609 build_wdtr(acb, dcb, srb); in msgin_set_async()
2619 struct DeviceCtlBlk *dcb = srb->dcb; in msgin_set_sync() local
2624 dcb->target_id, srb->msgin_buf[3] << 2, in msgin_set_sync()
2631 if (!(dcb->dev_mode & NTC_DO_SYNC_NEGO)) in msgin_set_sync()
2632 dcb->sync_offset = 0; in msgin_set_sync()
2633 else if (dcb->sync_offset == 0) in msgin_set_sync()
2634 dcb->sync_offset = srb->msgin_buf[4]; in msgin_set_sync()
2635 if (srb->msgin_buf[4] > dcb->sync_offset) in msgin_set_sync()
2636 srb->msgin_buf[4] = dcb->sync_offset; in msgin_set_sync()
2638 dcb->sync_offset = srb->msgin_buf[4]; in msgin_set_sync()
2641 || dcb->min_nego_period > in msgin_set_sync()
2649 dcb->sync_period &= 0xf0; in msgin_set_sync()
2650 dcb->sync_period |= ALT_SYNC | bval; in msgin_set_sync()
2651 dcb->min_nego_period = srb->msgin_buf[3]; in msgin_set_sync()
2653 if (dcb->sync_period & WIDE_SYNC) in msgin_set_sync()
2660 dcb->target_id, (fact == 500) ? "Wide16" : "", in msgin_set_sync()
2661 dcb->min_nego_period << 2, dcb->sync_offset, in msgin_set_sync()
2662 (fact / dcb->min_nego_period), in msgin_set_sync()
2663 ((fact % dcb->min_nego_period) * 10 + in msgin_set_sync()
2664 dcb->min_nego_period / 2) / dcb->min_nego_period); in msgin_set_sync()
2674 dcb->sync_mode |= SYNC_NEGO_DONE; in msgin_set_sync()
2676 if ((dcb->sync_mode & WIDE_NEGO_ENABLE) in msgin_set_sync()
2677 && !(dcb->sync_mode & WIDE_NEGO_DONE)) { in msgin_set_sync()
2678 build_wdtr(acb, dcb, srb); in msgin_set_sync()
2684 dcb->sync_mode |= SYNC_NEGO_DONE | SYNC_NEGO_ENABLE; in msgin_set_sync()
2686 reprogram_regs(acb, dcb); in msgin_set_sync()
2693 struct DeviceCtlBlk *dcb = srb->dcb; in msgin_set_nowide() local
2694 dprintkdbg(DBG_1, "msgin_set_nowide: <%02i>\n", dcb->target_id); in msgin_set_nowide()
2696 dcb->sync_period &= ~WIDE_SYNC; in msgin_set_nowide()
2697 dcb->sync_mode &= ~(WIDE_NEGO_ENABLE); in msgin_set_nowide()
2698 dcb->sync_mode |= WIDE_NEGO_DONE; in msgin_set_nowide()
2700 reprogram_regs(acb, dcb); in msgin_set_nowide()
2701 if ((dcb->sync_mode & SYNC_NEGO_ENABLE) in msgin_set_nowide()
2702 && !(dcb->sync_mode & SYNC_NEGO_DONE)) { in msgin_set_nowide()
2703 build_sdtr(acb, dcb, srb); in msgin_set_nowide()
2711 struct DeviceCtlBlk *dcb = srb->dcb; in msgin_set_wide() local
2712 u8 wide = (dcb->dev_mode & NTC_DO_WIDE_NEGO in msgin_set_wide()
2714 dprintkdbg(DBG_1, "msgin_set_wide: <%02i>\n", dcb->target_id); in msgin_set_wide()
2722 dcb->target_id); in msgin_set_wide()
2729 dcb->sync_mode |= (WIDE_NEGO_ENABLE | WIDE_NEGO_DONE); in msgin_set_wide()
2731 dcb->sync_period |= WIDE_SYNC; in msgin_set_wide()
2733 dcb->sync_period &= ~WIDE_SYNC; in msgin_set_wide()
2738 (8 << srb->msgin_buf[3]), dcb->target_id); in msgin_set_wide()
2739 reprogram_regs(acb, dcb); in msgin_set_wide()
2740 if ((dcb->sync_mode & SYNC_NEGO_ENABLE) in msgin_set_wide()
2741 && !(dcb->sync_mode & SYNC_NEGO_DONE)) { in msgin_set_wide()
2742 build_sdtr(acb, dcb, srb); in msgin_set_wide()
2764 struct DeviceCtlBlk *dcb = acb->active_dcb; in msgin_phase0() local
2779 msgin_qtag(acb, dcb, in msgin_phase0()
2843 srb->cmd, dcb->target_id, in msgin_phase0()
2844 dcb->target_lun); in msgin_phase0()
2845 dcb->flag |= ABORT_DEV_; in msgin_phase0()
2854 srb->msgout_buf[0] = dcb->identify_msg; in msgin_phase0()
2900 static void set_xfer_rate(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb) in set_xfer_rate() argument
2905 if (dcb->identify_msg & 0x07) in set_xfer_rate()
2909 current_sync_offset = dcb->sync_offset; in set_xfer_rate()
2914 if (i->target_id == dcb->target_id) { in set_xfer_rate()
2915 i->sync_period = dcb->sync_period; in set_xfer_rate()
2916 i->sync_offset = dcb->sync_offset; in set_xfer_rate()
2917 i->sync_mode = dcb->sync_mode; in set_xfer_rate()
2918 i->min_nego_period = dcb->min_nego_period; in set_xfer_rate()
2925 struct DeviceCtlBlk *dcb = acb->active_dcb; in disconnect() local
2928 if (!dcb) { in disconnect()
2939 srb = dcb->active_srb; in disconnect()
2949 dcb->target_id, dcb->target_lun); in disconnect()
2953 dcb->flag &= ~ABORT_DEV_; in disconnect()
2979 dcb->target_id, dcb->target_lun); in disconnect()
2986 free_tag(dcb, srb); in disconnect()
2987 list_move(&srb->list, &dcb->srb_waiting_list); in disconnect()
3010 free_tag(dcb, srb); in disconnect()
3011 dcb->active_srb = NULL; in disconnect()
3013 srb_done(acb, dcb, srb); in disconnect()
3021 struct DeviceCtlBlk *dcb = acb->active_dcb; in reselect() local
3032 if (dcb) { /* Arbitration lost but Reselection win */ in reselect()
3033 srb = dcb->active_srb; in reselect()
3044 srb->cmd, dcb->target_id, in reselect()
3045 dcb->target_lun, rsel_tar_lun_id, in reselect()
3051 free_tag(dcb, srb); in reselect()
3052 list_move(&srb->list, &dcb->srb_waiting_list); in reselect()
3064 dcb = find_dcb(acb, id, lun); in reselect()
3065 if (!dcb) { in reselect()
3071 acb->active_dcb = dcb; in reselect()
3073 if (!(dcb->dev_mode & NTC_DO_DISCONNECT)) in reselect()
3076 dcb->target_id, dcb->target_lun); in reselect()
3078 if (dcb->sync_mode & EN_TAG_QUEUEING /*&& !arblostflag */) { in reselect()
3080 dcb->active_srb = srb; in reselect()
3083 srb = dcb->active_srb; in reselect()
3090 dcb->target_id, dcb->target_lun); in reselect()
3093 dcb->active_srb = srb; in reselect()
3096 if (dcb->flag & ABORT_DEV_) { in reselect()
3107 dprintkdbg(DBG_0, "reselect: select <%i>\n", dcb->target_id); in reselect()
3109 DC395x_write8(acb, TRM_S1040_SCSI_TARGETID, dcb->target_id); /* target ID */ in reselect()
3110 DC395x_write8(acb, TRM_S1040_SCSI_OFFSET, dcb->sync_offset); /* offset */ in reselect()
3111 DC395x_write8(acb, TRM_S1040_SCSI_SYNC, dcb->sync_period); /* sync period, wide */ in reselect()
3134 static void disc_tagq_set(struct DeviceCtlBlk *dcb, struct ScsiInqData *ptr) in disc_tagq_set() argument
3139 && (dcb->dev_mode & NTC_DO_TAG_QUEUEING) && in disc_tagq_set()
3144 if (dcb->max_command == 1) in disc_tagq_set()
3145 dcb->max_command = in disc_tagq_set()
3146 dcb->acb->tag_max_num; in disc_tagq_set()
3147 dcb->sync_mode |= EN_TAG_QUEUEING; in disc_tagq_set()
3150 dcb->max_command = 1; in disc_tagq_set()
3155 static void add_dev(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb, in add_dev() argument
3159 dcb->dev_type = bval1; in add_dev()
3161 disc_tagq_set(dcb, ptr); in add_dev()
3209 static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb, in srb_done() argument
3237 cmd->cmnd[0], dcb->target_id, in srb_done()
3238 dcb->target_lun, status, acb->scan_devices); in srb_done()
3243 cmd->cmnd[0], dcb->target_id, in srb_done()
3244 dcb->target_lun, status, acb->scan_devices); in srb_done()
3249 cmd->cmnd[0], dcb->target_id, in srb_done()
3250 dcb->target_lun, status, acb->scan_devices); in srb_done()
3255 cmd->cmnd[0], dcb->target_id, in srb_done()
3256 dcb->target_lun, status, acb->scan_devices); in srb_done()
3261 cmd->cmnd[0], dcb->target_id, in srb_done()
3262 dcb->target_lun, status, acb->scan_devices); in srb_done()
3304 request_sense(acb, dcb, srb); in srb_done()
3307 tempcnt = (u8)list_size(&dcb->srb_going_list); in srb_done()
3309 dcb->target_id, dcb->target_lun, tempcnt); in srb_done()
3312 dcb->max_command = tempcnt; in srb_done()
3313 free_tag(dcb, srb); in srb_done()
3314 list_move(&srb->list, &dcb->srb_waiting_list); in srb_done()
3370 dcb->inquiry7 = ptr->Flags; in srb_done()
3376 if (!dcb->init_tcq_flag) { in srb_done()
3377 add_dev(acb, dcb, ptr); in srb_done()
3378 dcb->init_tcq_flag = 1; in srb_done()
3417 struct DeviceCtlBlk *dcb; in doing_srb_done() local
3420 list_for_each_entry(dcb, &acb->dcb_list, list) { in doing_srb_done()
3425 list_for_each_entry_safe(srb, tmp, &dcb->srb_going_list, list) { in doing_srb_done()
3435 free_tag(dcb, srb); in doing_srb_done()
3446 if (!list_empty(&dcb->srb_going_list)) in doing_srb_done()
3449 dcb->target_id, dcb->target_lun); in doing_srb_done()
3450 if (dcb->tag_mask) in doing_srb_done()
3453 dcb->target_id, dcb->target_lun, in doing_srb_done()
3454 dcb->tag_mask); in doing_srb_done()
3457 list_for_each_entry_safe(srb, tmp, &dcb->srb_waiting_list, list) { in doing_srb_done()
3474 if (!list_empty(&dcb->srb_waiting_list)) in doing_srb_done()
3476 list_size(&dcb->srb_waiting_list), dcb->target_id, in doing_srb_done()
3477 dcb->target_lun); in doing_srb_done()
3478 dcb->flag &= ~ABORT_DEV_; in doing_srb_done()
3566 static void request_sense(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb, in request_sense() argument
3599 if (start_scsi(acb, dcb, srb)) { /* Should only happen, if sb. else grabs the bus */ in request_sense()
3602 srb->cmd, dcb->target_id, dcb->target_lun); in request_sense()
3603 list_move(&srb->list, &dcb->srb_waiting_list); in request_sense()
3627 struct DeviceCtlBlk *dcb; in device_alloc() local
3629 dcb = kmalloc(sizeof(struct DeviceCtlBlk), GFP_ATOMIC); in device_alloc()
3631 if (!dcb) in device_alloc()
3633 dcb->acb = NULL; in device_alloc()
3634 INIT_LIST_HEAD(&dcb->srb_going_list); in device_alloc()
3635 INIT_LIST_HEAD(&dcb->srb_waiting_list); in device_alloc()
3636 dcb->active_srb = NULL; in device_alloc()
3637 dcb->tag_mask = 0; in device_alloc()
3638 dcb->max_command = 1; in device_alloc()
3639 dcb->target_id = target; in device_alloc()
3640 dcb->target_lun = lun; in device_alloc()
3641 dcb->dev_mode = eeprom->target[target].cfg0; in device_alloc()
3643 dcb->identify_msg = in device_alloc()
3644 IDENTIFY(dcb->dev_mode & NTC_DO_DISCONNECT, lun); in device_alloc()
3646 dcb->identify_msg = IDENTIFY(0, lun); in device_alloc()
3648 dcb->inquiry7 = 0; in device_alloc()
3649 dcb->sync_mode = 0; in device_alloc()
3650 dcb->min_nego_period = clock_period[period_index]; in device_alloc()
3651 dcb->sync_period = 0; in device_alloc()
3652 dcb->sync_offset = 0; in device_alloc()
3653 dcb->flag = 0; in device_alloc()
3656 if ((dcb->dev_mode & NTC_DO_WIDE_NEGO) in device_alloc()
3658 dcb->sync_mode |= WIDE_NEGO_ENABLE; in device_alloc()
3661 if (dcb->dev_mode & NTC_DO_SYNC_NEGO) in device_alloc()
3663 dcb->sync_mode |= SYNC_NEGO_ENABLE; in device_alloc()
3665 if (dcb->target_lun != 0) { in device_alloc()
3669 if (p->target_id == dcb->target_id) in device_alloc()
3673 dcb->target_id, dcb->target_lun, in device_alloc()
3675 dcb->sync_mode = p->sync_mode; in device_alloc()
3676 dcb->sync_period = p->sync_period; in device_alloc()
3677 dcb->min_nego_period = p->min_nego_period; in device_alloc()
3678 dcb->sync_offset = p->sync_offset; in device_alloc()
3679 dcb->inquiry7 = p->inquiry7; in device_alloc()
3681 return dcb; in device_alloc()
3692 struct DeviceCtlBlk *dcb) in adapter_add_device() argument
3695 dcb->acb = acb; in adapter_add_device()
3699 acb->dcb_run_robin = dcb; in adapter_add_device()
3702 list_add_tail(&dcb->list, &acb->dcb_list); in adapter_add_device()
3705 acb->dcb_map[dcb->target_id] |= (1 << dcb->target_lun); in adapter_add_device()
3706 acb->children[dcb->target_id][dcb->target_lun] = dcb; in adapter_add_device()
3720 struct DeviceCtlBlk *dcb) in adapter_remove_device() argument
3725 dcb->target_id, dcb->target_lun); in adapter_remove_device()
3728 if (acb->active_dcb == dcb) in adapter_remove_device()
3730 if (acb->dcb_run_robin == dcb) in adapter_remove_device()
3731 acb->dcb_run_robin = dcb_get_next(&acb->dcb_list, dcb); in adapter_remove_device()
3735 if (dcb == i) { in adapter_remove_device()
3741 acb->dcb_map[dcb->target_id] &= ~(1 << dcb->target_lun); in adapter_remove_device()
3742 acb->children[dcb->target_id][dcb->target_lun] = NULL; in adapter_remove_device()
3743 dcb->acb = NULL; in adapter_remove_device()
3755 struct DeviceCtlBlk *dcb) in adapter_remove_and_free_device() argument
3757 if (list_size(&dcb->srb_going_list) > 1) { in adapter_remove_and_free_device()
3760 dcb->target_id, dcb->target_lun, in adapter_remove_and_free_device()
3761 list_size(&dcb->srb_going_list)); in adapter_remove_and_free_device()
3764 adapter_remove_device(acb, dcb); in adapter_remove_and_free_device()
3765 kfree(dcb); in adapter_remove_and_free_device()
3777 struct DeviceCtlBlk *dcb; in adapter_remove_and_free_all_devices() local
3782 list_for_each_entry_safe(dcb, tmp, &acb->dcb_list, list) in adapter_remove_and_free_all_devices()
3783 adapter_remove_and_free_device(acb, dcb); in adapter_remove_and_free_all_devices()
3797 struct DeviceCtlBlk *dcb; in dc395x_slave_alloc() local
3799 dcb = device_alloc(acb, scsi_device->id, scsi_device->lun); in dc395x_slave_alloc()
3800 if (!dcb) in dc395x_slave_alloc()
3802 adapter_add_device(acb, dcb); in dc395x_slave_alloc()
3817 struct DeviceCtlBlk *dcb = find_dcb(acb, scsi_device->id, scsi_device->lun); in dc395x_slave_destroy() local
3818 if (dcb) in dc395x_slave_destroy()
3819 adapter_remove_and_free_device(acb, dcb); in dc395x_slave_destroy()
4513 struct DeviceCtlBlk *dcb; in dc395x_show_info() local
4553 list_for_each_entry(dcb, &acb->dcb_list, list) { in dc395x_show_info()
4555 seq_printf(m, "%02i %02i %02i ", dev, dcb->target_id, in dc395x_show_info()
4556 dcb->target_lun); in dc395x_show_info()
4557 YESNO(dcb->dev_mode & NTC_DO_PARITY_CHK); in dc395x_show_info()
4558 YESNO(dcb->sync_offset); in dc395x_show_info()
4559 YESNO(dcb->sync_period & WIDE_SYNC); in dc395x_show_info()
4560 YESNO(dcb->dev_mode & NTC_DO_DISCONNECT); in dc395x_show_info()
4561 YESNO(dcb->dev_mode & NTC_DO_SEND_START); in dc395x_show_info()
4562 YESNO(dcb->sync_mode & EN_TAG_QUEUEING); in dc395x_show_info()
4563 nego_period = clock_period[dcb->sync_period & 0x07] << 2; in dc395x_show_info()
4564 if (dcb->sync_offset) in dc395x_show_info()
4567 seq_printf(m, " (%03i ns)", (dcb->min_nego_period << 2)); in dc395x_show_info()
4569 if (dcb->sync_offset & 0x0f) { in dc395x_show_info()
4574 (dcb->sync_offset & 0x0f)); in dc395x_show_info()
4579 seq_printf(m, " %02i\n", dcb->max_command); in dc395x_show_info()
4588 list_for_each_entry(dcb, &acb->dcb_list, list) { in dc395x_show_info()
4590 if (!list_empty(&dcb->srb_waiting_list)) in dc395x_show_info()
4592 dcb->target_id, dcb->target_lun, in dc395x_show_info()
4593 list_size(&dcb->srb_waiting_list)); in dc395x_show_info()
4594 list_for_each_entry(srb, &dcb->srb_waiting_list, list) in dc395x_show_info()
4596 if (!list_empty(&dcb->srb_going_list)) in dc395x_show_info()
4598 dcb->target_id, dcb->target_lun, in dc395x_show_info()
4599 list_size(&dcb->srb_going_list)); in dc395x_show_info()
4600 list_for_each_entry(srb, &dcb->srb_going_list, list) in dc395x_show_info()
4602 if (!list_empty(&dcb->srb_waiting_list) || !list_empty(&dcb->srb_going_list)) in dc395x_show_info()
4608 list_for_each_entry(dcb, &acb->dcb_list, list) { in dc395x_show_info()
4609 seq_printf(m, "%p -> ", dcb); in dc395x_show_info()