Lines Matching full:xp

282 	struct vscsi_xfer *xp;  in vscsi_attach()  local
340 xp = &sc->xfer[i]; in vscsi_attach()
341 xp->sc = sc; in vscsi_attach()
343 error = bus_dmamap_create(sc->data_tag, 0, &xp->dmamap); in vscsi_attach()
350 TAILQ_INSERT_TAIL(&sc->free_xferq, xp, queue); in vscsi_attach()
465 struct vscsi_xfer *xp; in vscsi_cam_action() local
469 xp = TAILQ_FIRST(&sc->free_xferq); in vscsi_cam_action()
470 if (xp == NULL) in vscsi_cam_action()
472 xp->ccb = ccb; in vscsi_cam_action()
473 TAILQ_REMOVE(&sc->free_xferq, xp, queue); in vscsi_cam_action()
474 TAILQ_INSERT_TAIL(&sc->active_xferq, xp, queue); in vscsi_cam_action()
475 bus_dmamap_load_ccb(sc->data_tag, xp->dmamap, in vscsi_cam_action()
476 ccb, vscsi_scsi_command, xp, 0); in vscsi_cam_action()
492 struct vscsi_xfer *xp; in vscsi_srp_login() local
499 xp = TAILQ_FIRST(&sc->free_xferq); in vscsi_srp_login()
500 if (xp == NULL) in vscsi_srp_login()
502 xp->ccb = NULL; in vscsi_srp_login()
503 TAILQ_REMOVE(&sc->free_xferq, xp, queue); in vscsi_srp_login()
504 TAILQ_INSERT_TAIL(&sc->active_xferq, xp, queue); in vscsi_srp_login()
507 xp->srp_iu_size = 64; in vscsi_srp_login()
508 crq.iu_length = htobe16(xp->srp_iu_size); in vscsi_srp_login()
509 err = vmem_alloc(xp->sc->srp_iu_arena, xp->srp_iu_size, in vscsi_srp_login()
510 M_BESTFIT | M_NOWAIT, &xp->srp_iu_offset); in vscsi_srp_login()
514 login = (struct srp_login *)((uint8_t *)xp->sc->srp_iu_queue + in vscsi_srp_login()
515 (uintptr_t)xp->srp_iu_offset); in vscsi_srp_login()
516 bzero(login, xp->srp_iu_size); in vscsi_srp_login()
518 login->tag = (uint64_t)(xp); in vscsi_srp_login()
526 crq.iu_data = htobe64(xp->sc->srp_iu_phys + xp->srp_iu_offset); in vscsi_srp_login()
529 err = phyp_hcall(H_SEND_CRQ, xp->sc->unit, in vscsi_srp_login()
540 struct vscsi_xfer *xp; in vscsi_task_management() local
546 xp = TAILQ_FIRST(&sc->free_xferq); in vscsi_task_management()
547 if (xp == NULL) in vscsi_task_management()
549 xp->ccb = ccb; in vscsi_task_management()
550 TAILQ_REMOVE(&sc->free_xferq, xp, queue); in vscsi_task_management()
551 TAILQ_INSERT_TAIL(&sc->active_xferq, xp, queue); in vscsi_task_management()
553 xp->srp_iu_size = sizeof(*cmd); in vscsi_task_management()
554 crq.iu_length = htobe16(xp->srp_iu_size); in vscsi_task_management()
555 err = vmem_alloc(xp->sc->srp_iu_arena, xp->srp_iu_size, in vscsi_task_management()
556 M_BESTFIT | M_NOWAIT, &xp->srp_iu_offset); in vscsi_task_management()
560 cmd = (struct srp_tsk_mgmt *)((uint8_t *)xp->sc->srp_iu_queue + in vscsi_task_management()
561 (uintptr_t)xp->srp_iu_offset); in vscsi_task_management()
562 bzero(cmd, xp->srp_iu_size); in vscsi_task_management()
564 cmd->tag = (uint64_t)xp; in vscsi_task_management()
576 bus_dmamap_sync(xp->sc->crq_tag, xp->sc->crq_map, BUS_DMASYNC_PREWRITE); in vscsi_task_management()
581 crq.iu_data = htobe64(xp->sc->srp_iu_phys + xp->srp_iu_offset); in vscsi_task_management()
583 err = phyp_hcall(H_SEND_CRQ, xp->sc->unit, in vscsi_task_management()
593 struct vscsi_xfer *xp = xxp; in vscsi_scsi_command() local
595 union ccb *ccb = xp->ccb; in vscsi_scsi_command()
604 mtx_assert(&xp->sc->io_lock, MA_OWNED); in vscsi_scsi_command()
610 xp->srp_iu_size = 48 + ((nsegs > 1) ? 20 : 16) + in vscsi_scsi_command()
612 crq.iu_length = htobe16(xp->srp_iu_size); in vscsi_scsi_command()
614 xp->srp_iu_size += nsegs*16; in vscsi_scsi_command()
615 xp->srp_iu_size = roundup(xp->srp_iu_size, 16); in vscsi_scsi_command()
616 err = vmem_alloc(xp->sc->srp_iu_arena, xp->srp_iu_size, in vscsi_scsi_command()
617 M_BESTFIT | M_NOWAIT, &xp->srp_iu_offset); in vscsi_scsi_command()
621 cmd = (struct srp_cmd *)((uint8_t *)xp->sc->srp_iu_queue + in vscsi_scsi_command()
622 (uintptr_t)xp->srp_iu_offset); in vscsi_scsi_command()
623 bzero(cmd, xp->srp_iu_size); in vscsi_scsi_command()
629 cmd->tag = (uint64_t)(xp); /* Let the responder find this again */ in vscsi_scsi_command()
649 chunk_addr = htobe64(xp->sc->srp_iu_phys + xp->srp_iu_offset + 20 + in vscsi_scsi_command()
699 KASSERT(xp->srp_iu_size >= 48 + ((ccb->csio.cdb_len > 16) ? in vscsi_scsi_command()
704 bus_dmamap_sync(xp->sc->crq_tag, xp->sc->crq_map, BUS_DMASYNC_PREWRITE); in vscsi_scsi_command()
709 crq.iu_data = htobe64(xp->sc->srp_iu_phys + xp->srp_iu_offset); in vscsi_scsi_command()
711 err = phyp_hcall(H_SEND_CRQ, xp->sc->unit, in vscsi_scsi_command()
736 struct vscsi_xfer *xp; in vscsi_setup_bus() local
803 xp = TAILQ_FIRST(&sc->free_xferq); in vscsi_setup_bus()
804 xp->ccb = NULL; in vscsi_setup_bus()
805 TAILQ_REMOVE(&sc->free_xferq, xp, queue); in vscsi_setup_bus()
806 TAILQ_INSERT_TAIL(&sc->active_xferq, xp, queue); in vscsi_setup_bus()
807 xp->srp_iu_size = sizeof(mad_adapter_info); in vscsi_setup_bus()
808 crq.iu_length = htobe16(xp->srp_iu_size); in vscsi_setup_bus()
809 vmem_alloc(xp->sc->srp_iu_arena, xp->srp_iu_size, in vscsi_setup_bus()
810 M_BESTFIT | M_NOWAIT, &xp->srp_iu_offset); in vscsi_setup_bus()
811 mad_adapter_info.buffer = htobe64(xp->sc->srp_iu_phys + xp->srp_iu_offset + 24); in vscsi_setup_bus()
812 mad_adapter_info.tag = (uint64_t)xp; in vscsi_setup_bus()
813 memcpy((uint8_t *)xp->sc->srp_iu_queue + (uintptr_t)xp->srp_iu_offset, in vscsi_setup_bus()
817 crq.iu_data = htobe64(xp->sc->srp_iu_phys + xp->srp_iu_offset); in vscsi_setup_bus()
819 phyp_hcall(H_SEND_CRQ, xp->sc->unit, in vscsi_setup_bus()
845 vscsi_srp_response(struct vscsi_xfer *xp, struct vscsi_crq *crq) in vscsi_srp_response() argument
847 union ccb *ccb = xp->ccb; in vscsi_srp_response()
848 struct vscsi_softc *sc = xp->sc; in vscsi_srp_response()
854 (uintptr_t)xp->srp_iu_offset); in vscsi_srp_response()
901 bus_dmamap_sync(sc->data_tag, xp->dmamap, BUS_DMASYNC_POSTREAD); in vscsi_srp_response()
902 bus_dmamap_unload(sc->data_tag, xp->dmamap); in vscsi_srp_response()
904 xp->ccb = NULL; in vscsi_srp_response()
908 vscsi_login_response(struct vscsi_xfer *xp, struct vscsi_crq *crq) in vscsi_login_response() argument
910 struct vscsi_softc *sc = xp->sc; in vscsi_login_response()
915 (uintptr_t)xp->srp_iu_offset); in vscsi_login_response()
937 struct vscsi_xfer *xp; in vscsi_check_response_queue() local
955 /* IU data is set to tag pointer (the XP) */ in vscsi_check_response_queue()
956 xp = (struct vscsi_xfer *)crq->iu_data; in vscsi_check_response_queue()
961 (uintptr_t)xp->srp_iu_offset); in vscsi_check_response_queue()
964 vscsi_srp_response(xp, crq); in vscsi_check_response_queue()
967 vscsi_login_response(xp, crq); in vscsi_check_response_queue()
982 vmem_free(sc->srp_iu_arena, xp->srp_iu_offset, in vscsi_check_response_queue()
983 xp->srp_iu_size); in vscsi_check_response_queue()
984 TAILQ_REMOVE(&sc->active_xferq, xp, queue); in vscsi_check_response_queue()
985 TAILQ_INSERT_TAIL(&sc->free_xferq, xp, queue); in vscsi_check_response_queue()