Commit 5bdd6cc3300be534f2a2cf826e3fb926b5695698

Authored by Mauro Carvalho Chehab
1 parent 487206f263

V4L/DVB (4371a): Fix V4L1 dependencies on compat_ioctl32

Compat32 should be able to handle V4L1 ioctls if the old API support were
selected.

Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>

Showing 1 changed file with 28 additions and 4 deletions Side-by-side Diff

drivers/media/video/compat_ioctl32.c
... ... @@ -21,7 +21,7 @@
21 21  
22 22 #ifdef CONFIG_COMPAT
23 23  
24   -
  24 +#ifdef CONFIG_VIDEO_V4L1_COMPAT
25 25 struct video_tuner32 {
26 26 compat_int_t tuner;
27 27 char name[32];
... ... @@ -107,6 +107,7 @@
107 107 compat_caddr_t clips;
108 108 compat_int_t clipcount;
109 109 };
  110 +#endif
110 111  
111 112 static int native_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
112 113 {
... ... @@ -124,6 +125,7 @@
124 125 }
125 126  
126 127  
  128 +#ifdef CONFIG_VIDEO_V4L1_COMPAT
127 129 /* You get back everything except the clips... */
128 130 static int put_video_window32(struct video_window *kp, struct video_window32 __user *up)
129 131 {
... ... @@ -138,6 +140,7 @@
138 140 return -EFAULT;
139 141 return 0;
140 142 }
  143 +#endif
141 144  
142 145 struct v4l2_clip32
143 146 {
... ... @@ -490,6 +493,7 @@
490 493 return 0;
491 494 }
492 495  
  496 +#ifdef CONFIG_VIDEO_V4L1_COMPAT
493 497 struct video_code32
494 498 {
495 499 char loadwhat[16]; /* name or tag of file being passed */
... ... @@ -517,6 +521,8 @@
517 521 #define VIDIOCSFREQ32 _IOW('v',15, u32)
518 522 #define VIDIOCSMICROCODE32 _IOW('v',27, struct video_code32)
519 523  
  524 +#endif
  525 +
520 526 /* VIDIOC_ENUMINPUT32 is VIDIOC_ENUMINPUT minus 4 bytes of padding alignement */
521 527 #define VIDIOC_ENUMINPUT32 VIDIOC_ENUMINPUT - _IOC(0, 0, 0, 4)
522 528 #define VIDIOC_G_FMT32 _IOWR ('V', 4, struct v4l2_format32)
... ... @@ -537,6 +543,7 @@
537 543 #define VIDIOC_S_INPUT32 _IOWR ('V', 39, compat_int_t)
538 544 #define VIDIOC_TRY_FMT32 _IOWR ('V', 64, struct v4l2_format32)
539 545  
  546 +#ifdef CONFIG_VIDEO_V4L1_COMPAT
540 547 enum {
541 548 MaxClips = (~0U-sizeof(struct video_window))/sizeof(struct video_clip)
542 549 };
543 550  
544 551  
... ... @@ -601,14 +608,17 @@
601 608  
602 609 return native_ioctl(file, VIDIOCSWIN, (unsigned long)vw);
603 610 }
  611 +#endif
604 612  
605 613 static int do_video_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
606 614 {
607 615 union {
  616 +#ifdef CONFIG_VIDEO_V4L1_COMPAT
608 617 struct video_tuner vt;
609 618 struct video_buffer vb;
610 619 struct video_window vw;
611 620 struct video_code vc;
  621 +#endif
612 622 struct v4l2_format v2f;
613 623 struct v4l2_buffer v2b;
614 624 struct v4l2_framebuffer v2fb;
... ... @@ -624,6 +634,7 @@
624 634  
625 635 /* First, convert the command. */
626 636 switch(cmd) {
  637 +#ifdef CONFIG_VIDEO_V4L1_COMPAT
627 638 case VIDIOCGTUNER32: cmd = VIDIOCGTUNER; break;
628 639 case VIDIOCSTUNER32: cmd = VIDIOCSTUNER; break;
629 640 case VIDIOCGWIN32: cmd = VIDIOCGWIN; break;
... ... @@ -631,6 +642,8 @@
631 642 case VIDIOCSFBUF32: cmd = VIDIOCSFBUF; break;
632 643 case VIDIOCGFREQ32: cmd = VIDIOCGFREQ; break;
633 644 case VIDIOCSFREQ32: cmd = VIDIOCSFREQ; break;
  645 + case VIDIOCSMICROCODE32: cmd = VIDIOCSMICROCODE; break;
  646 +#endif
634 647 case VIDIOC_G_FMT32: cmd = VIDIOC_G_FMT; break;
635 648 case VIDIOC_S_FMT32: cmd = VIDIOC_S_FMT; break;
636 649 case VIDIOC_QUERYBUF32: cmd = VIDIOC_QUERYBUF; break;
637 650  
... ... @@ -647,10 +660,10 @@
647 660 case VIDIOC_G_INPUT32: cmd = VIDIOC_G_INPUT; break;
648 661 case VIDIOC_S_INPUT32: cmd = VIDIOC_S_INPUT; break;
649 662 case VIDIOC_TRY_FMT32: cmd = VIDIOC_TRY_FMT; break;
650   - case VIDIOCSMICROCODE32: cmd = VIDIOCSMICROCODE; break;
651 663 };
652 664  
653 665 switch(cmd) {
  666 +#ifdef CONFIG_VIDEO_V4L1_COMPAT
654 667 case VIDIOCSTUNER:
655 668 case VIDIOCGTUNER:
656 669 err = get_video_tuner32(&karg.vt, up);
... ... @@ -664,6 +677,7 @@
664 677 break;
665 678  
666 679 case VIDIOCSFREQ:
  680 +#endif
667 681 case VIDIOC_S_INPUT:
668 682 case VIDIOC_OVERLAY:
669 683 case VIDIOC_STREAMON:
670 684  
671 685  
672 686  
673 687  
... ... @@ -717,18 +731,21 @@
717 731 compatible_arg = 0;
718 732 break;
719 733  
  734 +#ifdef CONFIG_VIDEO_V4L1_COMPAT
720 735 case VIDIOCGWIN:
721 736 case VIDIOCGFBUF:
722 737 case VIDIOCGFREQ:
  738 +#endif
723 739 case VIDIOC_G_FBUF:
724 740 case VIDIOC_G_INPUT:
725 741 compatible_arg = 0;
  742 +#ifdef CONFIG_VIDEO_V4L1_COMPAT
726 743 case VIDIOCSMICROCODE:
727 744 err = microcode32(&karg.vc, up);
728 745 compatible_arg = 0;
729 746 break;
  747 +#endif
730 748 };
731   -
732 749 if(err)
733 750 goto out;
734 751  
... ... @@ -743,6 +760,7 @@
743 760 }
744 761 if(err == 0) {
745 762 switch(cmd) {
  763 +#ifdef CONFIG_VIDEO_V4L1_COMPAT
746 764 case VIDIOCGTUNER:
747 765 err = put_video_tuner32(&karg.vt, up);
748 766 break;
... ... @@ -754,7 +772,7 @@
754 772 case VIDIOCGFBUF:
755 773 err = put_video_buffer32(&karg.vb, up);
756 774 break;
757   -
  775 +#endif
758 776 case VIDIOC_G_FBUF:
759 777 err = put_v4l2_framebuffer32(&karg.v2fb, up);
760 778 break;
761 779  
... ... @@ -792,7 +810,9 @@
792 810 err = put_v4l2_input32(&karg.v2i, up);
793 811 break;
794 812  
  813 +#ifdef CONFIG_VIDEO_V4L1_COMPAT
795 814 case VIDIOCGFREQ:
  815 +#endif
796 816 case VIDIOC_G_INPUT:
797 817 err = put_user(((u32)karg.vx), (u32 __user *)up);
798 818 break;
... ... @@ -810,6 +830,7 @@
810 830 return ret;
811 831  
812 832 switch (cmd) {
  833 +#ifdef CONFIG_VIDEO_V4L1_COMPAT
813 834 case VIDIOCSWIN32:
814 835 ret = do_set_window(file, cmd, arg);
815 836 break;
... ... @@ -820,6 +841,7 @@
820 841 case VIDIOCSFBUF32:
821 842 case VIDIOCGFREQ32:
822 843 case VIDIOCSFREQ32:
  844 +#endif
823 845 case VIDIOC_QUERYCAP:
824 846 case VIDIOC_ENUM_FMT:
825 847 case VIDIOC_G_FMT32:
... ... @@ -851,6 +873,7 @@
851 873 ret = do_video_ioctl(file, cmd, arg);
852 874 break;
853 875  
  876 +#ifdef CONFIG_VIDEO_V4L1_COMPAT
854 877 /* Little v, the video4linux ioctls (conflict?) */
855 878 case VIDIOCGCAP:
856 879 case VIDIOCGCHAN:
... ... @@ -879,6 +902,7 @@
879 902 case _IOR('v' , BASE_VIDIOCPRIVATE+7, int):
880 903 ret = native_ioctl(file, cmd, (unsigned long)compat_ptr(arg));
881 904 break;
  905 +#endif
882 906 default:
883 907 v4l_print_ioctl("compat_ioctl32", cmd);
884 908 }