Lines 553-558
sgioctl(struct cdev *dev, u_long cmd, caddr_t arg, int flag, struct thread *td)
Link Here
|
553 |
} |
553 |
} |
554 |
|
554 |
|
555 |
if (req->dxfer_len > MAXPHYS) { |
555 |
if (req->dxfer_len > MAXPHYS) { |
|
|
556 |
printf("%s: dxfer_len (%u) > MAXPHYS (%u)\n", |
557 |
__func__, req->dxfer_len, MAXPHYS); |
556 |
error = EINVAL; |
558 |
error = EINVAL; |
557 |
break; |
559 |
break; |
558 |
} |
560 |
} |
Lines 578-584
sgioctl(struct cdev *dev, u_long cmd, caddr_t arg, int flag, struct thread *td)
Link Here
|
578 |
dir = CAM_DIR_IN; |
580 |
dir = CAM_DIR_IN; |
579 |
break; |
581 |
break; |
580 |
case SG_DXFER_TO_FROM_DEV: |
582 |
case SG_DXFER_TO_FROM_DEV: |
581 |
dir = CAM_DIR_BOTH; |
583 |
dir = CAM_DIR_IN | CAM_DIR_OUT; |
582 |
break; |
584 |
break; |
583 |
case SG_DXFER_NONE: |
585 |
case SG_DXFER_NONE: |
584 |
default: |
586 |
default: |
Lines 586-592
sgioctl(struct cdev *dev, u_long cmd, caddr_t arg, int flag, struct thread *td)
Link Here
|
586 |
break; |
588 |
break; |
587 |
} |
589 |
} |
588 |
|
590 |
|
589 |
if (dir == CAM_DIR_IN || dir == CAM_DIR_BOTH) { |
591 |
if (dir & CAM_DIR_IN) { |
590 |
error = copyin(req->dxferp, data_ptr, req->dxfer_len); |
592 |
error = copyin(req->dxferp, data_ptr, req->dxfer_len); |
591 |
if (error) { |
593 |
if (error) { |
592 |
free(data_ptr, M_DEVBUF); |
594 |
free(data_ptr, M_DEVBUF); |
Lines 629-635
sgioctl(struct cdev *dev, u_long cmd, caddr_t arg, int flag, struct thread *td)
Link Here
|
629 |
req->sb_len_wr); |
631 |
req->sb_len_wr); |
630 |
} |
632 |
} |
631 |
|
633 |
|
632 |
if ((dir == CAM_DIR_OUT || dir == CAM_DIR_BOTH) && error == 0) |
634 |
if ((dir & CAM_DIR_OUT) && error == 0) |
633 |
error = copyout(data_ptr, req->dxferp, req->dxfer_len); |
635 |
error = copyout(data_ptr, req->dxferp, req->dxfer_len); |
634 |
|
636 |
|
635 |
free(data_ptr, M_DEVBUF); |
637 |
free(data_ptr, M_DEVBUF); |