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