Lines Matching defs:gdt

159 static int      gdt_internal_cmd(struct gdt_softc *gdt, struct gdt_ccb *gccb, 
162 static int gdt_wait(struct gdt_softc *gdt, struct gdt_ccb *ccb,
165 static struct gdt_ccb *gdt_get_ccb(struct gdt_softc *gdt);
167 static int gdt_sync_event(struct gdt_softc *gdt, int service,
169 static int gdt_async_event(struct gdt_softc *gdt, int service);
170 static struct gdt_ccb *gdt_raw_cmd(struct gdt_softc *gdt,
172 static struct gdt_ccb *gdt_cache_cmd(struct gdt_softc *gdt,
174 static struct gdt_ccb *gdt_ioctl_cmd(struct gdt_softc *gdt,
176 static void gdt_internal_cache_cmd(struct gdt_softc *gdt,union ccb *ccb);
184 iir_init(struct gdt_softc *gdt)
192 gdt->sc_state = GDT_POLLING;
196 SLIST_INIT(&gdt->sc_free_gccb);
197 SLIST_INIT(&gdt->sc_pending_gccb);
198 TAILQ_INIT(&gdt->sc_ccb_queue);
199 TAILQ_INIT(&gdt->sc_ucmd_queue);
200 TAILQ_INSERT_TAIL(&gdt_softcs, gdt, links);
203 if (bus_dma_tag_create(gdt->sc_parent_dmat, /*alignment*/1, /*boundary*/0,
211 &gdt->sc_buffer_dmat) != 0) {
212 printf("iir%d: bus_dma_tag_create(...,gdt->sc_buffer_dmat) failed\n",
213 gdt->sc_hanum);
216 gdt->sc_init_level++;
219 if (bus_dma_tag_create(gdt->sc_parent_dmat,
230 /*lockarg*/&Giant, &gdt->sc_gcscratch_dmat) != 0) {
231 printf("iir%d: bus_dma_tag_create(...,gdt->sc_gcscratch_dmat) failed\n",
232 gdt->sc_hanum);
235 gdt->sc_init_level++;
238 if (bus_dmamem_alloc(gdt->sc_gcscratch_dmat, (void **)&gdt->sc_gcscratch,
239 BUS_DMA_NOWAIT, &gdt->sc_gcscratch_dmamap) != 0) {
240 printf("iir%d: bus_dmamem_alloc(...,&gdt->sc_gccbs,...) failed\n",
241 gdt->sc_hanum);
244 gdt->sc_init_level++;
247 bus_dmamap_load(gdt->sc_gcscratch_dmat, gdt->sc_gcscratch_dmamap,
248 gdt->sc_gcscratch, GDT_MAXCMDS * GDT_SCRATCH_SZ,
249 gdtmapmem, &gdt->sc_gcscratch_busbase, /*flags*/0);
250 gdt->sc_init_level++;
253 bzero(gdt->sc_gcscratch, GDT_MAXCMDS * GDT_SCRATCH_SZ);
256 gdt->sc_gccbs = malloc(sizeof(struct gdt_ccb) * GDT_MAXCMDS, M_GDTBUF,
258 if (gdt->sc_gccbs == NULL) {
259 printf("iir%d: no memory for gccbs.\n", gdt->sc_hanum);
263 gccb = &gdt->sc_gccbs[i];
267 if (bus_dmamap_create(gdt->sc_buffer_dmat, /*flags*/0,
271 gccb->gc_scratch = &gdt->sc_gcscratch[GDT_SCRATCH_SZ * i];
272 gccb->gc_scratch_busbase = gdt->sc_gcscratch_busbase + GDT_SCRATCH_SZ * i;
274 SLIST_INSERT_HEAD(&gdt->sc_free_gccb, gccb, sle);
276 gdt->sc_init_level++;
279 gdt->sc_dev = gdt_make_dev(gdt->sc_hanum);
282 gccb = gdt_get_ccb(gdt);
285 gdt->sc_hanum);
290 if (!gdt_internal_cmd(gdt, gccb, GDT_SCREENSERVICE, GDT_INIT,
293 gdt->sc_hanum, gdt->sc_status);
294 gdt_free_ccb(gdt, gccb);
298 gdt_internal_cmd(gdt, gccb, GDT_CACHESERVICE, GDT_UNFREEZE_IO,
301 if (!gdt_internal_cmd(gdt, gccb, GDT_CACHESERVICE, GDT_INIT,
304 gdt->sc_hanum, gdt->sc_status);
305 gdt_free_ccb(gdt, gccb);
308 cdev_cnt = (u_int16_t)gdt->sc_info;
309 gdt->sc_fw_vers = gdt->sc_service;
317 if (gdt_internal_cmd(gdt, gccb, GDT_CACHESERVICE, GDT_IOCTL,
320 gdt->sc_bus_cnt = gccb->gc_scratch[GDT_IOC_CHAN_COUNT];
321 for (i = 0; i < gdt->sc_bus_cnt; i++) {
324 gdt->sc_bus_id[i] = id < GDT_MAXID_FC ? id : 0xff;
330 if (!gdt_internal_cmd(gdt, gccb, GDT_CACHESERVICE, GDT_IOCTL,
336 "error %d\n", gdt->sc_hanum, gdt->sc_status);
337 gdt_free_ccb(gdt, gccb);
342 gdt->sc_bus_id[i] =
346 gdt->sc_bus_cnt = i;
349 gdt->sc_virt_bus = gdt->sc_bus_cnt;
350 gdt->sc_bus_cnt++;
352 if (!gdt_internal_cmd(gdt, gccb, GDT_SCSIRAWSERVICE, GDT_INIT,
355 gdt->sc_hanum, gdt->sc_status);
356 gdt_free_ccb(gdt, gccb);
361 gdt->sc_raw_feat = 0;
362 if (gdt_internal_cmd(gdt, gccb, GDT_SCSIRAWSERVICE, GDT_SET_FEAT,
364 if (gdt_internal_cmd(gdt, gccb, GDT_SCSIRAWSERVICE, GDT_GET_FEAT,
366 gdt->sc_raw_feat = gdt->sc_info;
367 if (!(gdt->sc_info & GDT_SCATTER_GATHER)) {
369 "required but not supported!\n", gdt->sc_hanum);
370 gdt_free_ccb(gdt, gccb);
377 gdt->sc_cache_feat = 0;
378 if (gdt_internal_cmd(gdt, gccb, GDT_CACHESERVICE, GDT_SET_FEAT,
380 if (gdt_internal_cmd(gdt, gccb, GDT_CACHESERVICE, GDT_GET_FEAT,
382 gdt->sc_cache_feat = gdt->sc_info;
383 if (!(gdt->sc_info & GDT_SCATTER_GATHER)) {
385 "required but not supported!\n", gdt->sc_hanum);
386 gdt_free_ccb(gdt, gccb);
395 if (gdt_internal_cmd(gdt, gccb, GDT_CACHESERVICE, GDT_IOCTL,
398 strncpy(gdt->oem_name, ((gdt_oem_str_record_t *)
400 gdt->oem_name[7]='\0';
403 if (gdt->sc_vendor == INTEL_VENDOR_ID_IIR)
404 strcpy(gdt->oem_name,"Intel ");
406 strcpy(gdt->oem_name,"ICP ");
411 if (gdt_internal_cmd(gdt, gccb, GDT_CACHESERVICE, GDT_INFO,
413 gdt->sc_hdr[i].hd_present = 1;
414 gdt->sc_hdr[i].hd_size = gdt->sc_info;
419 gdt->sc_hdr[i].hd_size &= ~GDT_SECS32;
420 if (gdt->sc_info2 == 0)
421 gdt_eval_mapping(gdt->sc_hdr[i].hd_size,
424 drv_hds = gdt->sc_info2 & 0xff;
425 drv_secs = (gdt->sc_info2 >> 8) & 0xff;
426 drv_cyls = gdt->sc_hdr[i].hd_size / drv_hds /
429 gdt->sc_hdr[i].hd_heads = drv_hds;
430 gdt->sc_hdr[i].hd_secs = drv_secs;
432 gdt->sc_hdr[i].hd_size = drv_cyls * drv_hds * drv_secs;
434 if (gdt_internal_cmd(gdt, gccb, GDT_CACHESERVICE,
436 gdt->sc_hdr[i].hd_devtype = gdt->sc_info;
441 gdt->sc_dpmembase,
442 gdt->sc_bus_cnt, cdev_cnt,
444 gdt_free_ccb(gdt, gccb);
451 iir_free(struct gdt_softc *gdt)
457 switch (gdt->sc_init_level) {
459 gdt_destroy_dev(gdt->sc_dev);
462 if (gdt->sc_gccbs[i].gc_map_flag)
463 bus_dmamap_destroy(gdt->sc_buffer_dmat,
464 gdt->sc_gccbs[i].gc_dmamap);
465 bus_dmamap_unload(gdt->sc_gcscratch_dmat, gdt->sc_gcscratch_dmamap);
466 free(gdt->sc_gccbs, M_GDTBUF);
468 bus_dmamem_free(gdt->sc_gcscratch_dmat, gdt->sc_gcscratch, gdt->sc_gcscratch_dmamap);
470 bus_dma_tag_destroy(gdt->sc_gcscratch_dmat);
472 bus_dma_tag_destroy(gdt->sc_buffer_dmat);
474 bus_dma_tag_destroy(gdt->sc_parent_dmat);
478 TAILQ_REMOVE(&gdt_softcs, gdt, links);
482 iir_attach(struct gdt_softc *gdt)
497 for (i = 0; i < gdt->sc_bus_cnt; i++) {
501 gdt->sims[i] = cam_sim_alloc(iir_action, iir_poll, "iir",
502 gdt, gdt->sc_hanum, &Giant,
505 if (xpt_bus_register(gdt->sims[i], gdt->sc_devnode, i) != CAM_SUCCESS) {
506 cam_sim_free(gdt->sims[i], /*free_devq*/i == 0);
510 if (xpt_create_path(&gdt->paths[i], /*periph*/NULL,
511 cam_sim_path(gdt->sims[i]),
514 xpt_bus_deregister(cam_sim_path(gdt->sims[i]));
515 cam_sim_free(gdt->sims[i], /*free_devq*/i == 0);
521 gdt, SHUTDOWN_PRI_DEFAULT);
522 /* iir_watchdog(gdt); */
523 gdt->sc_state = GDT_NORMAL;
549 gdt_wait(struct gdt_softc *gdt, struct gdt_ccb *gccb,
555 ("gdt_wait(%p, %p, %d)\n", gdt, gccb, timeout));
557 gdt->sc_state |= GDT_POLL_WAIT;
559 iir_intr(gdt);
560 if (gdt == gdt_wait_gdt &&
567 gdt->sc_state &= ~GDT_POLL_WAIT;
569 while (gdt->sc_test_busy(gdt))
576 gdt_internal_cmd(struct gdt_softc *gdt, struct gdt_ccb *gccb,
583 gdt, service, opcode, arg1, arg2, arg3));
625 gdt->sc_set_sema0(gdt);
627 gdt->sc_cmd_off = 0;
628 gdt->sc_cmd_cnt = 0;
629 gdt->sc_copy_cmd(gdt, gccb);
630 gdt->sc_release_event(gdt);
632 if (!gdt_wait(gdt, gccb, GDT_POLL_TIMEOUT))
634 if (gdt->sc_status != GDT_S_BSY || --retries == 0)
638 return (gdt->sc_status == GDT_S_OK);
642 gdt_get_ccb(struct gdt_softc *gdt)
647 GDT_DPRINTF(GDT_D_QUEUE, ("gdt_get_ccb(%p)\n", gdt));
650 gccb = SLIST_FIRST(&gdt->sc_free_gccb);
652 SLIST_REMOVE_HEAD(&gdt->sc_free_gccb, sle);
653 SLIST_INSERT_HEAD(&gdt->sc_pending_gccb, gccb, sle);
663 gdt_free_ccb(struct gdt_softc *gdt, struct gdt_ccb *gccb)
667 GDT_DPRINTF(GDT_D_QUEUE, ("gdt_free_ccb(%p, %p)\n", gdt, gccb));
671 SLIST_REMOVE(&gdt->sc_pending_gccb, gccb, gdt_ccb, sle);
672 SLIST_INSERT_HEAD(&gdt->sc_free_gccb, gccb, sle);
675 if (gdt->sc_state & GDT_SHUTDOWN)
680 gdt_next(struct gdt_softc *gdt)
694 GDT_DPRINTF(GDT_D_QUEUE, ("gdt_next(%p)\n", gdt));
697 if (gdt->sc_test_busy(gdt)) {
698 if (!(gdt->sc_state & GDT_POLLING)) {
702 while (gdt->sc_test_busy(gdt))
706 gdt->sc_cmd_cnt = gdt->sc_cmd_off = 0;
710 if (!TAILQ_FIRST(&gdt->sc_ucmd_queue) &&
711 !TAILQ_FIRST(&gdt->sc_ccb_queue))
715 ucmd = TAILQ_FIRST(&gdt->sc_ucmd_queue);
717 TAILQ_REMOVE(&gdt->sc_ucmd_queue, ucmd, links);
718 if ((gccb = gdt_ioctl_cmd(gdt, ucmd, &lock)) == NULL) {
719 TAILQ_INSERT_HEAD(&gdt->sc_ucmd_queue, ucmd, links);
727 ccb = (union ccb *)TAILQ_FIRST(&gdt->sc_ccb_queue);
734 TAILQ_REMOVE(&gdt->sc_ccb_queue, &ccb->ccb_h, sim_links.tqe);
747 } else if (bus != gdt->sc_virt_bus) {
749 if ((gccb = gdt_raw_cmd(gdt, ccb, &lock)) == NULL) {
750 TAILQ_INSERT_HEAD(&gdt->sc_ccb_queue, &ccb->ccb_h,
758 !gdt->sc_hdr[target].hd_present || lun != 0) {
766 if ((gccb = gdt_cache_cmd(gdt, ccb, &lock)) == NULL) {
767 TAILQ_INSERT_HEAD(&gdt->sc_ccb_queue, &ccb->ccb_h,
776 gdt_internal_cache_cmd(gdt, ccb);
780 if ((gdt->sc_state & GDT_POLLING) || !next_cmd)
783 if (gdt->sc_cmd_cnt > 0)
784 gdt->sc_release_event(gdt);
788 if ((gdt->sc_state & GDT_POLLING) && gdt->sc_cmd_cnt > 0) {
789 gdt_wait(gdt, gccb, GDT_POLL_TIMEOUT);
794 gdt_raw_cmd(struct gdt_softc *gdt, union ccb *ccb, int *lock)
800 GDT_DPRINTF(GDT_D_CMD, ("gdt_raw_cmd(%p, %p)\n", gdt, ccb));
803 gdt->sc_cmd_off + GDT_DPMEM_COMMAND_OFFSET >
804 gdt->sc_ic_all_size) {
806 gdt->sc_hanum));
810 gccb = gdt_get_ccb(gdt);
813 gdt->sc_hanum));
822 if (gdt->sc_cmd_cnt == 0)
823 gdt->sc_set_sema0(gdt);
849 error = bus_dmamap_load_ccb(gdt->sc_buffer_dmat,
864 gdt_cache_cmd(struct gdt_softc *gdt, union ccb *ccb, int *lock)
873 GDT_DPRINTF(GDT_D_CMD, ("gdt_cache_cmd(%p, %p)\n", gdt, ccb));
876 gdt->sc_cmd_off + GDT_DPMEM_COMMAND_OFFSET >
877 gdt->sc_ic_all_size) {
879 gdt->sc_hanum));
883 gccb = gdt_get_ccb(gdt);
886 gdt->sc_hanum));
895 if (gdt->sc_cmd_cnt == 0)
896 gdt->sc_set_sema0(gdt);
902 if ((gdt->sc_state & GDT_SHUTDOWN) && opcode == GDT_WRITE)
922 error = bus_dmamap_load_ccb(gdt->sc_buffer_dmat,
936 gdt_ioctl_cmd(struct gdt_softc *gdt, gdt_ucmd_t *ucmd, int *lock)
941 GDT_DPRINTF(GDT_D_DEBUG, ("gdt_ioctl_cmd(%p, %p)\n", gdt, ucmd));
943 gccb = gdt_get_ccb(gdt);
946 gdt->sc_hanum));
962 gdt->sc_hanum, GDT_SCRATCH_SZ, cnt);
963 gdt_free_ccb(gdt, gccb);
972 gdt->sc_hanum, GDT_SCRATCH_SZ, cnt);
973 gdt_free_ccb(gdt, gccb);
983 gdt->sc_hanum, GDT_SCRATCH_SZ, cnt + ucmd->u.raw.sense_len);
984 gdt_free_ccb(gdt, gccb);
991 if (gdt->sc_cmd_off + gccb->gc_cmd_len + GDT_DPMEM_COMMAND_OFFSET >
992 gdt->sc_ic_all_size) {
994 gdt->sc_hanum));
995 gdt_free_ccb(gdt, gccb);
999 if (gdt->sc_cmd_cnt == 0)
1000 gdt->sc_set_sema0(gdt);
1069 gdt->sc_copy_cmd(gdt, gccb);
1074 gdt_internal_cache_cmd(struct gdt_softc *gdt,union ccb *ccb)
1080 gdt, ccb, ccb->csio.cdb_io.cdb_bytes[0], t));
1095 inq.device = (gdt->sc_hdr[t].hd_devtype & 4) ?
1097 inq.dev_qual2 = (gdt->sc_hdr[t].hd_devtype & 1) ? 0x80 : 0;
1102 strncpy(inq.vendor, gdt->oem_name, sizeof(inq.vendor));
1126 mpd.hd.dev_specific = (gdt->sc_hdr[t].hd_devtype & 2) ? 0x80 : 0;
1151 scsi_ulto4b(gdt->sc_hdr[t].hd_size - 1, rcd.addr);
1183 struct gdt_softc *gdt;
1190 gdt = cam_sim_softc((struct cam_sim *)ccb->ccb_h.ccb_sim_ptr);
1193 gdt, gccb, dm_segs, nseg, error));
1232 bus_dmamap_sync(gdt->sc_buffer_dmat, gccb->gc_dmamap,
1247 gdt->sc_copy_cmd(gdt, gccb);
1255 struct gdt_softc *gdt;
1258 gdt = (struct gdt_softc *)cam_sim_softc( sim );
1265 gdt, ccb->ccb_h.func_code, ccb->csio.cdb_io.cdb_bytes[0],
1274 TAILQ_INSERT_TAIL(&gdt->sc_ccb_queue, &ccb->ccb_h, sim_links.tqe);
1279 gdt_next(gdt);
1332 ccg->heads = gdt->sc_hdr[target].hd_heads;
1333 ccg->secs_per_track = gdt->sc_hdr[target].hd_secs;
1365 if (bus == gdt->sc_virt_bus)
1367 else if (gdt->sc_class & GDT_FC)
1375 (bus == gdt->sc_virt_bus ? 127 : gdt->sc_bus_id[bus]);
1378 if (gdt->sc_vendor == INTEL_VENDOR_ID_IIR)
1394 gdt, ccb->ccb_h.func_code));
1405 struct gdt_softc *gdt;
1407 gdt = (struct gdt_softc *)cam_sim_softc( sim );
1408 GDT_DPRINTF(GDT_D_CMD, ("iir_poll sim %p gdt %p\n", sim, gdt));
1409 iir_intr(gdt);
1421 struct gdt_softc *gdt;
1426 gdt = (struct gdt_softc *)arg;
1427 GDT_DPRINTF(GDT_D_CMD, ("iir_shutdown(%p, %d)\n", gdt, howto));
1430 gdt->sc_hanum);
1436 gdt->sc_hanum);
1443 gdt->sc_state = GDT_SHUTDOWN;
1445 if ((gccb = SLIST_FIRST(&gdt->sc_pending_gccb)) != NULL)
1450 if (gdt->sc_hdr[i].hd_present) {
1455 TAILQ_INSERT_TAIL(&gdt->sc_ucmd_queue, ucmd, links);
1458 gdt_next(gdt);
1471 struct gdt_softc *gdt = arg;
1478 GDT_DPRINTF(GDT_D_INTR, ("gdt_intr(%p)\n", gdt));
1481 if ((gdt->sc_state & GDT_POLLING) &&
1482 !(gdt->sc_state & GDT_POLL_WAIT))
1485 if (!(gdt->sc_state & GDT_POLLING))
1489 ctx.istatus = gdt->sc_get_status(gdt);
1491 if (!(gdt->sc_state & GDT_POLLING))
1493 gdt->sc_status = GDT_S_NO_STATUS;
1497 gdt->sc_intr(gdt, &ctx);
1499 gdt->sc_status = ctx.cmd_status;
1500 gdt->sc_service = ctx.service;
1501 gdt->sc_info = ctx.info;
1502 gdt->sc_info2 = ctx.info2;
1504 if (gdt->sc_state & GDT_POLL_WAIT) {
1505 gdt_wait_gdt = gdt;
1510 gdt_async_event(gdt, ctx.service);
1511 if (!(gdt->sc_state & GDT_POLLING))
1518 gdt->sc_hanum));
1519 gdt->sc_dvr.size = sizeof(gdt->sc_dvr.eu.driver);
1520 gdt->sc_dvr.eu.driver.ionode = gdt->sc_hanum;
1521 gdt_store_event(GDT_ES_DRIVER, 4, &gdt->sc_dvr);
1522 if (!(gdt->sc_state & GDT_POLLING))
1527 gccb = &gdt->sc_gccbs[ctx.istatus - 2];
1533 gdt->sc_hanum, ctx.istatus));
1534 gdt->sc_dvr.size = sizeof(gdt->sc_dvr.eu.driver);
1535 gdt->sc_dvr.eu.driver.ionode = gdt->sc_hanum;
1536 gdt->sc_dvr.eu.driver.index = ctx.istatus;
1537 gdt_store_event(GDT_ES_DRIVER, 1, &gdt->sc_dvr);
1538 gdt_free_ccb(gdt, gccb);
1542 if (!(gdt->sc_state & GDT_POLLING))
1548 if (gdt->sc_status == GDT_S_BSY) {
1550 gdt, gccb));
1551 TAILQ_INSERT_HEAD(&gdt->sc_ucmd_queue, ucmd, links);
1552 if (!(gdt->sc_state & GDT_POLLING))
1555 ucmd->status = gdt->sc_status;
1556 ucmd->info = gdt->sc_info;
1575 gdt_free_ccb(gdt, gccb);
1576 if (!(gdt->sc_state & GDT_POLLING))
1581 gdt_next(gdt);
1585 gdt_free_ccb(gdt, gccb);
1586 gdt_sync_event(gdt, ctx.service, ctx.istatus, gccb);
1587 if (!(gdt->sc_state & GDT_POLLING))
1589 gdt_next(gdt);
1595 gdt_async_event(struct gdt_softc *gdt, int service)
1599 GDT_DPRINTF(GDT_D_INTR, ("gdt_async_event(%p, %d)\n", gdt, service));
1602 if (gdt->sc_status == GDT_MSG_REQUEST) {
1603 while (gdt->sc_test_busy(gdt))
1605 gccb = gdt_get_ccb(gdt);
1608 gdt->sc_hanum);
1621 gdt->sc_set_sema0(gdt);
1622 gdt->sc_cmd_off = 0;
1625 gdt->sc_cmd_cnt = 0;
1626 gdt->sc_copy_cmd(gdt, gccb);
1628 gdt->sc_hanum,gdt->sc_bus,gdt->sc_slot);
1629 gdt->sc_release_event(gdt);
1633 if ((gdt->sc_fw_vers & 0xff) >= 0x1a) {
1634 gdt->sc_dvr.size = 0;
1635 gdt->sc_dvr.eu.async.ionode = gdt->sc_hanum;
1636 gdt->sc_dvr.eu.async.status = gdt->sc_status;
1639 gdt->sc_dvr.size = sizeof(gdt->sc_dvr.eu.async);
1640 gdt->sc_dvr.eu.async.ionode = gdt->sc_hanum;
1641 gdt->sc_dvr.eu.async.service = service;
1642 gdt->sc_dvr.eu.async.status = gdt->sc_status;
1643 gdt->sc_dvr.eu.async.info = gdt->sc_info;
1644 *(u_int32_t *)gdt->sc_dvr.eu.async.scsi_coord = gdt->sc_info2;
1646 gdt_store_event(GDT_ES_ASYNC, service, &gdt->sc_dvr);
1647 printf("iir%d: %s\n", gdt->sc_hanum, gdt->sc_dvr.event_string);
1654 gdt_sync_event(struct gdt_softc *gdt, int service,
1660 ("gdt_sync_event(%p, %d, %d, %p)\n", gdt,service,index,gccb));
1677 while (gdt->sc_test_busy(gdt))
1680 gccb = gdt_get_ccb(gdt);
1683 gdt->sc_hanum);
1695 gdt->sc_set_sema0(gdt);
1696 gdt->sc_cmd_off = 0;
1699 gdt->sc_cmd_cnt = 0;
1700 gdt->sc_copy_cmd(gdt, gccb);
1701 gdt->sc_release_event(gdt);
1721 while (gdt->sc_test_busy(gdt))
1724 gccb = gdt_get_ccb(gdt);
1727 gdt->sc_hanum);
1739 gdt->sc_set_sema0(gdt);
1740 gdt->sc_cmd_off = 0;
1743 gdt->sc_cmd_cnt = 0;
1744 gdt->sc_copy_cmd(gdt, gccb);
1745 gdt->sc_release_event(gdt);
1752 if (gdt->sc_status == GDT_S_BSY) {
1754 gdt, gccb));
1755 TAILQ_INSERT_HEAD(&gdt->sc_ccb_queue, &ccb->ccb_h, sim_links.tqe);
1762 bus_dmamap_sync(gdt->sc_buffer_dmat, gccb->gc_dmamap,
1765 bus_dmamap_unload(gdt->sc_buffer_dmat, gccb->gc_dmamap);
1768 if (gdt->sc_status == GDT_S_OK) {
1789 gdt->sc_dvr.size = sizeof(gdt->sc_dvr.eu.sync);
1790 gdt->sc_dvr.eu.sync.ionode = gdt->sc_hanum;
1791 gdt->sc_dvr.eu.sync.service = service;
1792 gdt->sc_dvr.eu.sync.status = gdt->sc_status;
1793 gdt->sc_dvr.eu.sync.info = gdt->sc_info;
1794 gdt->sc_dvr.eu.sync.hostdrive = ccb->ccb_h.target_id;
1795 if (gdt->sc_status >= 0x8000)
1796 gdt_store_event(GDT_ES_SYNC, 0, &gdt->sc_dvr);
1798 gdt_store_event(GDT_ES_SYNC, service, &gdt->sc_dvr);
1801 if (gdt->sc_status != GDT_S_RAW_SCSI || gdt->sc_info >= 0x100) {
1806 ccb->csio.scsi_status = gdt->sc_info;