Add new drmGetNodeTypeFromFd function

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>
main
Frank Binns 2015-02-13 10:51:15 +00:00 committed by Emil Velikov
parent 5c1c09e0d2
commit 1f73578df3
2 changed files with 40 additions and 0 deletions

View File

@ -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;

View File

@ -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);