Lines Matching refs:req

45 void tws_passthru_complete(struct tws_request *req);
56 extern int32_t tws_map_request(struct tws_softc *sc, struct tws_request *req);
57 extern void tws_unmap_request(struct tws_softc *sc, struct tws_request *req);
90 struct tws_request *req;
108 req = tws_get_request(sc, TWS_REQ_TYPE_PASSTHRU);
109 if ( !req ) {
123 req->length = buffer_length;
124 TWS_TRACE_DEBUG(sc, "datal,rid", req->length, req->request_id);
125 if ( req->length ) {
126 req->data = sc->ioctl_data_mem;
127 req->dma_map = sc->ioctl_data_map;
132 error = copyin(ubuf->pdata, req->data, req->length);
138 req->flags = TWS_DIR_IN | TWS_DIR_OUT;
139 req->cb = tws_passthru_complete;
141 memcpy(&req->cmd_pkt->cmd, &ubuf->cmd_pkt.cmd,
144 if ( GET_OPCODE(req->cmd_pkt->cmd.pkt_a.res__opcode) ==
146 lun4 = req->cmd_pkt->cmd.pkt_a.lun_l4__req_id & 0xF000;
147 req->cmd_pkt->cmd.pkt_a.lun_l4__req_id = lun4 | req->request_id;
149 req->cmd_pkt->cmd.pkt_g.generic.request_id = (u_int8_t) req->request_id;
155 error = tws_map_request(sc, req);
161 if ( req->state == TWS_REQ_STATE_COMPLETE ) {
162 ubuf->driver_pkt.os_status = req->error_code;
167 error = mtx_sleep(req, &sc->gen_lock, 0, "tws_passthru", TWS_IOCTL_TIMEOUT*hz);
169 if (( req->state != TWS_REQ_STATE_COMPLETE ) && ( error == EWOULDBLOCK )) {
170 TWS_TRACE_DEBUG(sc, "msleep timeout", error, req->request_id);
171 tws_timeout((void*) req);
175 if ( req->error_code == TWS_REQ_RET_RESET ) {
177 req->error_code = EBUSY;
178 TWS_TRACE_DEBUG(sc, "ioctl reset", error, req->request_id);
181 tws_unmap_request(sc, req);
186 memcpy(&ubuf->cmd_pkt.hdr, &req->cmd_pkt->hdr, sizeof(struct tws_command_apache));
187 memcpy(&ubuf->cmd_pkt.cmd, &req->cmd_pkt->cmd, sizeof(struct tws_command_apache));
190 if ( req->length ) {
195 error = copyout(req->data, ubuf->pdata, ubuf->driver_pkt.buffer_length);
201 if ( req->error_code != TWS_REQ_RET_SUBMIT_SUCCESS )
207 req->state = TWS_REQ_STATE_FREE;
215 tws_passthru_complete(struct tws_request *req)
217 req->state = TWS_REQ_STATE_COMPLETE;
218 wakeup_one(req);