Lines Matching full:hdr
365 struct sg_io_hdr *hdr, bool open_for_write) in scsi_fill_sghdr_rq() argument
369 if (hdr->cmd_len < 6) in scsi_fill_sghdr_rq()
371 if (copy_from_user(scmd->cmnd, hdr->cmdp, hdr->cmd_len)) in scsi_fill_sghdr_rq()
375 scmd->cmd_len = hdr->cmd_len; in scsi_fill_sghdr_rq()
377 rq->timeout = msecs_to_jiffies(hdr->timeout); in scsi_fill_sghdr_rq()
388 static int scsi_complete_sghdr_rq(struct request *rq, struct sg_io_hdr *hdr, in scsi_complete_sghdr_rq() argument
397 hdr->status = scmd->result & 0xff; in scsi_complete_sghdr_rq()
398 hdr->masked_status = sg_status_byte(scmd->result); in scsi_complete_sghdr_rq()
399 hdr->msg_status = COMMAND_COMPLETE; in scsi_complete_sghdr_rq()
400 hdr->host_status = host_byte(scmd->result); in scsi_complete_sghdr_rq()
401 hdr->driver_status = 0; in scsi_complete_sghdr_rq()
402 if (scsi_status_is_check_condition(hdr->status)) in scsi_complete_sghdr_rq()
403 hdr->driver_status = DRIVER_SENSE; in scsi_complete_sghdr_rq()
404 hdr->info = 0; in scsi_complete_sghdr_rq()
405 if (hdr->masked_status || hdr->host_status || hdr->driver_status) in scsi_complete_sghdr_rq()
406 hdr->info |= SG_INFO_CHECK; in scsi_complete_sghdr_rq()
407 hdr->resid = scmd->resid_len; in scsi_complete_sghdr_rq()
408 hdr->sb_len_wr = 0; in scsi_complete_sghdr_rq()
410 if (scmd->sense_len && hdr->sbp) { in scsi_complete_sghdr_rq()
411 int len = min((unsigned int) hdr->mx_sb_len, scmd->sense_len); in scsi_complete_sghdr_rq()
413 if (!copy_to_user(hdr->sbp, scmd->sense_buffer, len)) in scsi_complete_sghdr_rq()
414 hdr->sb_len_wr = len; in scsi_complete_sghdr_rq()
426 static int sg_io(struct scsi_device *sdev, struct sg_io_hdr *hdr, in sg_io() argument
437 if (hdr->interface_id != 'S') in sg_io()
440 if (hdr->dxfer_len > (queue_max_hw_sectors(sdev->request_queue) << 9)) in sg_io()
443 if (hdr->dxfer_len) in sg_io()
444 switch (hdr->dxfer_direction) { in sg_io()
454 if (hdr->flags & SG_FLAG_Q_AT_HEAD) in sg_io()
463 if (hdr->cmd_len > sizeof(scmd->cmnd)) { in sg_io()
468 ret = scsi_fill_sghdr_rq(sdev, rq, hdr, open_for_write); in sg_io()
472 ret = blk_rq_map_user_io(rq, NULL, hdr->dxferp, hdr->dxfer_len, in sg_io()
473 GFP_KERNEL, hdr->iovec_count && hdr->dxfer_len, in sg_io()
474 hdr->iovec_count, 0, rq_data_dir(rq)); in sg_io()
485 hdr->duration = jiffies_to_msecs(jiffies - start_time); in sg_io()
487 ret = scsi_complete_sghdr_rq(rq, hdr, bio); in sg_io()
633 int put_sg_io_hdr(const struct sg_io_hdr *hdr, void __user *argp) in put_sg_io_hdr() argument
638 .interface_id = hdr->interface_id, in put_sg_io_hdr()
639 .dxfer_direction = hdr->dxfer_direction, in put_sg_io_hdr()
640 .cmd_len = hdr->cmd_len, in put_sg_io_hdr()
641 .mx_sb_len = hdr->mx_sb_len, in put_sg_io_hdr()
642 .iovec_count = hdr->iovec_count, in put_sg_io_hdr()
643 .dxfer_len = hdr->dxfer_len, in put_sg_io_hdr()
644 .dxferp = (uintptr_t)hdr->dxferp, in put_sg_io_hdr()
645 .cmdp = (uintptr_t)hdr->cmdp, in put_sg_io_hdr()
646 .sbp = (uintptr_t)hdr->sbp, in put_sg_io_hdr()
647 .timeout = hdr->timeout, in put_sg_io_hdr()
648 .flags = hdr->flags, in put_sg_io_hdr()
649 .pack_id = hdr->pack_id, in put_sg_io_hdr()
650 .usr_ptr = (uintptr_t)hdr->usr_ptr, in put_sg_io_hdr()
651 .status = hdr->status, in put_sg_io_hdr()
652 .masked_status = hdr->masked_status, in put_sg_io_hdr()
653 .msg_status = hdr->msg_status, in put_sg_io_hdr()
654 .sb_len_wr = hdr->sb_len_wr, in put_sg_io_hdr()
655 .host_status = hdr->host_status, in put_sg_io_hdr()
656 .driver_status = hdr->driver_status, in put_sg_io_hdr()
657 .resid = hdr->resid, in put_sg_io_hdr()
658 .duration = hdr->duration, in put_sg_io_hdr()
659 .info = hdr->info, in put_sg_io_hdr()
669 if (copy_to_user(argp, hdr, sizeof(*hdr))) in put_sg_io_hdr()
676 int get_sg_io_hdr(struct sg_io_hdr *hdr, const void __user *argp) in get_sg_io_hdr() argument
685 *hdr = (struct sg_io_hdr) { in get_sg_io_hdr()
714 if (copy_from_user(hdr, argp, sizeof(*hdr))) in get_sg_io_hdr()
799 struct sg_io_hdr hdr; in scsi_cdrom_send_packet() local
807 memset(&hdr, 0, sizeof(hdr)); in scsi_cdrom_send_packet()
808 hdr.interface_id = 'S'; in scsi_cdrom_send_packet()
809 hdr.cmd_len = sizeof(cgc.cmd); in scsi_cdrom_send_packet()
810 hdr.dxfer_len = cgc.buflen; in scsi_cdrom_send_packet()
813 hdr.dxfer_direction = SG_DXFER_UNKNOWN; in scsi_cdrom_send_packet()
816 hdr.dxfer_direction = SG_DXFER_TO_DEV; in scsi_cdrom_send_packet()
819 hdr.dxfer_direction = SG_DXFER_FROM_DEV; in scsi_cdrom_send_packet()
822 hdr.dxfer_direction = SG_DXFER_NONE; in scsi_cdrom_send_packet()
828 hdr.dxferp = cgc.buffer; in scsi_cdrom_send_packet()
829 hdr.sbp = cgc.sense; in scsi_cdrom_send_packet()
830 if (hdr.sbp) in scsi_cdrom_send_packet()
831 hdr.mx_sb_len = sizeof(struct request_sense); in scsi_cdrom_send_packet()
832 hdr.timeout = jiffies_to_msecs(cgc.timeout); in scsi_cdrom_send_packet()
833 hdr.cmdp = ((struct cdrom_generic_command __user *) arg)->cmd; in scsi_cdrom_send_packet()
834 hdr.cmd_len = sizeof(cgc.cmd); in scsi_cdrom_send_packet()
836 err = sg_io(sdev, &hdr, open_for_write); in scsi_cdrom_send_packet()
840 if (hdr.status) in scsi_cdrom_send_packet()
844 cgc.buflen = hdr.resid; in scsi_cdrom_send_packet()
854 struct sg_io_hdr hdr; in scsi_ioctl_sg_io() local
857 error = get_sg_io_hdr(&hdr, argp); in scsi_ioctl_sg_io()
860 error = sg_io(sdev, &hdr, open_for_write); in scsi_ioctl_sg_io()
863 if (put_sg_io_hdr(&hdr, argp)) in scsi_ioctl_sg_io()