Lines Matching refs:hdr
64 static int bsg_scsi_check_proto(struct sg_io_v4 *hdr) in bsg_scsi_check_proto() argument
66 if (hdr->protocol != BSG_PROTOCOL_SCSI || in bsg_scsi_check_proto()
67 hdr->subprotocol != BSG_SUB_PROTOCOL_SCSI_CMD) in bsg_scsi_check_proto()
72 static int bsg_scsi_fill_hdr(struct request *rq, struct sg_io_v4 *hdr, in bsg_scsi_fill_hdr() argument
77 sreq->cmd_len = hdr->request_len; in bsg_scsi_fill_hdr()
84 if (copy_from_user(sreq->cmd, uptr64(hdr->request), sreq->cmd_len)) in bsg_scsi_fill_hdr()
91 static int bsg_scsi_complete_rq(struct request *rq, struct sg_io_v4 *hdr) in bsg_scsi_complete_rq() argument
99 hdr->device_status = sreq->result & 0xff; in bsg_scsi_complete_rq()
100 hdr->transport_status = host_byte(sreq->result); in bsg_scsi_complete_rq()
101 hdr->driver_status = driver_byte(sreq->result); in bsg_scsi_complete_rq()
102 hdr->info = 0; in bsg_scsi_complete_rq()
103 if (hdr->device_status || hdr->transport_status || hdr->driver_status) in bsg_scsi_complete_rq()
104 hdr->info |= SG_INFO_CHECK; in bsg_scsi_complete_rq()
105 hdr->response_len = 0; in bsg_scsi_complete_rq()
107 if (sreq->sense_len && hdr->response) { in bsg_scsi_complete_rq()
108 int len = min_t(unsigned int, hdr->max_response_len, in bsg_scsi_complete_rq()
111 if (copy_to_user(uptr64(hdr->response), sreq->sense, len)) in bsg_scsi_complete_rq()
114 hdr->response_len = len; in bsg_scsi_complete_rq()
118 hdr->dout_resid = sreq->resid_len; in bsg_scsi_complete_rq()
119 hdr->din_resid = scsi_req(rq->next_rq)->resid_len; in bsg_scsi_complete_rq()
121 hdr->din_resid = sreq->resid_len; in bsg_scsi_complete_rq()
123 hdr->dout_resid = sreq->resid_len; in bsg_scsi_complete_rq()
142 bsg_map_hdr(struct request_queue *q, struct sg_io_v4 *hdr, fmode_t mode) in bsg_map_hdr() argument
150 if (hdr->guard != 'Q') in bsg_map_hdr()
153 ret = q->bsg_dev.ops->check_proto(hdr); in bsg_map_hdr()
157 rq = blk_get_request(q, hdr->dout_xfer_len ? in bsg_map_hdr()
162 ret = q->bsg_dev.ops->fill_hdr(rq, hdr, mode); in bsg_map_hdr()
166 rq->timeout = msecs_to_jiffies(hdr->timeout); in bsg_map_hdr()
174 if (hdr->dout_xfer_len && hdr->din_xfer_len) { in bsg_map_hdr()
187 ret = blk_rq_map_user(q, next_rq, NULL, uptr64(hdr->din_xferp), in bsg_map_hdr()
188 hdr->din_xfer_len, GFP_KERNEL); in bsg_map_hdr()
193 if (hdr->dout_xfer_len) { in bsg_map_hdr()
194 ret = blk_rq_map_user(q, rq, NULL, uptr64(hdr->dout_xferp), in bsg_map_hdr()
195 hdr->dout_xfer_len, GFP_KERNEL); in bsg_map_hdr()
196 } else if (hdr->din_xfer_len) { in bsg_map_hdr()
197 ret = blk_rq_map_user(q, rq, NULL, uptr64(hdr->din_xferp), in bsg_map_hdr()
198 hdr->din_xfer_len, GFP_KERNEL); in bsg_map_hdr()
217 static int blk_complete_sgv4_hdr_rq(struct request *rq, struct sg_io_v4 *hdr, in blk_complete_sgv4_hdr_rq() argument
222 ret = rq->q->bsg_dev.ops->complete_rq(rq, hdr); in blk_complete_sgv4_hdr_rq()
410 struct sg_io_v4 hdr; in bsg_ioctl() local
413 if (copy_from_user(&hdr, uarg, sizeof(hdr))) in bsg_ioctl()
416 rq = bsg_map_hdr(bd->queue, &hdr, file->f_mode); in bsg_ioctl()
424 at_head = (0 == (hdr.flags & BSG_FLAG_Q_AT_TAIL)); in bsg_ioctl()
426 ret = blk_complete_sgv4_hdr_rq(rq, &hdr, bio, bidi_bio); in bsg_ioctl()
428 if (copy_to_user(uarg, &hdr, sizeof(hdr))) in bsg_ioctl()