static void tws_drain_reserved_reqs(struct tws_softc *sc) { struct tws_request *r; r = &sc->reqs[1]; if ( r->state != TWS_REQ_STATE_FREE ) { TWS_TRACE_DEBUG(sc, "drained aen req", 0, 0); callout_stop(&r->thandle); tws_unmap_request(sc, r); kfree(r->data, M_TWS); lockmgr(&sc->gen_lock, LK_EXCLUSIVE); r->state = TWS_REQ_STATE_FREE; lockmgr(&sc->gen_lock, LK_RELEASE); } r = &sc->reqs[2]; if ( r->state != TWS_REQ_STATE_FREE ) { TWS_TRACE_DEBUG(sc, "drained passthru req", 0, 0); r->error_code = TWS_REQ_REQUEUE; tws_passthru_complete(r); } r = &sc->reqs[3]; if ( r->state != TWS_REQ_STATE_FREE ) { TWS_TRACE_DEBUG(sc, "drained set param req", 0, 0); tws_getset_param_complete(r); } }
static void tws_passthru_err_complete(struct tws_request *req, struct tws_command_header *hdr) { TWS_TRACE_DEBUG(req->sc, "entry", hdr, req->request_id); req->error_code = hdr->status_block.error; memcpy(&(req->cmd_pkt->hdr), hdr, sizeof(struct tws_command_header)); tws_passthru_complete(req); }