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>
