Lines Matching full:req
49 static void tws_scsi_complete(struct tws_request *req);
51 void tws_unmap_request(struct tws_softc *sc, struct tws_request *req);
52 int32_t tws_map_request(struct tws_softc *sc, struct tws_request *req);
61 static void tws_freeze_simq(struct tws_softc *sc, struct tws_request *req);
67 static void tws_scsi_err_complete(struct tws_request *req,
69 static void tws_passthru_err_complete(struct tws_request *req,
77 void tws_cmd_complete(struct tws_request *req);
78 void tws_aen_complete(struct tws_request *req);
80 void tws_getset_param_complete(struct tws_request *req);
88 extern void *tws_release_request(struct tws_request *req);
89 extern int tws_submit_command(struct tws_softc *sc, struct tws_request *req);
92 extern void tws_q_insert_tail(struct tws_softc *sc, struct tws_request *req,
95 struct tws_request *req, u_int8_t q_type );
104 extern void tws_passthru_complete(struct tws_request *req);
318 tws_scsi_complete(struct tws_request *req) in tws_scsi_complete() argument
320 struct tws_softc *sc = req->sc; in tws_scsi_complete()
323 tws_q_remove_request(sc, req, TWS_BUSY_Q); in tws_scsi_complete()
326 callout_stop(&req->timeout); in tws_scsi_complete()
327 tws_unmap_request(req->sc, req); in tws_scsi_complete()
329 req->ccb_ptr->ccb_h.status = CAM_REQ_CMP; in tws_scsi_complete()
331 xpt_done(req->ccb_ptr); in tws_scsi_complete()
335 tws_q_insert_tail(sc, req, TWS_FREE_Q); in tws_scsi_complete()
340 tws_getset_param_complete(struct tws_request *req) in tws_getset_param_complete() argument
342 struct tws_softc *sc = req->sc; in tws_getset_param_complete()
344 TWS_TRACE_DEBUG(sc, "getset complete", req, req->request_id); in tws_getset_param_complete()
346 callout_stop(&req->timeout); in tws_getset_param_complete()
347 tws_unmap_request(sc, req); in tws_getset_param_complete()
349 free(req->data, M_TWS); in tws_getset_param_complete()
351 req->state = TWS_REQ_STATE_FREE; in tws_getset_param_complete()
355 tws_aen_complete(struct tws_request *req) in tws_aen_complete() argument
357 struct tws_softc *sc = req->sc; in tws_aen_complete()
362 TWS_TRACE_DEBUG(sc, "aen complete", 0, req->request_id); in tws_aen_complete()
364 callout_stop(&req->timeout); in tws_aen_complete()
365 tws_unmap_request(sc, req); in tws_aen_complete()
367 sense = (struct tws_command_header *)req->data; in tws_aen_complete()
421 free(req->data, M_TWS); in tws_aen_complete()
423 req->state = TWS_REQ_STATE_FREE; in tws_aen_complete()
433 tws_cmd_complete(struct tws_request *req) in tws_cmd_complete() argument
435 struct tws_softc *sc = req->sc; in tws_cmd_complete()
437 callout_stop(&req->timeout); in tws_cmd_complete()
438 tws_unmap_request(sc, req); in tws_cmd_complete()
446 struct tws_request *req; in tws_err_complete() local
457 TWS_TRACE_DEBUG(sc, "found null req", 0, mfa); in tws_err_complete()
463 req = &sc->reqs[req_id]; in tws_err_complete()
464 TWS_TRACE_DEBUG(sc, "req, id", req, req_id); in tws_err_complete()
465 if ( req->error_code != TWS_REQ_RET_SUBMIT_SUCCESS ) in tws_err_complete()
466 TWS_TRACE_DEBUG(sc, "submit failure?", 0, req->error_code); in tws_err_complete()
469 switch (req->type) { in tws_err_complete()
471 tws_passthru_err_complete(req, hdr); in tws_err_complete()
474 tws_getset_param_complete(req); in tws_err_complete()
477 tws_scsi_err_complete(req, hdr); in tws_err_complete()
498 tws_scsi_err_complete(struct tws_request *req, struct tws_command_header *hdr) in tws_scsi_err_complete() argument
501 struct tws_softc *sc = req->sc; in tws_scsi_err_complete()
502 union ccb *ccb = req->ccb_ptr; in tws_scsi_err_complete()
505 req->cmd_pkt->cmd.pkt_a.status); in tws_scsi_err_complete()
536 ccb->csio.scsi_status = req->cmd_pkt->cmd.pkt_a.status; in tws_scsi_err_complete()
543 callout_stop(&req->timeout); in tws_scsi_err_complete()
544 tws_unmap_request(req->sc, req); in tws_scsi_err_complete()
546 tws_q_remove_request(sc, req, TWS_BUSY_Q); in tws_scsi_err_complete()
547 tws_q_insert_tail(sc, req, TWS_FREE_Q); in tws_scsi_err_complete()
552 tws_passthru_err_complete(struct tws_request *req, in tws_passthru_err_complete() argument
555 TWS_TRACE_DEBUG(req->sc, "entry", hdr, req->request_id); in tws_passthru_err_complete()
556 req->error_code = hdr->status_block.error; in tws_passthru_err_complete()
557 memcpy(&(req->cmd_pkt->hdr), hdr, sizeof(struct tws_command_header)); in tws_passthru_err_complete()
558 tws_passthru_complete(req); in tws_passthru_err_complete()
564 struct tws_request *req; in tws_drain_busy_queue() local
569 req = tws_q_remove_tail(sc, TWS_BUSY_Q); in tws_drain_busy_queue()
571 while ( req ) { in tws_drain_busy_queue()
572 TWS_TRACE_DEBUG(sc, "moved to TWS_COMPLETE_Q", 0, req->request_id); in tws_drain_busy_queue()
573 callout_stop(&req->timeout); in tws_drain_busy_queue()
575 req->error_code = TWS_REQ_RET_RESET; in tws_drain_busy_queue()
576 ccb = (union ccb *)(req->ccb_ptr); in tws_drain_busy_queue()
582 tws_unmap_request(req->sc, req); in tws_drain_busy_queue()
585 xpt_done(req->ccb_ptr); in tws_drain_busy_queue()
589 tws_q_insert_tail(sc, req, TWS_FREE_Q); in tws_drain_busy_queue()
590 req = tws_q_remove_tail(sc, TWS_BUSY_Q); in tws_drain_busy_queue()
602 TWS_TRACE_DEBUG(sc, "reset aen req", 0, 0); in tws_drain_reserved_reqs()
612 TWS_TRACE_DEBUG(sc, "reset passthru req", 0, 0); in tws_drain_reserved_reqs()
618 TWS_TRACE_DEBUG(sc, "reset setparam req", 0, 0); in tws_drain_reserved_reqs()
639 struct tws_request *req; in tws_execute_scsi() local
672 req = tws_get_request(sc, TWS_REQ_TYPE_SCSI_IO); in tws_execute_scsi()
673 if ( !req ) { in tws_execute_scsi()
682 req->flags |= TWS_DIR_IN; in tws_execute_scsi()
684 req->flags |= TWS_DIR_OUT; in tws_execute_scsi()
686 req->flags = TWS_DIR_NONE; /* no data */ in tws_execute_scsi()
689 req->type = TWS_REQ_TYPE_SCSI_IO; in tws_execute_scsi()
690 req->cb = tws_scsi_complete; in tws_execute_scsi()
692 cmd_pkt = req->cmd_pkt; in tws_execute_scsi()
702 cmd_pkt->cmd.pkt_a.lun_l4__req_id = lun | req->request_id; in tws_execute_scsi()
718 req->data = ccb; in tws_execute_scsi()
719 req->flags |= TWS_DATA_CCB; in tws_execute_scsi()
721 req->ccb_ptr = ccb; in tws_execute_scsi()
727 callout_reset_sbt(&req->timeout, SBT_1MS * ccb->ccb_h.timeout, 0, in tws_execute_scsi()
728 tws_timeout, req, 0); in tws_execute_scsi()
729 error = tws_map_request(sc, req); in tws_execute_scsi()
736 struct tws_request *req; in tws_send_scsi_cmd() local
741 req = tws_get_request(sc, TWS_REQ_TYPE_AEN_FETCH); in tws_send_scsi_cmd()
743 if ( req == NULL ) in tws_send_scsi_cmd()
746 req->cb = tws_aen_complete; in tws_send_scsi_cmd()
748 cmd_pkt = req->cmd_pkt; in tws_send_scsi_cmd()
753 cmd_pkt->cmd.pkt_a.lun_l4__req_id = req->request_id; in tws_send_scsi_cmd()
758 req->length = TWS_SECTOR_SIZE; in tws_send_scsi_cmd()
759 req->data = malloc(TWS_SECTOR_SIZE, M_TWS, M_NOWAIT); in tws_send_scsi_cmd()
760 if ( req->data == NULL ) in tws_send_scsi_cmd()
762 bzero(req->data, TWS_SECTOR_SIZE); in tws_send_scsi_cmd()
763 req->flags = TWS_DIR_IN; in tws_send_scsi_cmd()
765 callout_reset(&req->timeout, (TWS_IO_TIMEOUT * hz), tws_timeout, req); in tws_send_scsi_cmd()
766 error = tws_map_request(sc, req); in tws_send_scsi_cmd()
775 struct tws_request *req; in tws_set_param() local
781 req = tws_get_request(sc, TWS_REQ_TYPE_GETSET_PARAM); in tws_set_param()
782 if ( req == NULL ) { in tws_set_param()
783 TWS_TRACE_DEBUG(sc, "null req", 0, 0); in tws_set_param()
787 req->length = TWS_SECTOR_SIZE; in tws_set_param()
788 req->data = malloc(TWS_SECTOR_SIZE, M_TWS, M_NOWAIT); in tws_set_param()
789 if ( req->data == NULL ) in tws_set_param()
791 bzero(req->data, TWS_SECTOR_SIZE); in tws_set_param()
792 param = (struct tws_getset_param *)req->data; in tws_set_param()
794 req->cb = tws_getset_param_complete; in tws_set_param()
795 req->flags = TWS_DIR_OUT; in tws_set_param()
796 cmd_pkt = req->cmd_pkt; in tws_set_param()
801 cmd->param.request_id = (u_int8_t)req->request_id; in tws_set_param()
812 callout_reset(&req->timeout, (TWS_IOCTL_TIMEOUT * hz), tws_timeout, req); in tws_set_param()
813 error = tws_map_request(sc, req); in tws_set_param()
822 struct tws_request *req; in tws_get_param() local
830 req = tws_get_request(sc, TWS_REQ_TYPE_GETSET_PARAM); in tws_get_param()
831 if ( req == NULL ) { in tws_get_param()
832 TWS_TRACE_DEBUG(sc, "null req", 0, 0); in tws_get_param()
836 req->length = TWS_SECTOR_SIZE; in tws_get_param()
837 req->data = malloc(TWS_SECTOR_SIZE, M_TWS, M_NOWAIT); in tws_get_param()
838 if ( req->data == NULL ) in tws_get_param()
840 bzero(req->data, TWS_SECTOR_SIZE); in tws_get_param()
841 param = (struct tws_getset_param *)req->data; in tws_get_param()
843 req->cb = NULL; in tws_get_param()
844 req->flags = TWS_DIR_IN; in tws_get_param()
845 cmd_pkt = req->cmd_pkt; in tws_get_param()
850 cmd->param.request_id = (u_int8_t)req->request_id; in tws_get_param()
860 error = tws_map_request(sc, req); in tws_get_param()
863 tws_unmap_request(sc, req); in tws_get_param()
872 free(req->data, M_TWS); in tws_get_param()
873 req->state = TWS_REQ_STATE_FREE; in tws_get_param()
879 tws_unmap_request(struct tws_softc *sc, struct tws_request *req) in tws_unmap_request() argument
881 if (req->data != NULL) { in tws_unmap_request()
882 if ( req->flags & TWS_DIR_IN ) in tws_unmap_request()
883 bus_dmamap_sync(sc->data_tag, req->dma_map, in tws_unmap_request()
885 if ( req->flags & TWS_DIR_OUT ) in tws_unmap_request()
886 bus_dmamap_sync(sc->data_tag, req->dma_map, in tws_unmap_request()
889 bus_dmamap_unload(sc->data_tag, req->dma_map); in tws_unmap_request()
895 tws_map_request(struct tws_softc *sc, struct tws_request *req) in tws_map_request() argument
900 if (req->data != NULL) { in tws_map_request()
901 int my_flags = ((req->type == TWS_REQ_TYPE_SCSI_IO) ? BUS_DMA_WAITOK : BUS_DMA_NOWAIT); in tws_map_request()
907 if (req->flags & TWS_DATA_CCB) in tws_map_request()
908 error = bus_dmamap_load_ccb(sc->data_tag, req->dma_map, in tws_map_request()
909 req->data, in tws_map_request()
910 tws_dmamap_data_load_cbfn, req, in tws_map_request()
913 error = bus_dmamap_load(sc->data_tag, req->dma_map, in tws_map_request()
914 req->data, req->length, in tws_map_request()
915 tws_dmamap_data_load_cbfn, req, in tws_map_request()
921 tws_freeze_simq(sc, req); in tws_map_request()
925 error = tws_submit_command(sc, req); in tws_map_request()
934 struct tws_request *req = (struct tws_request *)arg; in tws_dmamap_data_load_cbfn() local
935 struct tws_softc *sc = req->sc; in tws_dmamap_data_load_cbfn()
946 req->error_code = error; in tws_dmamap_data_load_cbfn()
947 req->ccb_ptr->ccb_h.status = CAM_REQ_TOO_BIG; in tws_dmamap_data_load_cbfn()
951 if ( req->flags & TWS_DIR_IN ) in tws_dmamap_data_load_cbfn()
952 bus_dmamap_sync(req->sc->data_tag, req->dma_map, in tws_dmamap_data_load_cbfn()
954 if ( req->flags & TWS_DIR_OUT ) in tws_dmamap_data_load_cbfn()
955 bus_dmamap_sync(req->sc->data_tag, req->dma_map, in tws_dmamap_data_load_cbfn()
958 if ( (req->type == TWS_REQ_TYPE_PASSTHRU && in tws_dmamap_data_load_cbfn()
959 GET_OPCODE(req->cmd_pkt->cmd.pkt_a.res__opcode) != in tws_dmamap_data_load_cbfn()
961 req->type == TWS_REQ_TYPE_GETSET_PARAM) { in tws_dmamap_data_load_cbfn()
962 gcmd = &req->cmd_pkt->cmd.pkt_g.generic; in tws_dmamap_data_load_cbfn()
965 ((req->sc->is64bit && !tws_use_32bit_sgls) ? 4 : 2 ); in tws_dmamap_data_load_cbfn()
966 tws_fill_sg_list(req->sc, (void *)segs, sgl_ptr, sgls); in tws_dmamap_data_load_cbfn()
969 tws_fill_sg_list(req->sc, (void *)segs, in tws_dmamap_data_load_cbfn()
970 (void *)&(req->cmd_pkt->cmd.pkt_a.sg_list), sgls); in tws_dmamap_data_load_cbfn()
971 req->cmd_pkt->cmd.pkt_a.lun_h4__sgl_entries |= sgls ; in tws_dmamap_data_load_cbfn()
975 req->error_code = tws_submit_command(req->sc, req); in tws_dmamap_data_load_cbfn()
1118 struct tws_request *req = (struct tws_request *)arg; in tws_timeout() local
1119 struct tws_softc *sc = req->sc; in tws_timeout()
1121 if ( req->error_code == TWS_REQ_RET_RESET ) { in tws_timeout()
1126 if ( req->error_code == TWS_REQ_RET_RESET ) { in tws_timeout()
1140 if (req->type == TWS_REQ_TYPE_SCSI_IO) { in tws_timeout()
1142 } else if (req->type == TWS_REQ_TYPE_PASSTHRU) { in tws_timeout()
1264 tws_freeze_simq(struct tws_softc *sc, struct tws_request *req) in tws_freeze_simq() argument
1267 if (req->type == TWS_REQ_TYPE_SCSI_IO) { in tws_freeze_simq()
1268 union ccb *ccb = (union ccb *)(req->ccb_ptr); in tws_freeze_simq()