Lines Matching refs:req

57 static void tws_scsi_complete(struct tws_request *req);
61 void tws_unmap_request(struct tws_softc *sc, struct tws_request *req);
62 int32_t tws_map_request(struct tws_softc *sc, struct tws_request *req);
78 static void tws_scsi_err_complete(struct tws_request *req,
80 static void tws_passthru_err_complete(struct tws_request *req,
89 void tws_cmd_complete(struct tws_request *req);
90 void tws_aen_complete(struct tws_request *req);
92 void tws_getset_param_complete(struct tws_request *req);
101 extern void *tws_release_request(struct tws_request *req);
102 extern int tws_submit_command(struct tws_softc *sc, struct tws_request *req);
105 extern void tws_q_insert_tail(struct tws_softc *sc, struct tws_request *req,
108 struct tws_request *req, u_int8_t q_type );
117 extern void tws_passthru_complete(struct tws_request *req);
357 tws_scsi_complete(struct tws_request *req) in tws_scsi_complete() argument
359 struct tws_softc *sc = req->sc; in tws_scsi_complete()
362 tws_q_remove_request(sc, req, TWS_BUSY_Q); in tws_scsi_complete()
365 callout_stop(req->ccb_ptr->ccb_h.timeout_ch); in tws_scsi_complete()
366 tws_unmap_request(req->sc, req); in tws_scsi_complete()
370 req->ccb_ptr->ccb_h.status = CAM_REQ_CMP; in tws_scsi_complete()
371 xpt_done(req->ccb_ptr); in tws_scsi_complete()
375 tws_q_insert_tail(sc, req, TWS_FREE_Q); in tws_scsi_complete()
381 tws_getset_param_complete(struct tws_request *req) in tws_getset_param_complete() argument
383 struct tws_softc *sc = req->sc; in tws_getset_param_complete()
385 TWS_TRACE_DEBUG(sc, "getset complete", req, req->request_id); in tws_getset_param_complete()
387 callout_stop(&req->thandle); in tws_getset_param_complete()
388 tws_unmap_request(sc, req); in tws_getset_param_complete()
390 kfree(req->data, M_TWS); in tws_getset_param_complete()
393 req->state = TWS_REQ_STATE_FREE; in tws_getset_param_complete()
399 tws_aen_complete(struct tws_request *req) in tws_aen_complete() argument
401 struct tws_softc *sc = req->sc; in tws_aen_complete()
406 TWS_TRACE_DEBUG(sc, "aen complete", 0, req->request_id); in tws_aen_complete()
408 callout_stop(&req->thandle); in tws_aen_complete()
409 tws_unmap_request(sc, req); in tws_aen_complete()
411 sense = (struct tws_command_header *)req->data; in tws_aen_complete()
466 kfree(req->data, M_TWS); in tws_aen_complete()
469 req->state = TWS_REQ_STATE_FREE; in tws_aen_complete()
481 tws_cmd_complete(struct tws_request *req) in tws_cmd_complete() argument
483 struct tws_softc *sc = req->sc; in tws_cmd_complete()
485 callout_stop(req->ccb_ptr->ccb_h.timeout_ch); in tws_cmd_complete()
486 tws_unmap_request(sc, req); in tws_cmd_complete()
496 struct tws_request *req; in tws_err_complete() local
513 req = &sc->reqs[req_id]; in tws_err_complete()
514 TWS_TRACE_DEBUG(sc, "req, id", req, req_id); in tws_err_complete()
515 if ( req->error_code != TWS_REQ_SUBMIT_SUCCESS ) in tws_err_complete()
516 TWS_TRACE_DEBUG(sc, "submit failure?", 0, req->error_code); in tws_err_complete()
519 switch (req->type) { in tws_err_complete()
521 tws_passthru_err_complete(req, hdr); in tws_err_complete()
524 tws_getset_param_complete(req); in tws_err_complete()
527 tws_scsi_err_complete(req, hdr); in tws_err_complete()
550 tws_scsi_err_complete(struct tws_request *req, struct tws_command_header *hdr) in tws_scsi_err_complete() argument
553 struct tws_softc *sc = req->sc; in tws_scsi_err_complete()
554 union ccb *ccb = req->ccb_ptr; in tws_scsi_err_complete()
557 req->cmd_pkt->cmd.pkt_a.status); in tws_scsi_err_complete()
589 ccb->csio.scsi_status = req->cmd_pkt->cmd.pkt_a.status; in tws_scsi_err_complete()
596 callout_stop(req->ccb_ptr->ccb_h.timeout_ch); in tws_scsi_err_complete()
597 tws_unmap_request(req->sc, req); in tws_scsi_err_complete()
599 tws_q_remove_request(sc, req, TWS_BUSY_Q); in tws_scsi_err_complete()
600 tws_q_insert_tail(sc, req, TWS_FREE_Q); in tws_scsi_err_complete()
606 tws_passthru_err_complete(struct tws_request *req, in tws_passthru_err_complete() argument
610 TWS_TRACE_DEBUG(req->sc, "entry", hdr, req->request_id); in tws_passthru_err_complete()
611 req->error_code = hdr->status_block.error; in tws_passthru_err_complete()
612 memcpy(&(req->cmd_pkt->hdr), hdr, sizeof(struct tws_command_header)); in tws_passthru_err_complete()
613 tws_passthru_complete(req); in tws_passthru_err_complete()
620 struct tws_request *req; in tws_drain_busy_queue() local
624 req = tws_q_remove_tail(sc, TWS_BUSY_Q); in tws_drain_busy_queue()
626 while ( req ) { in tws_drain_busy_queue()
627 callout_stop(req->ccb_ptr->ccb_h.timeout_ch); in tws_drain_busy_queue()
628 tws_unmap_request(req->sc, req); in tws_drain_busy_queue()
630 TWS_TRACE_DEBUG(sc, "drained", 0, req->request_id); in tws_drain_busy_queue()
633 req->ccb_ptr->ccb_h.status = CAM_REQUEUE_REQ; in tws_drain_busy_queue()
634 xpt_done(req->ccb_ptr); in tws_drain_busy_queue()
638 tws_q_insert_tail(sc, req, TWS_FREE_Q); in tws_drain_busy_queue()
639 req = tws_q_remove_tail(sc, TWS_BUSY_Q); in tws_drain_busy_queue()
686 struct tws_request *req; in tws_execute_scsi() local
719 req = tws_get_request(sc, TWS_SCSI_IO_REQ); in tws_execute_scsi()
720 if ( !req ) { in tws_execute_scsi()
730 req->flags = TWS_DIR_IN; in tws_execute_scsi()
732 req->flags = TWS_DIR_OUT; in tws_execute_scsi()
734 req->flags = TWS_DIR_NONE; /* no data */ in tws_execute_scsi()
737 req->type = TWS_SCSI_IO_REQ; in tws_execute_scsi()
738 req->cb = tws_scsi_complete; in tws_execute_scsi()
740 cmd_pkt = req->cmd_pkt; in tws_execute_scsi()
750 cmd_pkt->cmd.pkt_a.lun_l4__req_id = lun | req->request_id; in tws_execute_scsi()
771 tws_release_request(req); in tws_execute_scsi()
777 req->length = csio->dxfer_len; in tws_execute_scsi()
778 if (req->length) { in tws_execute_scsi()
779 req->data = csio->data_ptr; in tws_execute_scsi()
785 tws_release_request(req); in tws_execute_scsi()
793 tws_release_request(req); in tws_execute_scsi()
801 req->ccb_ptr = ccb; in tws_execute_scsi()
808 tws_timeout, req); in tws_execute_scsi()
809 error = tws_map_request(sc, req); in tws_execute_scsi()
818 struct tws_request *req; in tws_send_scsi_cmd() local
823 req = tws_get_request(sc, TWS_AEN_FETCH_REQ); in tws_send_scsi_cmd()
825 if ( req == NULL ) in tws_send_scsi_cmd()
828 req->type = TWS_AEN_FETCH_REQ; in tws_send_scsi_cmd()
829 req->cb = tws_aen_complete; in tws_send_scsi_cmd()
831 cmd_pkt = req->cmd_pkt; in tws_send_scsi_cmd()
836 cmd_pkt->cmd.pkt_a.lun_l4__req_id = req->request_id; in tws_send_scsi_cmd()
841 req->length = TWS_SECTOR_SIZE; in tws_send_scsi_cmd()
842 req->data = kmalloc(TWS_SECTOR_SIZE, M_TWS, M_NOWAIT | M_ZERO); in tws_send_scsi_cmd()
843 if ( req->data == NULL ) in tws_send_scsi_cmd()
845 req->flags = TWS_DIR_IN; in tws_send_scsi_cmd()
847 callout_reset(&req->thandle, (TWS_IO_TIMEOUT * hz), tws_timeout, req); in tws_send_scsi_cmd()
848 error = tws_map_request(sc, req); in tws_send_scsi_cmd()
857 struct tws_request *req; in tws_set_param() local
863 req = tws_get_request(sc, TWS_GETSET_PARAM_REQ); in tws_set_param()
864 if ( req == NULL ) { in tws_set_param()
869 req->length = TWS_SECTOR_SIZE; in tws_set_param()
870 req->data = kmalloc(TWS_SECTOR_SIZE, M_TWS, M_NOWAIT | M_ZERO); in tws_set_param()
871 if ( req->data == NULL ) in tws_set_param()
873 param = (struct tws_getset_param *)req->data; in tws_set_param()
875 req->cb = tws_getset_param_complete; in tws_set_param()
876 req->flags = TWS_DIR_OUT; in tws_set_param()
877 cmd_pkt = req->cmd_pkt; in tws_set_param()
882 cmd->param.request_id = (u_int8_t)req->request_id; in tws_set_param()
893 callout_reset(&req->thandle, (TWS_IO_TIMEOUT * hz), tws_timeout, req); in tws_set_param()
894 error = tws_map_request(sc, req); in tws_set_param()
903 struct tws_request *req; in tws_get_param() local
912 req = tws_get_request(sc, TWS_GETSET_PARAM_REQ); in tws_get_param()
913 if ( req == NULL ) { in tws_get_param()
918 req->length = TWS_SECTOR_SIZE; in tws_get_param()
919 req->data = kmalloc(TWS_SECTOR_SIZE, M_TWS, M_NOWAIT | M_ZERO); in tws_get_param()
920 if ( req->data == NULL ) in tws_get_param()
922 param = (struct tws_getset_param *)req->data; in tws_get_param()
924 req->cb = NULL; in tws_get_param()
925 req->flags = TWS_DIR_IN; in tws_get_param()
926 cmd_pkt = req->cmd_pkt; in tws_get_param()
931 cmd->param.request_id = (u_int8_t)req->request_id; in tws_get_param()
941 tws_map_request(sc, req); in tws_get_param()
943 tws_unmap_request(sc, req); in tws_get_param()
952 kfree(req->data, M_TWS); in tws_get_param()
954 req->state = TWS_REQ_STATE_FREE; in tws_get_param()
961 tws_unmap_request(struct tws_softc *sc, struct tws_request *req) in tws_unmap_request() argument
964 if (req->data != NULL) { in tws_unmap_request()
965 if ( req->flags & TWS_DIR_IN ) in tws_unmap_request()
966 bus_dmamap_sync(sc->data_tag, req->dma_map, in tws_unmap_request()
968 if ( req->flags & TWS_DIR_OUT ) in tws_unmap_request()
969 bus_dmamap_sync(sc->data_tag, req->dma_map, in tws_unmap_request()
972 bus_dmamap_unload(sc->data_tag, req->dma_map); in tws_unmap_request()
978 tws_map_request(struct tws_softc *sc, struct tws_request *req) in tws_map_request() argument
984 if (req->data != NULL) { in tws_map_request()
989 error = bus_dmamap_load(sc->data_tag, req->dma_map, in tws_map_request()
990 req->data, req->length, in tws_map_request()
991 tws_dmamap_data_load_cbfn, req, in tws_map_request()
1001 error = tws_submit_command(sc, req); in tws_map_request()
1003 req->error_code = error; in tws_map_request()
1013 struct tws_request *req = (struct tws_request *)arg; in tws_dmamap_data_load_cbfn() local
1014 struct tws_softc *sc = req->sc; in tws_dmamap_data_load_cbfn()
1023 if ( req->flags & TWS_DIR_IN ) in tws_dmamap_data_load_cbfn()
1024 bus_dmamap_sync(req->sc->data_tag, req->dma_map, in tws_dmamap_data_load_cbfn()
1026 if ( req->flags & TWS_DIR_OUT ) in tws_dmamap_data_load_cbfn()
1027 bus_dmamap_sync(req->sc->data_tag, req->dma_map, in tws_dmamap_data_load_cbfn()
1030 if ( (req->type == TWS_PASSTHRU_REQ && in tws_dmamap_data_load_cbfn()
1031 GET_OPCODE(req->cmd_pkt->cmd.pkt_a.res__opcode) != in tws_dmamap_data_load_cbfn()
1033 req->type == TWS_GETSET_PARAM_REQ) { in tws_dmamap_data_load_cbfn()
1034 gcmd = &req->cmd_pkt->cmd.pkt_g.generic; in tws_dmamap_data_load_cbfn()
1037 ((req->sc->is64bit && !tws_use_32bit_sgls) ? 4 :2 ); in tws_dmamap_data_load_cbfn()
1038 tws_fill_sg_list(req->sc, segs, sgl_ptr, sgls); in tws_dmamap_data_load_cbfn()
1041 tws_fill_sg_list(req->sc, segs, in tws_dmamap_data_load_cbfn()
1042 (void *)req->cmd_pkt->cmd.pkt_a.sg_list, sgls); in tws_dmamap_data_load_cbfn()
1043 req->cmd_pkt->cmd.pkt_a.lun_h4__sgl_entries |= sgls ; in tws_dmamap_data_load_cbfn()
1048 req->error_code = tws_submit_command(req->sc, req); in tws_dmamap_data_load_cbfn()
1187 struct tws_request *req = (struct tws_request *)arg; in tws_timeout() local
1188 struct tws_softc *sc = req->sc; in tws_timeout()