2564 scsirate |= syncrate->sxfr & SXFR;
2565 scsirate |= offset & SOFS;
2566 }
2567 if (active) {
2568 u_int sxfrctl0;
2569
2570 sxfrctl0 = ahc_inb(ahc, SXFRCTL0);
2571 sxfrctl0 &= ~FAST20;
2572 if (tstate->ultraenb & devinfo->target_mask)
2573 sxfrctl0 |= FAST20;
2574 ahc_outb(ahc, SXFRCTL0, sxfrctl0);
2575 }
2576 }
2577 if (active) {
2578 ahc_outb(ahc, SCSIRATE, scsirate);
2579 if ((ahc->features & AHC_ULTRA2) != 0)
2580 ahc_outb(ahc, SCSIOFFSET, offset);
2581 }
2582
2583 tinfo->scsirate = scsirate;
2584 tinfo->curr.period = period;
2585 tinfo->curr.offset = offset;
2586 tinfo->curr.ppr_options = ppr_options;
2587
2588 ahc_send_async(ahc, devinfo->channel, devinfo->target,
2589 CAM_LUN_WILDCARD, AC_TRANSFER_NEG);
2590 if (bootverbose) {
2591 if (offset != 0) {
2592 printf("%s: target %d synchronous at %sMHz%s, "
2593 "offset = 0x%x\n", ahc_name(ahc),
2594 devinfo->target, syncrate->rate,
2595 (ppr_options & MSG_EXT_PPR_DT_REQ)
2596 ? " DT" : "", offset);
2597 } else {
2598 printf("%s: target %d using "
2599 "asynchronous transfers\n",
2600 ahc_name(ahc), devinfo->target);
2601 }
2602 }
2603 }
2604