Lines Matching refs:ocb
137 STAILQ_ENTRY(sbp_ocb) ocb;
182 struct sbp_ocb *ocb; member
537 sdev->ocb = (struct sbp_ocb *) in sbp_alloc_lun()
539 bzero((char *)sdev->ocb, in sbp_alloc_lun()
544 struct sbp_ocb *ocb; in sbp_alloc_lun() local
545 ocb = &sdev->ocb[i]; in sbp_alloc_lun()
546 ocb->bus_addr = sdev->dma.bus_addr in sbp_alloc_lun()
550 if (bus_dmamap_create(sbp->dmat, 0, &ocb->dmamap)) { in sbp_alloc_lun()
555 callout_init_mtx(&ocb->timer, &sbp->mtx, 0); in sbp_alloc_lun()
557 sbp_free_ocb(sdev, ocb); in sbp_alloc_lun()
1188 struct sbp_ocb *ocb; in sbp_orb_pointer_callback() local
1191 ocb = STAILQ_FIRST(&sdev->ocbs); in sbp_orb_pointer_callback()
1192 if (ocb != NULL) in sbp_orb_pointer_callback()
1193 sbp_orb_pointer(sdev, ocb); in sbp_orb_pointer_callback()
1200 sbp_orb_pointer(struct sbp_dev *sdev, struct sbp_ocb *ocb) in sbp_orb_pointer() argument
1208 (uint32_t)ocb->bus_addr); in sbp_orb_pointer()
1232 xfer->send.payload[1] = htonl((uint32_t)ocb->bus_addr); in sbp_orb_pointer()
1236 ocb->ccb->ccb_h.status = CAM_REQ_INVALID; in sbp_orb_pointer()
1237 xpt_done(ocb->ccb); in sbp_orb_pointer()
1348 struct sbp_ocb *ocb; in sbp_mgm_orb() local
1357 ocb = STAILQ_FIRST(&target->mgm_ocb_queue); in sbp_mgm_orb()
1358 if (target->mgm_ocb_cur != NULL || ocb == NULL) { in sbp_mgm_orb()
1361 STAILQ_REMOVE_HEAD(&target->mgm_ocb_queue, ocb); in sbp_mgm_orb()
1364 if ((ocb = sbp_get_ocb(sdev)) == NULL) { in sbp_mgm_orb()
1368 ocb->flags = OCB_ACT_MGM; in sbp_mgm_orb()
1369 ocb->sdev = sdev; in sbp_mgm_orb()
1371 bzero((void *)ocb->orb, sizeof(ocb->orb)); in sbp_mgm_orb()
1372 ocb->orb[6] = htonl((nid << 16) | SBP_BIND_HI); in sbp_mgm_orb()
1373 ocb->orb[7] = htonl(SBP_DEV2ADDR(target->target_id, sdev->lun_id)); in sbp_mgm_orb()
1383 ocb->orb[0] = ocb->orb[1] = 0; /* password */ in sbp_mgm_orb()
1384 ocb->orb[2] = htonl(nid << 16); in sbp_mgm_orb()
1385 ocb->orb[3] = htonl(sdev->dma.bus_addr); in sbp_mgm_orb()
1386 ocb->orb[4] = htonl(ORB_NOTIFY | sdev->lun_id); in sbp_mgm_orb()
1388 ocb->orb[4] |= htonl(ORB_EXV); in sbp_mgm_orb()
1389 ocb->orb[5] = htonl(SBP_LOGIN_SIZE); in sbp_mgm_orb()
1393 ocb->orb[0] = htonl((0 << 16) | 0); in sbp_mgm_orb()
1394 ocb->orb[1] = htonl(aocb->bus_addr & 0xffffffff); in sbp_mgm_orb()
1401 ocb->orb[4] = htonl(ORB_NOTIFY | func | sdev->login->id); in sbp_mgm_orb()
1407 STAILQ_INSERT_TAIL(&sdev->target->mgm_ocb_queue, ocb, ocb); in sbp_mgm_orb()
1411 target->mgm_ocb_cur = ocb; in sbp_mgm_orb()
1414 sbp_mgm_timeout, (caddr_t)ocb); in sbp_mgm_orb()
1427 xfer->send.payload[1] = htonl(ocb->bus_addr & 0xffffffff); in sbp_mgm_orb()
1433 sbp_print_scsi_cmd(struct sbp_ocb *ocb) in sbp_print_scsi_cmd() argument
1437 csio = &ocb->ccb->csio; in sbp_print_scsi_cmd()
1442 device_get_nameunit(ocb->sdev->target->sbp->fd.dev), in sbp_print_scsi_cmd()
1443 ocb->ccb->ccb_h.target_id, in sbp_print_scsi_cmd()
1444 (uintmax_t)ocb->ccb->ccb_h.target_lun, in sbp_print_scsi_cmd()
1455 ocb->ccb->ccb_h.flags & CAM_DIR_MASK, in sbp_print_scsi_cmd()
1461 sbp_scsi_status(struct sbp_status *sbp_status, struct sbp_ocb *ocb) in sbp_scsi_status() argument
1467 sense = (struct scsi_sense_data_fixed *)&ocb->ccb->csio.sense_data; in sbp_scsi_status()
1470 sbp_print_scsi_cmd(ocb); in sbp_scsi_status()
1473 ocb->sdev->bustgtlun, in sbp_scsi_status()
1523 ocb->ccb->csio.scsi_status = sbp_cmd_status->status; in sbp_scsi_status()
1524 ocb->ccb->ccb_h.status = CAM_SCSI_STATUS_ERROR in sbp_scsi_status()
1540 device_printf(ocb->sdev->target->sbp->fd.dev, in sbp_scsi_status()
1542 __func__, ocb->sdev->bustgtlun, in sbp_scsi_status()
1548 sbp_fix_inq_data(struct sbp_ocb *ocb) in sbp_fix_inq_data() argument
1554 ccb = ocb->ccb; in sbp_fix_inq_data()
1555 sdev = ocb->sdev; in sbp_fix_inq_data()
1607 struct sbp_ocb *ocb; in sbp_recv1() local
1656 ocb = NULL; in sbp_recv1()
1661 ocb = target->mgm_ocb_cur; in sbp_recv1()
1662 if (ocb != NULL) { in sbp_recv1()
1663 if (OCB_MATCH(ocb, sbp_status)) { in sbp_recv1()
1669 ocb = sbp_dequeue_ocb(sdev, sbp_status); in sbp_recv1()
1670 if (ocb == NULL) { in sbp_recv1()
1740 if (ocb == NULL) in sbp_recv1()
1743 switch (ntohl(ocb->orb[4]) & ORB_FMT_MSK) { in sbp_recv1()
1749 switch (ocb->flags) { in sbp_recv1()
1751 orb_fun = ntohl(ocb->orb[4]) & ORB_FUN_MSK; in sbp_recv1()
1824 if (ocb->ccb != NULL) { in sbp_recv1()
1827 ccb = ocb->ccb; in sbp_recv1()
1829 sbp_scsi_status(sbp_status, ocb); in sbp_recv1()
1839 sbp_fix_inq_data(ocb); in sbp_recv1()
1849 sbp_free_ocb(sdev, ocb); in sbp_recv1()
2059 callout_drain(&sdev->ocb[i].timer); in sbp_free_sdev()
2060 bus_dmamap_destroy(sbp->dmat, sdev->ocb[i].dmamap); in sbp_free_sdev()
2210 struct sbp_ocb *ocb = (struct sbp_ocb *)arg; in sbp_mgm_timeout() local
2211 struct sbp_dev *sdev = ocb->sdev; in sbp_mgm_timeout()
2217 __func__, sdev->bustgtlun, (uint32_t)ocb->bus_addr); in sbp_mgm_timeout()
2219 sbp_free_ocb(sdev, ocb); in sbp_mgm_timeout()
2234 struct sbp_ocb *ocb = (struct sbp_ocb *)arg; in sbp_timeout() local
2235 struct sbp_dev *sdev = ocb->sdev; in sbp_timeout()
2239 __func__, sdev->bustgtlun, (uint32_t)ocb->bus_addr); in sbp_timeout()
2350 struct sbp_ocb *ocb; in sbp_action() local
2383 if (csio->cdb_len > sizeof(ocb->orb) - 5 * sizeof(uint32_t)) { in sbp_action()
2401 if ((ocb = sbp_get_ocb(sdev)) == NULL) { in sbp_action()
2411 ocb->flags = OCB_ACT_CMD; in sbp_action()
2412 ocb->sdev = sdev; in sbp_action()
2413 ocb->ccb = ccb; in sbp_action()
2415 ocb->orb[0] = htonl(1U << 31); in sbp_action()
2416 ocb->orb[1] = 0; in sbp_action()
2417 ocb->orb[2] = htonl(((sbp->fd.fc->nodeid | FWLOCALBUS) << 16)); in sbp_action()
2418 ocb->orb[3] = htonl(ocb->bus_addr + IND_PTR_OFFSET); in sbp_action()
2420 ocb->orb[4] = htonl(ORB_NOTIFY | ORB_CMD_SPD(speed) in sbp_action()
2423 ocb->orb[4] |= htonl(ORB_CMD_IN); in sbp_action()
2430 bcopy(cdb, (void *)&ocb->orb[5], csio->cdb_len); in sbp_action()
2439 /*dma map*/ocb->dmamap, in sbp_action()
2442 ocb, in sbp_action()
2447 sbp_execute_ocb(ocb, NULL, 0, 0); in sbp_action()
2561 struct sbp_ocb *ocb; in sbp_execute_ocb() local
2568 ocb = (struct sbp_ocb *)arg; in sbp_execute_ocb()
2583 ocb->orb[3] = htonl(s->ds_addr); in sbp_execute_ocb()
2584 ocb->orb[4] |= htonl(s->ds_len); in sbp_execute_ocb()
2598 ocb->ind_ptr[i].hi = htonl(s->ds_len << 16); in sbp_execute_ocb()
2599 ocb->ind_ptr[i].lo = htonl(s->ds_addr); in sbp_execute_ocb()
2601 ocb->orb[4] |= htonl(ORB_CMD_PTBL | seg); in sbp_execute_ocb()
2605 bus_dmamap_sync(ocb->sdev->target->sbp->dmat, ocb->dmamap, in sbp_execute_ocb()
2606 (ntohl(ocb->orb[4]) & ORB_CMD_IN) ? in sbp_execute_ocb()
2608 prev = sbp_enqueue_ocb(ocb->sdev, ocb); in sbp_execute_ocb()
2609 fwdma_sync(&ocb->sdev->dma, BUS_DMASYNC_PREWRITE); in sbp_execute_ocb()
2612 if (ocb->sdev->last_ocb != NULL) in sbp_execute_ocb()
2613 sbp_doorbell(ocb->sdev); in sbp_execute_ocb()
2615 sbp_orb_pointer(ocb->sdev, ocb); in sbp_execute_ocb()
2618 if (prev == NULL || (ocb->sdev->flags & ORB_LINK_DEAD) != 0) { in sbp_execute_ocb()
2619 ocb->sdev->flags &= ~ORB_LINK_DEAD; in sbp_execute_ocb()
2620 sbp_orb_pointer(ocb->sdev, ocb); in sbp_execute_ocb()
2642 struct sbp_ocb *ocb; in sbp_dequeue_ocb() local
2652 STAILQ_FOREACH_SAFE(ocb, &sdev->ocbs, ocb, next) { in sbp_dequeue_ocb()
2653 if (OCB_MATCH(ocb, sbp_status)) { in sbp_dequeue_ocb()
2655 STAILQ_REMOVE(&sdev->ocbs, ocb, sbp_ocb, ocb); in sbp_dequeue_ocb()
2656 if (ocb->ccb != NULL) in sbp_dequeue_ocb()
2657 callout_stop(&ocb->timer); in sbp_dequeue_ocb()
2658 if (ntohl(ocb->orb[4]) & 0xffff) { in sbp_dequeue_ocb()
2660 ocb->dmamap, in sbp_dequeue_ocb()
2661 (ntohl(ocb->orb[4]) & ORB_CMD_IN) ? in sbp_dequeue_ocb()
2665 ocb->dmamap); in sbp_dequeue_ocb()
2688 sdev->last_ocb = ocb; in sbp_dequeue_ocb()
2698 if (ocb && order > 0) { in sbp_dequeue_ocb()
2704 return (ocb); in sbp_dequeue_ocb()
2708 sbp_enqueue_ocb(struct sbp_dev *sdev, struct sbp_ocb *ocb) in sbp_enqueue_ocb() argument
2715 "%s:%s 0x%08jx\n", __func__, sdev->bustgtlun, (uintmax_t)ocb->bus_addr); in sbp_enqueue_ocb()
2717 prev2 = prev = STAILQ_LAST(&sdev->ocbs, sbp_ocb, ocb); in sbp_enqueue_ocb()
2718 STAILQ_INSERT_TAIL(&sdev->ocbs, ocb, ocb); in sbp_enqueue_ocb()
2720 if (ocb->ccb != NULL) { in sbp_enqueue_ocb()
2721 callout_reset_sbt(&ocb->timer, in sbp_enqueue_ocb()
2722 SBT_1MS * ocb->ccb->ccb_h.timeout, 0, sbp_timeout, in sbp_enqueue_ocb()
2723 ocb, 0); in sbp_enqueue_ocb()
2729 if (prev2 != NULL && (ocb->sdev->flags & ORB_LINK_DEAD) == 0) { in sbp_enqueue_ocb()
2732 (uintmax_t)prev2->bus_addr, (uintmax_t)ocb->bus_addr); in sbp_enqueue_ocb()
2739 *(volatile uint32_t *)&prev2->orb[1] = htonl(ocb->bus_addr); in sbp_enqueue_ocb()
2749 struct sbp_ocb *ocb; in sbp_get_ocb() local
2752 ocb = STAILQ_FIRST(&sdev->free_ocbs); in sbp_get_ocb()
2753 if (ocb == NULL) { in sbp_get_ocb()
2758 STAILQ_REMOVE_HEAD(&sdev->free_ocbs, ocb); in sbp_get_ocb()
2759 ocb->ccb = NULL; in sbp_get_ocb()
2760 return (ocb); in sbp_get_ocb()
2764 sbp_free_ocb(struct sbp_dev *sdev, struct sbp_ocb *ocb) in sbp_free_ocb() argument
2766 ocb->flags = 0; in sbp_free_ocb()
2767 ocb->ccb = NULL; in sbp_free_ocb()
2770 STAILQ_INSERT_TAIL(&sdev->free_ocbs, ocb, ocb); in sbp_free_ocb()
2782 sbp_abort_ocb(struct sbp_ocb *ocb, int status) in sbp_abort_ocb() argument
2786 sdev = ocb->sdev; in sbp_abort_ocb()
2790 "%s:%s 0x%jx\n", __func__, sdev->bustgtlun, (uintmax_t)ocb->bus_addr); in sbp_abort_ocb()
2793 if (ocb->ccb != NULL) in sbp_abort_ocb()
2794 sbp_print_scsi_cmd(ocb); in sbp_abort_ocb()
2796 if (ntohl(ocb->orb[4]) & 0xffff) { in sbp_abort_ocb()
2797 bus_dmamap_sync(sdev->target->sbp->dmat, ocb->dmamap, in sbp_abort_ocb()
2798 (ntohl(ocb->orb[4]) & ORB_CMD_IN) ? in sbp_abort_ocb()
2800 bus_dmamap_unload(sdev->target->sbp->dmat, ocb->dmamap); in sbp_abort_ocb()
2802 if (ocb->ccb != NULL) { in sbp_abort_ocb()
2803 callout_stop(&ocb->timer); in sbp_abort_ocb()
2804 ocb->ccb->ccb_h.status = status; in sbp_abort_ocb()
2805 xpt_done(ocb->ccb); in sbp_abort_ocb()
2807 sbp_free_ocb(sdev, ocb); in sbp_abort_ocb()
2813 struct sbp_ocb *ocb, *next; in sbp_abort_all_ocbs() local
2821 STAILQ_FOREACH_SAFE(ocb, &temp, ocb, next) { in sbp_abort_all_ocbs()
2822 sbp_abort_ocb(ocb, status); in sbp_abort_all_ocbs()