Date: Tue, 11 Jan 2011 09:26:09 -0500 From: "J.R. Oldroyd" <fbsd@opal.com> To: Hans Petter Selasky <hselasky@c2i.net> Cc: freebsd-multimedia@freebsd.org, emulation@freebsd.org, Matthias Apitz <guru@unixarea.de>, Alexander Leidinger <Alexander@leidinger.net> Subject: Re: FYI: v4l-linuxulator support in FreeBSD-current now Message-ID: <20110111092609.7bf82016@shibato.opal.com> In-Reply-To: <201101110947.46399.hselasky@c2i.net> References: <20091204223126.00005392@unknown> <201001081650.14189.hselasky@c2i.net> <20100108114130.1cfe88c5@shibato.opal.com> <201101110947.46399.hselasky@c2i.net>
next in thread | previous in thread | raw e-mail | index | archive | help
--Sig_/YhisAVz+wRfmBxJsPoke_AO Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable On Tue, 11 Jan 2011 09:47:46 +0100, Hans Petter Selasky <hselasky@c2i.net> = wrote: > > Hi, >=20 > I've received the following patch for my cuse4bsd module. Could this be=20 > included in the kernel's linux.ko ? This patch allows for linux DVB=20 > applications running under FreeBSD linux emulation. >=20 > --HPS >=20 > Index: cuse4bsd_kmod.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- cuse4bsd_kmod.c (revision 1700) > +++ cuse4bsd_kmod.c (working copy) > @@ -1689,3 +1689,49 @@ > =20 > 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 =3D=20 > + {cuse4bsd_linux_ioctl, DVB_LINUX_IOCTL_MIN, DVB_LINUX_IOCTL_MAX}; > + > +SYSINIT (cuse4bsd_linux_register, SI_SUB_KLD, SI_ORDER_MIDDLE,=20 > + linux_ioctl_register_handler, &cuse4bsd_linux_handler); > +SYSUNINIT(cuse4bsd_linux_unregister, SI_SUB_KLD, SI_ORDER_MIDDLE,=20 > + 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 =3D (unsigned long)args->cmd; > + if (cmd & (0x40 << 24)) { > + cmd &=3D 0xffffff; > + cmd |=3D (0x80 << 24); > + } else if (cmd & (0x80 << 24)) { > + cmd &=3D 0xffffff; > + cmd |=3D (0x40 << 24); > + } > + args->cmd =3D (l_uint)cmd; > + =20 > + /* Pass the ioctl off to our standard handler, now that its valid */ > + return(ioctl(td, (struct ioctl_args *)args)); > +} This patch merely flips the cmd bits. I'm not familiar with the Linux DVB ioctls... is it really the case that none of the data structures have 32/64-bit architecture dependent field sizes? Great if that's the case, but if not, we need to do data structure conversions here too, as we did for V4L. -jr --Sig_/YhisAVz+wRfmBxJsPoke_AO Content-Type: application/pgp-signature; name=signature.asc Content-Disposition: attachment; filename=signature.asc -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (FreeBSD) iEYEARECAAYFAk0saIIACgkQls33urr0k4nb5gCgo3c7uYK0K6p9dOTMPGq89skW SI4AoKZQg86SORlN9iskjoYl8oG09LHG =p6F8 -----END PGP SIGNATURE----- --Sig_/YhisAVz+wRfmBxJsPoke_AO--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20110111092609.7bf82016>