FYI: v4l-linuxulator support in FreeBSD-current now

Hans Petter Selasky hselasky at c2i.net
Tue Jan 11 08:47:47 UTC 2011


Hi,

I've received the following patch for my cuse4bsd module. Could this be 
included in the kernel's linux.ko ? This patch allows for linux DVB 
applications running under FreeBSD linux emulation.

--HPS

Index: cuse4bsd_kmod.c
===================================================================
--- cuse4bsd_kmod.c     (revision 1700)
+++ cuse4bsd_kmod.c     (working copy)
@@ -1689,3 +1689,49 @@
 
        return (0);
 }
+
+
+#include <sys/sysproto.h>
+#if defined (__amd64__)
+#include <machine/../linux32/linux.h>
+#include <machine/../linux32/linux32_proto.h>
+#else
+#include <machine/../linux/linux.h>
+#include <machine/../linux/linux_proto.h>
+#endif
+
+#include <compat/linux/linux_ioctl.h>
+MODULE_DEPEND(cuse4bsd, linux, 1, 1, 1);
+
+#define DVB_LINUX_IOCTL_MIN  0x6f00
+#define DVB_LINUX_IOCTL_MAX  0x6fff
+
+
+static linux_ioctl_function_t cuse4bsd_linux_ioctl;
+static struct linux_ioctl_handler cuse4bsd_linux_handler = 
+  {cuse4bsd_linux_ioctl, DVB_LINUX_IOCTL_MIN, DVB_LINUX_IOCTL_MAX};
+
+SYSINIT  (cuse4bsd_linux_register,   SI_SUB_KLD, SI_ORDER_MIDDLE, 
+          linux_ioctl_register_handler, &cuse4bsd_linux_handler);
+SYSUNINIT(cuse4bsd_linux_unregister, SI_SUB_KLD, SI_ORDER_MIDDLE, 
+          linux_ioctl_unregister_handler, &cuse4bsd_linux_handler);
+
+static int
+cuse4bsd_linux_ioctl(struct thread *td, struct linux_ioctl_args *args)
+{
+  unsigned long cmd;
+
+  /* swap the read/write bits, due to differences in bsd & linux ioctls*/
+  cmd = (unsigned long)args->cmd;
+  if (cmd & (0x40 << 24)) {
+         cmd &= 0xffffff;
+         cmd |= (0x80 << 24);
+  } else if (cmd & (0x80 << 24)) {
+         cmd &= 0xffffff;
+         cmd |= (0x40 << 24);
+  }
+  args->cmd = (l_uint)cmd;
+  
+  /* Pass the ioctl off to our standard handler, now that its valid */
+  return(ioctl(td, (struct ioctl_args *)args));
+}


More information about the freebsd-multimedia mailing list