All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ilia Mirkin <imirkin@alum.mit.edu>
To: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: "dri-devel@lists.freedesktop.org" <dri-devel@lists.freedesktop.org>
Subject: Re: Implementing Miracast?
Date: Thu, 3 Dec 2015 10:42:50 -0500	[thread overview]
Message-ID: <CAKb7UvhxPc5cxORNkYG5irg8YP+TzvFOLUWTkY4qpPcQ=X-zQQ@mail.gmail.com> (raw)
In-Reply-To: <12497834.9kWqcskKdF@avalon>

On Thu, Dec 3, 2015 at 10:34 AM, Laurent Pinchart
<laurent.pinchart@ideasonboard.com> wrote:
> Hi Jaakko,
>
> On Thursday 03 December 2015 14:42:51 Hannikainen, Jaakko wrote:
>> Hello,
>>
>> We're developing Miracast (HDMI over Wireless connections). The current
>> progress is that it 'works' in the userspace but doesn't have any
>> integration with X/Wayland and can only mirror the current desktop
>> using gstreamer.
>>
>> We're looking into extending the implementation so that we would be
>> able to use the remote screens just as any other connected screen, but
>> we're not quite sure where we should implement it.
>>
>> The DRM interface seems like the perfect fit since we wouldn't need to
>> patch every compositor.
>>
>> Right now, gstreamer is the equivalent of the crtc/encoder, in the DRM
>> model. Screens / crtcs are discovered using a WiFi's p2p protocol which
>> means that screens should be hotpluggable. Since we cannot change the
>> number of crtcs of a driver on the fly, we propose adding and removing
>> gpus with one crtc attached and no rendering capabilities.
>>
>> Compositors and X currently use udev to list gpus and get run-time
>> events for gpu hot-plugging (see the work from Dave Airlie for USB
>> GPUs, using the modesetting X driver). We did not find a way to tell
>> udev that we have a new device and it seems like the only way to get it
>> to pick up our driver is from a uevent which can only be generated from
>> the kernel.
>>
>> Since we have so many userspace components, it doesn't make sense to
>> implement the entire driver in the kernel.
>>
>> We would thus need to have a communication from the kernel space to the
>> userspace at least to send the flip commands to the fake crtc. Since we
>> need this, why not implement everything in the userspace and just
>> redirect the ioctls to the userspace driver?
>>
>> This is exactly what fuse / cuse [1] does, with the minor catch that it
>> creates devices in /sys/class/cuse instead of drm. This prevents the
>> wayland compositors and X to pick it up as a normal drm driver...
>>
>> We would thus need to have the drm subsystem create the device nodes
>> for us when the userspace needs to create a new gpu. We could create a
>> node named /dev/dri/cuse_card that, when opened, would allocate a node
>> (/dev/dri/cardX) and would use cuse/fuse to redirect the ioctls to the
>> process who opened /dev/dri/cuse_card.
>>
>> The process would then be responsible for decoding the ioctl and
>> implementing the drm API.
>>
>> Since this is a major change which would allow proprietary drivers to
>> be implemented in the userspace and since we may have missed something
>> obvious, we would like to start a discussion on this. What are your
>> thoughts?
>
> As you raise the issue, how would you prevent proprietary userspace drivers to
> be implemented ? Anything that would allow vendors to destroy the Linux
> graphics ecosystem would receive a big nack from me.

AFAIK the displaylink people already have precisely such a driver -- a
(open-source) kernel module that allows their (closed-source)
userspace blob to present a drm node to pass through modesetting/etc
ioctl's.

  -ilia
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

  reply	other threads:[~2015-12-03 15:42 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-03 14:42 Implementing Miracast? Hannikainen, Jaakko
2015-12-03 15:34 ` Laurent Pinchart
2015-12-03 15:42   ` Ilia Mirkin [this message]
2015-12-03 15:53     ` Laurent Pinchart
2015-12-03 16:03       ` Ilia Mirkin
2015-12-03 16:10         ` Laurent Pinchart
2015-12-03 16:38           ` Ilia Mirkin
2015-12-03 17:26             ` Martin Peres
2015-12-04  8:07               ` Daniel Vetter
2015-12-04  9:10                 ` Ernst Sjöstrand
2015-12-04 13:22                 ` Martin Peres
2015-12-08 11:59                 ` David Herrmann
2015-12-08 16:39                   ` Martin Peres
2015-12-08 17:24                     ` David Herrmann
2015-12-10 13:28                       ` Martin Peres
2015-12-14 14:54                         ` David Herrmann

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAKb7UvhxPc5cxORNkYG5irg8YP+TzvFOLUWTkY4qpPcQ=X-zQQ@mail.gmail.com' \
    --to=imirkin@alum.mit.edu \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=laurent.pinchart@ideasonboard.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.