Message ID | 20181120043008.3576-1-christopher.halse.rogers@canonical.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [libdrm] xf86drm: Make drmNodeIsDRM() public. | expand |
Hi Christopher, On Tue, 20 Nov 2018 at 04:30, Christopher James Halse Rogers <christopher.halse.rogers@canonical.com> wrote: > > I have wanted this code in Mir, so it's plausibly useful elsewhere, > particularly if the DRM device major number is going to become > dynamic. > Can you elaborate/link to the code that uses the major/minor? Fiddling with those manually is rather error prone most often than not. Thanks Emil
Emil Velikov <emil.l.velikov@gmail.com> writes: > Hi Christopher, > > On Tue, 20 Nov 2018 at 04:30, Christopher James Halse Rogers > <christopher.halse.rogers@canonical.com> wrote: >> >> I have wanted this code in Mir, so it's plausibly useful elsewhere, >> particularly if the DRM device major number is going to become >> dynamic. >> > Can you elaborate/link to the code that uses the major/minor? > Fiddling with those manually is rather error prone most often than not. Yeah, I think this shouldn't be part of the API.
On 18 December 2018 5:03:22 am AEDT, Emil Velikov <emil.l.velikov@gmail.com> wrote: >Hi Christopher, > >On Tue, 20 Nov 2018 at 04:30, Christopher James Halse Rogers ><christopher.halse.rogers@canonical.com> wrote: >> >> I have wanted this code in Mir, so it's plausibly useful elsewhere, >> particularly if the DRM device major number is going to become >> dynamic. >> >Can you elaborate/link to the code that uses the major/minor? >Fiddling with those manually is rather error prone most often than not. We have an internal API that mirrors that of logind - taking a (major,minor) pair and returning a usable fd. For input devices, that just means opened O_NONBLOCK; for DRM devices it means calling SetMaster. Here's the relevant (non-logind) implementation: https://github.com/MirServer/mir/blob/master/src/server/console/linux_virtual_terminal.cpp#L634 Since we by necessity end up pulling out the devnode I guess we could match on a /dev/dri prefix instead. I just noticed this function while doing the drmIsMaster patch and thought it would be convenient for us!
diff --git a/xf86drm.c b/xf86drm.c index 10df682b..f32cb1bb 100644 --- a/xf86drm.c +++ b/xf86drm.c @@ -2767,7 +2767,7 @@ drm_public char *drmGetDeviceNameFromFd(int fd) return strdup(name); } -static bool drmNodeIsDRM(int maj, int min) +drm_public bool drmNodeIsDRM(int maj, int min) { #ifdef __linux__ char path[64]; diff --git a/xf86drm.h b/xf86drm.h index 7773d71a..6dc92180 100644 --- a/xf86drm.h +++ b/xf86drm.h @@ -37,6 +37,7 @@ #include <stdarg.h> #include <sys/types.h> #include <stdint.h> +#include <stdbool.h> #include <drm.h> #if defined(__cplusplus) @@ -783,6 +784,8 @@ extern int drmPrimeFDToHandle(int fd, int prime_fd, uint32_t *handle); extern char *drmGetPrimaryDeviceNameFromFd(int fd); extern char *drmGetRenderDeviceNameFromFd(int fd); +extern bool drmNodeIsDRM(int major, int minor); + #define DRM_BUS_PCI 0 #define DRM_BUS_USB 1 #define DRM_BUS_PLATFORM 2
I have wanted this code in Mir, so it's plausibly useful elsewhere, particularly if the DRM device major number is going to become dynamic. Signed-off-by: Christopher James Halse Rogers <christopher.halse.rogers@canonical.com> --- xf86drm.c | 2 +- xf86drm.h | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-)