Lines Matching refs:hdr
87 struct sg_io_v4 hdr; member
140 struct sg_io_v4 *hdr, struct bsg_device *bd, in blk_fill_sgv4_hdr_rq() argument
143 if (hdr->request_len > BLK_MAX_CDB) { in blk_fill_sgv4_hdr_rq()
144 rq->cmd = kzalloc(hdr->request_len, GFP_KERNEL); in blk_fill_sgv4_hdr_rq()
149 if (copy_from_user(rq->cmd, (void __user *)(unsigned long)hdr->request, in blk_fill_sgv4_hdr_rq()
150 hdr->request_len)) in blk_fill_sgv4_hdr_rq()
153 if (hdr->subprotocol == BSG_SUB_PROTOCOL_SCSI_CMD) { in blk_fill_sgv4_hdr_rq()
162 rq->cmd_len = hdr->request_len; in blk_fill_sgv4_hdr_rq()
164 rq->timeout = msecs_to_jiffies(hdr->timeout); in blk_fill_sgv4_hdr_rq()
179 bsg_validate_sgv4_hdr(struct request_queue *q, struct sg_io_v4 *hdr, int *rw) in bsg_validate_sgv4_hdr() argument
183 if (hdr->guard != 'Q') in bsg_validate_sgv4_hdr()
186 switch (hdr->protocol) { in bsg_validate_sgv4_hdr()
188 switch (hdr->subprotocol) { in bsg_validate_sgv4_hdr()
200 *rw = hdr->dout_xfer_len ? WRITE : READ; in bsg_validate_sgv4_hdr()
208 bsg_map_hdr(struct bsg_device *bd, struct sg_io_v4 *hdr, fmode_t has_write_perm, in bsg_map_hdr() argument
225 dprintk("map hdr %llx/%u %llx/%u\n", (unsigned long long) hdr->dout_xferp, in bsg_map_hdr()
226 hdr->dout_xfer_len, (unsigned long long) hdr->din_xferp, in bsg_map_hdr()
227 hdr->din_xfer_len); in bsg_map_hdr()
229 ret = bsg_validate_sgv4_hdr(q, hdr, &rw); in bsg_map_hdr()
241 ret = blk_fill_sgv4_hdr_rq(q, rq, hdr, bd, has_write_perm); in bsg_map_hdr()
245 if (rw == WRITE && hdr->din_xfer_len) { in bsg_map_hdr()
260 dxferp = (void __user *)(unsigned long)hdr->din_xferp; in bsg_map_hdr()
262 hdr->din_xfer_len, GFP_KERNEL); in bsg_map_hdr()
267 if (hdr->dout_xfer_len) { in bsg_map_hdr()
268 dxfer_len = hdr->dout_xfer_len; in bsg_map_hdr()
269 dxferp = (void __user *)(unsigned long)hdr->dout_xferp; in bsg_map_hdr()
270 } else if (hdr->din_xfer_len) { in bsg_map_hdr()
271 dxfer_len = hdr->din_xfer_len; in bsg_map_hdr()
272 dxferp = (void __user *)(unsigned long)hdr->din_xferp; in bsg_map_hdr()
311 bc->hdr.duration = jiffies_to_msecs(jiffies - bc->hdr.duration); in bsg_rq_end_io()
328 int at_head = (0 == (bc->hdr.flags & BSG_FLAG_Q_AT_TAIL)); in bsg_add_command()
337 bc->hdr.duration = jiffies; in bsg_add_command()
393 static int blk_complete_sgv4_hdr_rq(struct request *rq, struct sg_io_v4 *hdr, in blk_complete_sgv4_hdr_rq() argument
402 hdr->device_status = rq->errors & 0xff; in blk_complete_sgv4_hdr_rq()
403 hdr->transport_status = host_byte(rq->errors); in blk_complete_sgv4_hdr_rq()
404 hdr->driver_status = driver_byte(rq->errors); in blk_complete_sgv4_hdr_rq()
405 hdr->info = 0; in blk_complete_sgv4_hdr_rq()
406 if (hdr->device_status || hdr->transport_status || hdr->driver_status) in blk_complete_sgv4_hdr_rq()
407 hdr->info |= SG_INFO_CHECK; in blk_complete_sgv4_hdr_rq()
408 hdr->response_len = 0; in blk_complete_sgv4_hdr_rq()
410 if (rq->sense_len && hdr->response) { in blk_complete_sgv4_hdr_rq()
411 int len = min_t(unsigned int, hdr->max_response_len, in blk_complete_sgv4_hdr_rq()
414 ret = copy_to_user((void __user *)(unsigned long)hdr->response, in blk_complete_sgv4_hdr_rq()
417 hdr->response_len = len; in blk_complete_sgv4_hdr_rq()
423 hdr->dout_resid = rq->resid_len; in blk_complete_sgv4_hdr_rq()
424 hdr->din_resid = rq->next_rq->resid_len; in blk_complete_sgv4_hdr_rq()
428 hdr->din_resid = rq->resid_len; in blk_complete_sgv4_hdr_rq()
430 hdr->dout_resid = rq->resid_len; in blk_complete_sgv4_hdr_rq()
501 tret = blk_complete_sgv4_hdr_rq(bc->rq, &bc->hdr, bc->bio, in bsg_complete_all_commands()
536 ret = blk_complete_sgv4_hdr_rq(bc->rq, &bc->hdr, bc->bio, in __bsg_read()
539 if (copy_to_user(buf, &bc->hdr, sizeof(bc->hdr))) in __bsg_read()
620 if (copy_from_user(&bc->hdr, buf, sizeof(bc->hdr))) { in __bsg_write()
628 rq = bsg_map_hdr(bd, &bc->hdr, has_write_perm, bc->sense); in __bsg_write()
909 struct sg_io_v4 hdr; in bsg_ioctl() local
913 if (copy_from_user(&hdr, uarg, sizeof(hdr))) in bsg_ioctl()
916 rq = bsg_map_hdr(bd, &hdr, file->f_mode & FMODE_WRITE, sense); in bsg_ioctl()
924 at_head = (0 == (hdr.flags & BSG_FLAG_Q_AT_TAIL)); in bsg_ioctl()
926 ret = blk_complete_sgv4_hdr_rq(rq, &hdr, bio, bidi_bio); in bsg_ioctl()
928 if (copy_to_user(uarg, &hdr, sizeof(hdr))) in bsg_ioctl()