• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6.36/drivers/scsi/

Lines Matching refs:dcb

230 	struct DeviceCtlBlk *dcb;
270 struct list_head list; /* next/prev ptrs for the dcb list */
302 struct list_head dcb_list; /* head of going dcb list */
378 static u8 start_scsi(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
382 static void build_srb(struct scsi_cmnd *cmd, struct DeviceCtlBlk *dcb,
390 static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
392 static void request_sense(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
395 struct DeviceCtlBlk *dcb);
717 /* find supplied dcb and then select the next one */
736 static void free_tag(struct DeviceCtlBlk *dcb, struct ScsiReqBlk *srb)
739 dcb->tag_mask &= ~(1 << srb->tag_number); /* free tag mask */
778 static void srb_waiting_insert(struct DeviceCtlBlk *dcb,
782 srb->cmd->serial_number, dcb->target_id, dcb->target_lun, srb);
783 list_add(&srb->list, &dcb->srb_waiting_list);
787 static void srb_waiting_append(struct DeviceCtlBlk *dcb,
791 srb->cmd->serial_number, dcb->target_id, dcb->target_lun, srb);
792 list_add_tail(&srb->list, &dcb->srb_waiting_list);
796 static void srb_going_append(struct DeviceCtlBlk *dcb, struct ScsiReqBlk *srb)
799 srb->cmd->serial_number, dcb->target_id, dcb->target_lun, srb);
800 list_add_tail(&srb->list, &dcb->srb_going_list);
804 static void srb_going_remove(struct DeviceCtlBlk *dcb, struct ScsiReqBlk *srb)
809 srb->cmd->serial_number, dcb->target_id, dcb->target_lun, srb);
811 list_for_each_entry_safe(i, tmp, &dcb->srb_going_list, list)
819 static void srb_waiting_remove(struct DeviceCtlBlk *dcb,
825 srb->cmd->serial_number, dcb->target_id, dcb->target_lun, srb);
827 list_for_each_entry_safe(i, tmp, &dcb->srb_waiting_list, list)
835 static void srb_going_to_waiting_move(struct DeviceCtlBlk *dcb,
840 srb->cmd->serial_number, dcb->target_id, dcb->target_lun, srb);
841 list_move(&srb->list, &dcb->srb_waiting_list);
845 static void srb_waiting_to_going_move(struct DeviceCtlBlk *dcb,
850 srb->cmd->serial_number, dcb->target_id, dcb->target_lun, srb);
851 list_move(&srb->list, &dcb->srb_going_list);
877 struct DeviceCtlBlk *dcb;
892 * Find the starting dcb. Need to find it again in the list
895 list_for_each_entry(dcb, dcb_list_head, list)
896 if (dcb == acb->dcb_run_robin) {
897 start = dcb;
908 * Loop over the dcb, but we start somewhere (potentially) in
921 /* move to next dcb */
961 struct DeviceCtlBlk *dcb = srb->dcb;
963 if (dcb->max_command <= list_size(&dcb->srb_going_list) ||
966 srb_waiting_append(dcb, srb);
971 if (!start_scsi(acb, dcb, srb))
972 srb_going_append(dcb, srb);
974 srb_waiting_insert(dcb, srb);
980 static void build_srb(struct scsi_cmnd *cmd, struct DeviceCtlBlk *dcb,
986 cmd->serial_number, dcb->target_id, dcb->target_lun);
988 srb->dcb = dcb;
1045 if (dcb->sync_period & WIDE_SYNC &&
1051 srb->sg_bus_addr = pci_map_single(dcb->acb->dev,
1085 struct DeviceCtlBlk *dcb;
1110 dcb = find_dcb(acb, cmd->device->id, cmd->device->lun);
1111 if (!dcb) {
1133 build_srb(cmd, dcb, srb);
1135 if (!list_empty(&dcb->srb_waiting_list)) {
1137 srb_waiting_append(dcb, srb);
1191 struct DeviceCtlBlk *dcb, struct ScsiReqBlk *srb)
1196 if (!dcb)
1197 dcb = acb->active_dcb;
1198 if (!srb && dcb)
1199 srb = dcb->active_srb;
1272 struct DeviceCtlBlk *dcb;
1276 list_for_each_entry(dcb, &acb->dcb_list, list) {
1279 dcb->sync_mode &= ~(SYNC_NEGO_DONE + WIDE_NEGO_DONE);
1280 dcb->sync_period = 0;
1281 dcb->sync_offset = 0;
1283 dcb->dev_mode = eeprom->target[dcb->target_id].cfg0;
1284 period_index = eeprom->target[dcb->target_id].period & 0x07;
1285 dcb->min_nego_period = clock_period[period_index];
1286 if (!(dcb->dev_mode & NTC_DO_WIDE_NEGO)
1288 dcb->sync_mode &= ~WIDE_NEGO_ENABLE;
1368 struct DeviceCtlBlk *dcb;
1373 dcb = find_dcb(acb, cmd->device->id, cmd->device->lun);
1374 if (!dcb) {
1379 srb = find_cmd(cmd, &dcb->srb_waiting_list);
1381 srb_waiting_remove(dcb, srb);
1384 free_tag(dcb, srb);
1390 srb = find_cmd(cmd, &dcb->srb_going_list);
1401 static void build_sdtr(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
1412 if (!(dcb->dev_mode & NTC_DO_SYNC_NEGO)) {
1413 dcb->sync_offset = 0;
1414 dcb->min_nego_period = 200 >> 2;
1415 } else if (dcb->sync_offset == 0)
1416 dcb->sync_offset = SYNC_NEGO_OFFSET;
1421 *ptr++ = dcb->min_nego_period; /* Transfer period (in 4ns) */
1422 *ptr++ = dcb->sync_offset; /* Transfer period (max. REQ/ACK dist) */
1429 static void build_wdtr(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
1432 u8 wide = ((dcb->dev_mode & NTC_DO_WIDE_NEGO) &
1453 static u8 start_scsi(struct AdapterCtlBlk* acb, struct DeviceCtlBlk* dcb,
1460 srb->cmd->serial_number, dcb->target_id, dcb->target_lun, srb);
1506 DC395x_write8(acb, TRM_S1040_SCSI_TARGETID, dcb->target_id);
1507 DC395x_write8(acb, TRM_S1040_SCSI_SYNC, dcb->sync_period);
1508 DC395x_write8(acb, TRM_S1040_SCSI_OFFSET, dcb->sync_offset);
1511 identify_message = dcb->identify_msg;
1520 && (((dcb->sync_mode & WIDE_NEGO_ENABLE)
1521 && !(dcb->sync_mode & WIDE_NEGO_DONE))
1522 || ((dcb->sync_mode & SYNC_NEGO_ENABLE)
1523 && !(dcb->sync_mode & SYNC_NEGO_DONE)))
1524 && (dcb->target_lun == 0)) {
1530 if (dcb->sync_mode & WIDE_NEGO_ENABLE
1531 && dcb->inquiry7 & SCSI_INQ_WBUS16) {
1532 build_wdtr(acb, dcb, srb);
1536 if (dcb->sync_mode & SYNC_NEGO_ENABLE
1537 && dcb->inquiry7 & SCSI_INQ_SYNC) {
1538 build_sdtr(acb, dcb, srb);
1541 if (dcb->sync_mode & WIDE_NEGO_ENABLE
1542 && dcb->inquiry7 & SCSI_INQ_WBUS16) {
1543 build_wdtr(acb, dcb, srb);
1554 if ((dcb->sync_mode & EN_TAG_QUEUEING)
1559 while (tag_mask & dcb->tag_mask
1560 && tag_number < dcb->max_command) {
1564 if (tag_number >= dcb->max_command) {
1577 dcb->tag_mask |= tag_mask;
1590 DC395x_write8(acb, TRM_S1040_SCSI_FIFO, (dcb->target_lun << 5));
1610 srb->cmd->serial_number, dcb->target_id, dcb->target_lun);
1612 free_tag(dcb, srb);
1622 dcb->active_srb = srb;
1623 acb->active_dcb = dcb;
1662 struct DeviceCtlBlk *dcb;
1703 dcb = acb->active_dcb;
1704 if (!dcb) {
1710 srb = dcb->active_srb;
1711 if (dcb->flag & ABORT_DEV_) {
1848 struct DeviceCtlBlk *dcb;
1863 dcb = acb->active_dcb;
1865 DC395x_write8(acb, TRM_S1040_SCSI_FIFO, (dcb->target_lun << 5));
1928 pci_dma_sync_single_for_device(srb->dcb->
1990 struct DeviceCtlBlk *dcb = srb->dcb;
2036 if (dcb->sync_period & WIDE_SYNC)
2043 (dcb->sync_period & WIDE_SYNC) ? "words" : "bytes",
2066 if (d_left_counter == 1 && dcb->sync_period & WIDE_SYNC
2094 (dcb->sync_period & WIDE_SYNC) ? 2 : 1;
2176 << ((srb->dcb->sync_period & WIDE_SYNC) ? 1 :
2183 (srb->dcb->sync_period & WIDE_SYNC) ? "words" : "bytes",
2200 (srb->dcb->sync_period & WIDE_SYNC) ?
2203 if (srb->dcb->sync_period & WIDE_SYNC)
2244 if (fc == 0x40 && (srb->dcb->sync_period & WIDE_SYNC)) {
2303 struct DeviceCtlBlk *dcb = srb->dcb;
2326 dump_register_info(acb, dcb, srb);
2386 if (srb->dcb->sync_period & WIDE_SYNC)
2416 if (srb->dcb->sync_period & WIDE_SYNC) {
2443 if (dcb->sync_period & WIDE_SYNC) {
2526 srb->dcb->target_id, srb->dcb->target_lun);
2531 struct DeviceCtlBlk *dcb, u8 tag)
2538 if (!(dcb->tag_mask & (1 << tag)))
2541 dcb->tag_mask, tag);
2543 if (list_empty(&dcb->srb_going_list))
2545 list_for_each_entry(i, &dcb->srb_going_list, list) {
2555 srb->cmd->serial_number, srb->dcb->target_id, srb->dcb->target_lun);
2556 if (dcb->flag & ABORT_DEV_) {
2564 memcpy(srb->msgin_buf, dcb->active_srb->msgin_buf, acb->msg_len);
2565 srb->state |= dcb->active_srb->state;
2567 dcb->active_srb = srb;
2574 dcb->active_srb = srb;
2584 struct DeviceCtlBlk *dcb)
2586 DC395x_write8(acb, TRM_S1040_SCSI_TARGETID, dcb->target_id);
2587 DC395x_write8(acb, TRM_S1040_SCSI_SYNC, dcb->sync_period);
2588 DC395x_write8(acb, TRM_S1040_SCSI_OFFSET, dcb->sync_offset);
2589 set_xfer_rate(acb, dcb);
2596 struct DeviceCtlBlk *dcb = srb->dcb;
2598 dcb->target_id, dcb->target_lun);
2600 dcb->sync_mode &= ~(SYNC_NEGO_ENABLE);
2601 dcb->sync_mode |= SYNC_NEGO_DONE;
2602 /*dcb->sync_period &= 0; */
2603 dcb->sync_offset = 0;
2604 dcb->min_nego_period = 200 >> 2; /* 200ns <=> 5 MHz */
2606 reprogram_regs(acb, dcb);
2607 if ((dcb->sync_mode & WIDE_NEGO_ENABLE)
2608 && !(dcb->sync_mode & WIDE_NEGO_DONE)) {
2609 build_wdtr(acb, dcb, srb);
2619 struct DeviceCtlBlk *dcb = srb->dcb;
2624 dcb->target_id, srb->msgin_buf[3] << 2,
2631 if (!(dcb->dev_mode & NTC_DO_SYNC_NEGO))
2632 dcb->sync_offset = 0;
2633 else if (dcb->sync_offset == 0)
2634 dcb->sync_offset = srb->msgin_buf[4];
2635 if (srb->msgin_buf[4] > dcb->sync_offset)
2636 srb->msgin_buf[4] = dcb->sync_offset;
2638 dcb->sync_offset = srb->msgin_buf[4];
2641 || dcb->min_nego_period >
2649 dcb->sync_period &= 0xf0;
2650 dcb->sync_period |= ALT_SYNC | bval;
2651 dcb->min_nego_period = srb->msgin_buf[3];
2653 if (dcb->sync_period & WIDE_SYNC)
2660 dcb->target_id, (fact == 500) ? "Wide16" : "",
2661 dcb->min_nego_period << 2, dcb->sync_offset,
2662 (fact / dcb->min_nego_period),
2663 ((fact % dcb->min_nego_period) * 10 +
2664 dcb->min_nego_period / 2) / dcb->min_nego_period);
2674 dcb->sync_mode |= SYNC_NEGO_DONE;
2676 if ((dcb->sync_mode & WIDE_NEGO_ENABLE)
2677 && !(dcb->sync_mode & WIDE_NEGO_DONE)) {
2678 build_wdtr(acb, dcb, srb);
2684 dcb->sync_mode |= SYNC_NEGO_DONE | SYNC_NEGO_ENABLE;
2686 reprogram_regs(acb, dcb);
2693 struct DeviceCtlBlk *dcb = srb->dcb;
2694 dprintkdbg(DBG_1, "msgin_set_nowide: <%02i>\n", dcb->target_id);
2696 dcb->sync_period &= ~WIDE_SYNC;
2697 dcb->sync_mode &= ~(WIDE_NEGO_ENABLE);
2698 dcb->sync_mode |= WIDE_NEGO_DONE;
2700 reprogram_regs(acb, dcb);
2701 if ((dcb->sync_mode & SYNC_NEGO_ENABLE)
2702 && !(dcb->sync_mode & SYNC_NEGO_DONE)) {
2703 build_sdtr(acb, dcb, srb);
2711 struct DeviceCtlBlk *dcb = srb->dcb;
2712 u8 wide = (dcb->dev_mode & NTC_DO_WIDE_NEGO
2714 dprintkdbg(DBG_1, "msgin_set_wide: <%02i>\n", dcb->target_id);
2722 dcb->target_id);
2729 dcb->sync_mode |= (WIDE_NEGO_ENABLE | WIDE_NEGO_DONE);
2731 dcb->sync_period |= WIDE_SYNC;
2733 dcb->sync_period &= ~WIDE_SYNC;
2735 /*dcb->sync_mode &= ~(WIDE_NEGO_ENABLE+WIDE_NEGO_DONE); */
2738 (8 << srb->msgin_buf[3]), dcb->target_id);
2739 reprogram_regs(acb, dcb);
2740 if ((dcb->sync_mode & SYNC_NEGO_ENABLE)
2741 && !(dcb->sync_mode & SYNC_NEGO_DONE)) {
2742 build_sdtr(acb, dcb, srb);
2764 struct DeviceCtlBlk *dcb = acb->active_dcb;
2779 msgin_qtag(acb, dcb,
2843 srb->cmd->serial_number, dcb->target_id,
2844 dcb->target_lun);
2845 dcb->flag |= ABORT_DEV_;
2854 srb->msgout_buf[0] = dcb->identify_msg;
2900 static void set_xfer_rate(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb)
2905 if (dcb->identify_msg & 0x07)
2909 current_sync_offset = dcb->sync_offset;
2914 if (i->target_id == dcb->target_id) {
2915 i->sync_period = dcb->sync_period;
2916 i->sync_offset = dcb->sync_offset;
2917 i->sync_mode = dcb->sync_mode;
2918 i->min_nego_period = dcb->min_nego_period;
2925 struct DeviceCtlBlk *dcb = acb->active_dcb;
2928 if (!dcb) {
2939 srb = dcb->active_srb;
2949 dcb->target_id, dcb->target_lun);
2953 dcb->flag &= ~ABORT_DEV_;
2979 dcb->target_id, dcb->target_lun);
2986 free_tag(dcb, srb);
2987 srb_going_to_waiting_move(dcb, srb);
3010 free_tag(dcb, srb);
3011 dcb->active_srb = NULL;
3013 srb_done(acb, dcb, srb);
3021 struct DeviceCtlBlk *dcb = acb->active_dcb;
3032 if (dcb) { /* Arbitration lost but Reselection win */
3033 srb = dcb->active_srb;
3044 srb->cmd->serial_number, dcb->target_id,
3045 dcb->target_lun, rsel_tar_lun_id,
3051 free_tag(dcb, srb);
3052 srb_going_to_waiting_move(dcb, srb);
3064 dcb = find_dcb(acb, id, lun);
3065 if (!dcb) {
3071 acb->active_dcb = dcb;
3073 if (!(dcb->dev_mode & NTC_DO_DISCONNECT))
3076 dcb->target_id, dcb->target_lun);
3078 if (dcb->sync_mode & EN_TAG_QUEUEING /*&& !arblostflag */) {
3080 dcb->active_srb = srb;
3083 srb = dcb->active_srb;
3090 dcb->target_id, dcb->target_lun);
3093 dcb->active_srb = srb;
3096 if (dcb->flag & ABORT_DEV_) {
3107 dprintkdbg(DBG_0, "reselect: select <%i>\n", dcb->target_id);
3109 DC395x_write8(acb, TRM_S1040_SCSI_TARGETID, dcb->target_id); /* target ID */
3110 DC395x_write8(acb, TRM_S1040_SCSI_OFFSET, dcb->sync_offset); /* offset */
3111 DC395x_write8(acb, TRM_S1040_SCSI_SYNC, dcb->sync_period); /* sync period, wide */
3128 static void disc_tagq_set(struct DeviceCtlBlk *dcb, struct ScsiInqData *ptr)
3133 && (dcb->dev_mode & NTC_DO_TAG_QUEUEING) &&
3134 /*(dcb->dev_mode & NTC_DO_DISCONNECT) */
3135 /* ((dcb->dev_type == TYPE_DISK)
3136 || (dcb->dev_type == TYPE_MOD)) && */
3138 if (dcb->max_command == 1)
3139 dcb->max_command =
3140 dcb->acb->tag_max_num;
3141 dcb->sync_mode |= EN_TAG_QUEUEING;
3142 /*dcb->tag_mask = 0; */
3144 dcb->max_command = 1;
3149 static void add_dev(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
3153 dcb->dev_type = bval1;
3155 disc_tagq_set(dcb, ptr);
3204 static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
3232 cmd->cmnd[0], dcb->target_id,
3233 dcb->target_lun, status, acb->scan_devices);
3238 cmd->cmnd[0], dcb->target_id,
3239 dcb->target_lun, status, acb->scan_devices);
3244 cmd->cmnd[0], dcb->target_id,
3245 dcb->target_lun, status, acb->scan_devices);
3250 cmd->cmnd[0], dcb->target_id,
3251 dcb->target_lun, status, acb->scan_devices);
3256 cmd->cmnd[0], dcb->target_id,
3257 dcb->target_lun, status, acb->scan_devices);
3299 request_sense(acb, dcb, srb);
3302 tempcnt = (u8)list_size(&dcb->srb_going_list);
3304 dcb->target_id, dcb->target_lun, tempcnt);
3307 dcb->max_command = tempcnt;
3308 free_tag(dcb, srb);
3309 srb_going_to_waiting_move(dcb, srb);
3367 dcb->inquiry7 = ptr->Flags;
3374 if (!dcb->init_tcq_flag) {
3375 add_dev(acb, dcb, ptr);
3376 dcb->init_tcq_flag = 1;
3397 srb_going_remove(dcb, srb);
3417 struct DeviceCtlBlk *dcb;
3420 list_for_each_entry(dcb, &acb->dcb_list, list) {
3425 list_for_each_entry_safe(srb, tmp, &dcb->srb_going_list, list) {
3434 srb_going_remove(dcb, srb);
3435 free_tag(dcb, srb);
3446 if (!list_empty(&dcb->srb_going_list))
3449 dcb->target_id, dcb->target_lun);
3450 if (dcb->tag_mask)
3453 dcb->target_id, dcb->target_lun,
3454 dcb->tag_mask);
3457 list_for_each_entry_safe(srb, tmp, &dcb->srb_waiting_list, list) {
3464 srb_waiting_remove(dcb, srb);
3475 if (!list_empty(&dcb->srb_waiting_list))
3477 list_size(&dcb->srb_waiting_list), dcb->target_id,
3478 dcb->target_lun);
3479 dcb->flag &= ~ABORT_DEV_;
3567 static void request_sense(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
3600 if (start_scsi(acb, dcb, srb)) { /* Should only happen, if sb. else grabs the bus */
3603 srb->cmd->serial_number, dcb->target_id, dcb->target_lun);
3604 srb_going_to_waiting_move(dcb, srb);
3628 struct DeviceCtlBlk *dcb;
3630 dcb = kmalloc(sizeof(struct DeviceCtlBlk), GFP_ATOMIC);
3632 if (!dcb)
3634 dcb->acb = NULL;
3635 INIT_LIST_HEAD(&dcb->srb_going_list);
3636 INIT_LIST_HEAD(&dcb->srb_waiting_list);
3637 dcb->active_srb = NULL;
3638 dcb->tag_mask = 0;
3639 dcb->max_command = 1;
3640 dcb->target_id = target;
3641 dcb->target_lun = lun;
3643 dcb->identify_msg =
3644 IDENTIFY(dcb->dev_mode & NTC_DO_DISCONNECT, lun);
3646 dcb->identify_msg = IDENTIFY(0, lun);
3648 dcb->dev_mode = eeprom->target[target].cfg0;
3649 dcb->inquiry7 = 0;
3650 dcb->sync_mode = 0;
3651 dcb->min_nego_period = clock_period[period_index];
3652 dcb->sync_period = 0;
3653 dcb->sync_offset = 0;
3654 dcb->flag = 0;
3657 if ((dcb->dev_mode & NTC_DO_WIDE_NEGO)
3659 dcb->sync_mode |= WIDE_NEGO_ENABLE;
3662 if (dcb->dev_mode & NTC_DO_SYNC_NEGO)
3664 dcb->sync_mode |= SYNC_NEGO_ENABLE;
3666 if (dcb->target_lun != 0) {
3670 if (p->target_id == dcb->target_id)
3674 dcb->target_id, dcb->target_lun,
3676 dcb->sync_mode = p->sync_mode;
3677 dcb->sync_period = p->sync_period;
3678 dcb->min_nego_period = p->min_nego_period;
3679 dcb->sync_offset = p->sync_offset;
3680 dcb->inquiry7 = p->inquiry7;
3682 return dcb;
3690 * @dcb: A newly created and intialised device instance to add.
3693 struct DeviceCtlBlk *dcb)
3696 dcb->acb = acb;
3700 acb->dcb_run_robin = dcb;
3703 list_add_tail(&dcb->list, &acb->dcb_list);
3706 acb->dcb_map[dcb->target_id] |= (1 << dcb->target_lun);
3707 acb->children[dcb->target_id][dcb->target_lun] = dcb;
3718 * @dcb: A device that has previously been added to the adapter.
3721 struct DeviceCtlBlk *dcb)
3726 dcb->target_id, dcb->target_lun);
3729 if (acb->active_dcb == dcb)
3731 if (acb->dcb_run_robin == dcb)
3732 acb->dcb_run_robin = dcb_get_next(&acb->dcb_list, dcb);
3736 if (dcb == i) {
3742 acb->dcb_map[dcb->target_id] &= ~(1 << dcb->target_lun);
3743 acb->children[dcb->target_id][dcb->target_lun] = NULL;
3744 dcb->acb = NULL;
3753 * @dcb: A device that has previously been added to the adapter.
3756 struct DeviceCtlBlk *dcb)
3758 if (list_size(&dcb->srb_going_list) > 1) {
3761 dcb->target_id, dcb->target_lun,
3762 list_size(&dcb->srb_going_list));
3765 adapter_remove_device(acb, dcb);
3766 kfree(dcb);
3778 struct DeviceCtlBlk *dcb;
3783 list_for_each_entry_safe(dcb, tmp, &acb->dcb_list, list)
3784 adapter_remove_and_free_device(acb, dcb);
3798 struct DeviceCtlBlk *dcb;
3800 dcb = device_alloc(acb, scsi_device->id, scsi_device->lun);
3801 if (!dcb)
3803 adapter_add_device(acb, dcb);
3818 struct DeviceCtlBlk *dcb = find_dcb(acb, scsi_device->id, scsi_device->lun);
3819 if (dcb)
3820 adapter_remove_and_free_device(acb, dcb);
4440 "size{acb=0x%04x dcb=0x%04x srb=0x%04x}\n",
4524 struct DeviceCtlBlk *dcb;
4569 list_for_each_entry(dcb, &acb->dcb_list, list) {
4571 SPRINTF("%02i %02i %02i ", dev, dcb->target_id,
4572 dcb->target_lun);
4573 YESNO(dcb->dev_mode & NTC_DO_PARITY_CHK);
4574 YESNO(dcb->sync_offset);
4575 YESNO(dcb->sync_period & WIDE_SYNC);
4576 YESNO(dcb->dev_mode & NTC_DO_DISCONNECT);
4577 YESNO(dcb->dev_mode & NTC_DO_SEND_START);
4578 YESNO(dcb->sync_mode & EN_TAG_QUEUEING);
4579 nego_period = clock_period[dcb->sync_period & 0x07] << 2;
4580 if (dcb->sync_offset)
4583 SPRINTF(" (%03i ns)", (dcb->min_nego_period << 2));
4585 if (dcb->sync_offset & 0x0f) {
4590 (dcb->sync_offset & 0x0f));
4595 SPRINTF(" %02i\n", dcb->max_command);
4604 list_for_each_entry(dcb, &acb->dcb_list, list) {
4606 if (!list_empty(&dcb->srb_waiting_list))
4608 dcb->target_id, dcb->target_lun,
4609 list_size(&dcb->srb_waiting_list));
4610 list_for_each_entry(srb, &dcb->srb_waiting_list, list)
4612 if (!list_empty(&dcb->srb_going_list))
4614 dcb->target_id, dcb->target_lun,
4615 list_size(&dcb->srb_going_list));
4616 list_for_each_entry(srb, &dcb->srb_going_list, list)
4618 if (!list_empty(&dcb->srb_waiting_list) || !list_empty(&dcb->srb_going_list))
4624 list_for_each_entry(dcb, &acb->dcb_list, list) {
4625 SPRINTF("%p -> ", dcb);