Lines Matching defs:ocb

141 	STAILQ_ENTRY(sbp_ocb)	ocb;
186 struct sbp_ocb *ocb;
542 sdev->ocb = (struct sbp_ocb *)
544 bzero((char *)sdev->ocb,
549 struct sbp_ocb *ocb;
550 ocb = &sdev->ocb[i];
551 ocb->bus_addr = sdev->dma.bus_addr
555 if (bus_dmamap_create(sbp->dmat, 0, &ocb->dmamap)) {
560 callout_init_mtx(&ocb->timer, &sbp->mtx, 0);
561 sbp_free_ocb(sdev, ocb);
1175 struct sbp_ocb *ocb;
1178 ocb = STAILQ_FIRST(&sdev->ocbs);
1179 if (ocb != NULL)
1180 sbp_orb_pointer(sdev, ocb);
1187 sbp_orb_pointer(struct sbp_dev *sdev, struct sbp_ocb *ocb)
1195 (uint32_t)ocb->bus_addr);
1219 xfer->send.payload[1] = htonl((uint32_t)ocb->bus_addr);
1223 ocb->ccb->ccb_h.status = CAM_REQ_INVALID;
1224 xpt_done(ocb->ccb);
1335 struct sbp_ocb *ocb;
1344 ocb = STAILQ_FIRST(&target->mgm_ocb_queue);
1345 if (target->mgm_ocb_cur != NULL || ocb == NULL) {
1348 STAILQ_REMOVE_HEAD(&target->mgm_ocb_queue, ocb);
1351 if ((ocb = sbp_get_ocb(sdev)) == NULL) {
1355 ocb->flags = OCB_ACT_MGM;
1356 ocb->sdev = sdev;
1358 bzero((void *)ocb->orb, sizeof(ocb->orb));
1359 ocb->orb[6] = htonl((nid << 16) | SBP_BIND_HI);
1360 ocb->orb[7] = htonl(SBP_DEV2ADDR(target->target_id, sdev->lun_id));
1370 ocb->orb[0] = ocb->orb[1] = 0; /* password */
1371 ocb->orb[2] = htonl(nid << 16);
1372 ocb->orb[3] = htonl(sdev->dma.bus_addr);
1373 ocb->orb[4] = htonl(ORB_NOTIFY | sdev->lun_id);
1375 ocb->orb[4] |= htonl(ORB_EXV);
1376 ocb->orb[5] = htonl(SBP_LOGIN_SIZE);
1380 ocb->orb[0] = htonl((0 << 16) | 0);
1381 ocb->orb[1] = htonl(aocb->bus_addr & 0xffffffff);
1388 ocb->orb[4] = htonl(ORB_NOTIFY | func | sdev->login->id);
1394 STAILQ_INSERT_TAIL(&sdev->target->mgm_ocb_queue, ocb, ocb);
1398 target->mgm_ocb_cur = ocb;
1401 sbp_mgm_timeout, (caddr_t)ocb);
1414 xfer->send.payload[1] = htonl(ocb->bus_addr & 0xffffffff);
1420 sbp_print_scsi_cmd(struct sbp_ocb *ocb)
1424 csio = &ocb->ccb->csio;
1429 device_get_nameunit(ocb->sdev->target->sbp->fd.dev),
1430 ocb->ccb->ccb_h.target_id,
1431 (uintmax_t)ocb->ccb->ccb_h.target_lun,
1442 ocb->ccb->ccb_h.flags & CAM_DIR_MASK,
1448 sbp_scsi_status(struct sbp_status *sbp_status, struct sbp_ocb *ocb)
1454 sense = (struct scsi_sense_data_fixed *)&ocb->ccb->csio.sense_data;
1457 sbp_print_scsi_cmd(ocb);
1460 ocb->sdev->bustgtlun,
1510 ocb->ccb->csio.scsi_status = sbp_cmd_status->status;
1511 ocb->ccb->ccb_h.status = CAM_SCSI_STATUS_ERROR
1527 device_printf(ocb->sdev->target->sbp->fd.dev,
1529 __func__, ocb->sdev->bustgtlun,
1535 sbp_fix_inq_data(struct sbp_ocb *ocb)
1541 ccb = ocb->ccb;
1542 sdev = ocb->sdev;
1594 struct sbp_ocb *ocb;
1643 ocb = NULL;
1648 ocb = target->mgm_ocb_cur;
1649 if (ocb != NULL) {
1650 if (OCB_MATCH(ocb, sbp_status)) {
1656 ocb = sbp_dequeue_ocb(sdev, sbp_status);
1657 if (ocb == NULL) {
1659 "%s:%s No ocb(%x) on the queue\n",
1727 if (ocb == NULL)
1730 switch (ntohl(ocb->orb[4]) & ORB_FMT_MSK) {
1736 switch (ocb->flags) {
1738 orb_fun = ntohl(ocb->orb[4]) & ORB_FUN_MSK;
1811 if (ocb->ccb != NULL) {
1814 ccb = ocb->ccb;
1816 sbp_scsi_status(sbp_status, ocb);
1826 sbp_fix_inq_data(ocb);
1836 sbp_free_ocb(sdev, ocb);
2046 callout_drain(&sdev->ocb[i].timer);
2047 bus_dmamap_destroy(sbp->dmat, sdev->ocb[i].dmamap);
2197 struct sbp_ocb *ocb = (struct sbp_ocb *)arg;
2198 struct sbp_dev *sdev = ocb->sdev;
2204 __func__, sdev->bustgtlun, (uint32_t)ocb->bus_addr);
2206 sbp_free_ocb(sdev, ocb);
2221 struct sbp_ocb *ocb = (struct sbp_ocb *)arg;
2222 struct sbp_dev *sdev = ocb->sdev;
2226 __func__, sdev->bustgtlun, (uint32_t)ocb->bus_addr);
2337 struct sbp_ocb *ocb;
2383 if ((ocb = sbp_get_ocb(sdev)) == NULL) {
2393 ocb->flags = OCB_ACT_CMD;
2394 ocb->sdev = sdev;
2395 ocb->ccb = ccb;
2397 ocb->orb[0] = htonl(1U << 31);
2398 ocb->orb[1] = 0;
2399 ocb->orb[2] = htonl(((sbp->fd.fc->nodeid | FWLOCALBUS) << 16));
2400 ocb->orb[3] = htonl(ocb->bus_addr + IND_PTR_OFFSET);
2402 ocb->orb[4] = htonl(ORB_NOTIFY | ORB_CMD_SPD(speed)
2405 ocb->orb[4] |= htonl(ORB_CMD_IN);
2412 bcopy(cdb, (void *)&ocb->orb[5], csio->cdb_len);
2414 printf("ORB %08x %08x %08x %08x\n", ntohl(ocb->orb[0]), ntohl(ocb->orb[1]), ntohl(ocb->orb[2]), ntohl(ocb->orb[3]));
2415 printf("ORB %08x %08x %08x %08x\n", ntohl(ocb->orb[4]), ntohl(ocb->orb[5]), ntohl(ocb->orb[6]), ntohl(ocb->orb[7]));
2421 /*dma map*/ocb->dmamap,
2424 ocb,
2429 sbp_execute_ocb(ocb, NULL, 0, 0);
2543 struct sbp_ocb *ocb;
2550 ocb = (struct sbp_ocb *)arg;
2565 ocb->orb[3] = htonl(s->ds_addr);
2566 ocb->orb[4] |= htonl(s->ds_len);
2580 ocb->ind_ptr[i].hi = htonl(s->ds_len << 16);
2581 ocb->ind_ptr[i].lo = htonl(s->ds_addr);
2583 ocb->orb[4] |= htonl(ORB_CMD_PTBL | seg);
2587 bus_dmamap_sync(ocb->sdev->target->sbp->dmat, ocb->dmamap,
2588 (ntohl(ocb->orb[4]) & ORB_CMD_IN) ?
2590 prev = sbp_enqueue_ocb(ocb->sdev, ocb);
2591 fwdma_sync(&ocb->sdev->dma, BUS_DMASYNC_PREWRITE);
2594 if (ocb->sdev->last_ocb != NULL)
2595 sbp_doorbell(ocb->sdev);
2597 sbp_orb_pointer(ocb->sdev, ocb);
2600 if (prev == NULL || (ocb->sdev->flags & ORB_LINK_DEAD) != 0) {
2601 ocb->sdev->flags &= ~ORB_LINK_DEAD;
2602 sbp_orb_pointer(ocb->sdev, ocb);
2624 struct sbp_ocb *ocb;
2634 STAILQ_FOREACH_SAFE(ocb, &sdev->ocbs, ocb, next) {
2635 if (OCB_MATCH(ocb, sbp_status)) {
2637 STAILQ_REMOVE(&sdev->ocbs, ocb, sbp_ocb, ocb);
2638 if (ocb->ccb != NULL)
2639 callout_stop(&ocb->timer);
2640 if (ntohl(ocb->orb[4]) & 0xffff) {
2642 ocb->dmamap,
2643 (ntohl(ocb->orb[4]) & ORB_CMD_IN) ?
2647 ocb->dmamap);
2670 sdev->last_ocb = ocb;
2680 if (ocb && order > 0) {
2686 return (ocb);
2690 sbp_enqueue_ocb(struct sbp_dev *sdev, struct sbp_ocb *ocb)
2697 "%s:%s 0x%08jx\n", __func__, sdev->bustgtlun, (uintmax_t)ocb->bus_addr);
2699 prev2 = prev = STAILQ_LAST(&sdev->ocbs, sbp_ocb, ocb);
2700 STAILQ_INSERT_TAIL(&sdev->ocbs, ocb, ocb);
2702 if (ocb->ccb != NULL) {
2703 callout_reset_sbt(&ocb->timer,
2704 SBT_1MS * ocb->ccb->ccb_h.timeout, 0, sbp_timeout,
2705 ocb, 0);
2711 if (prev2 != NULL && (ocb->sdev->flags & ORB_LINK_DEAD) == 0) {
2714 (uintmax_t)prev2->bus_addr, (uintmax_t)ocb->bus_addr);
2721 *(volatile uint32_t *)&prev2->orb[1] = htonl(ocb->bus_addr);
2731 struct sbp_ocb *ocb;
2734 ocb = STAILQ_FIRST(&sdev->free_ocbs);
2735 if (ocb == NULL) {
2737 printf("ocb shortage!!!\n");
2740 STAILQ_REMOVE_HEAD(&sdev->free_ocbs, ocb);
2741 ocb->ccb = NULL;
2742 return (ocb);
2746 sbp_free_ocb(struct sbp_dev *sdev, struct sbp_ocb *ocb)
2748 ocb->flags = 0;
2749 ocb->ccb = NULL;
2752 STAILQ_INSERT_TAIL(&sdev->free_ocbs, ocb, ocb);
2764 sbp_abort_ocb(struct sbp_ocb *ocb, int status)
2768 sdev = ocb->sdev;
2772 "%s:%s 0x%jx\n", __func__, sdev->bustgtlun, (uintmax_t)ocb->bus_addr);
2775 if (ocb->ccb != NULL)
2776 sbp_print_scsi_cmd(ocb);
2778 if (ntohl(ocb->orb[4]) & 0xffff) {
2779 bus_dmamap_sync(sdev->target->sbp->dmat, ocb->dmamap,
2780 (ntohl(ocb->orb[4]) & ORB_CMD_IN) ?
2782 bus_dmamap_unload(sdev->target->sbp->dmat, ocb->dmamap);
2784 if (ocb->ccb != NULL) {
2785 callout_stop(&ocb->timer);
2786 ocb->ccb->ccb_h.status = status;
2787 xpt_done(ocb->ccb);
2789 sbp_free_ocb(sdev, ocb);
2795 struct sbp_ocb *ocb, *next;
2803 STAILQ_FOREACH_SAFE(ocb, &temp, ocb, next) {
2804 sbp_abort_ocb(ocb, status);