Message ID | 1423824675-12460-1-git-send-email-frank.binns@imgtec.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi Frank, On 13/02/15 10:51, Frank Binns wrote: > Add a helper function that returns the type of device node from an fd. > > Signed-off-by: Frank Binns <frank.binns@imgtec.com> Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com> Thank you for getting rid of the silly file probing that I went with initially. -Emil
Hi Emil, On 13/02/15 16:38, Emil Velikov wrote: > Hi Frank, > On 13/02/15 10:51, Frank Binns wrote: >> Add a helper function that returns the type of device node from an fd. >> >> Signed-off-by: Frank Binns <frank.binns@imgtec.com> > Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com> > > Thank you for getting rid of the silly file probing that I went with > initially. > > -Emil Would you mind pushing this as I don't have commit access. Thanks Frank
On 17/02/15 16:10, Frank Binns wrote: > Hi Emil, > > On 13/02/15 16:38, Emil Velikov wrote: >> Hi Frank, >> On 13/02/15 10:51, Frank Binns wrote: >>> Add a helper function that returns the type of device node from an fd. >>> >>> Signed-off-by: Frank Binns <frank.binns@imgtec.com> >> Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com> >> >> Thank you for getting rid of the silly file probing that I went with >> initially. >> >> -Emil > > Would you mind pushing this as I don't have commit access. > Hi Frank, Wanted to give some extra time for people to take a look and comment. dri-devel has been quite busy lately :-) Pushed to master, now let's respin the other helpers (using readdir_r). Cheers, Emil
diff --git a/xf86drm.c b/xf86drm.c index d85115c..e117bc6 100644 --- a/xf86drm.c +++ b/xf86drm.c @@ -505,6 +505,23 @@ static int drmGetMinorBase(int type) }; } +static int drmGetMinorType(int minor) +{ + int type = minor >> 6; + + if (minor < 0) + return -1; + + switch (type) { + case DRM_NODE_PRIMARY: + case DRM_NODE_CONTROL: + case DRM_NODE_RENDER: + return type; + default: + return -1; + } +} + /** * Open the device by bus ID. * @@ -2667,6 +2684,28 @@ char *drmGetDeviceNameFromFd(int fd) return strdup(name); } +int drmGetNodeTypeFromFd(int fd) +{ + struct stat sbuf; + int maj, min, type; + + if (fstat(fd, &sbuf)) + return -1; + + maj = major(sbuf.st_rdev); + min = minor(sbuf.st_rdev); + + if (maj != DRM_MAJOR || !S_ISCHR(sbuf.st_mode)) { + errno = EINVAL; + return -1; + } + + type = drmGetMinorType(min); + if (type == -1) + errno = ENODEV; + return type; +} + int drmPrimeHandleToFD(int fd, uint32_t handle, uint32_t flags, int *prime_fd) { struct drm_prime_handle args; diff --git a/xf86drm.h b/xf86drm.h index 77937eb..afd38a1 100644 --- a/xf86drm.h +++ b/xf86drm.h @@ -744,6 +744,7 @@ typedef struct _drmEventContext { extern int drmHandleEvent(int fd, drmEventContextPtr evctx); extern char *drmGetDeviceNameFromFd(int fd); +extern int drmGetNodeTypeFromFd(int fd); extern int drmPrimeHandleToFD(int fd, uint32_t handle, uint32_t flags, int *prime_fd); extern int drmPrimeFDToHandle(int fd, int prime_fd, uint32_t *handle);
Add a helper function that returns the type of device node from an fd. Signed-off-by: Frank Binns <frank.binns@imgtec.com> --- xf86drm.c | 39 +++++++++++++++++++++++++++++++++++++++ xf86drm.h | 1 + 2 files changed, 40 insertions(+)