summaryrefslogtreecommitdiff
path: root/xf86drm.c
diff options
context:
space:
mode:
authorFrank Binns <frank.binns@imgtec.com>2015-01-14 14:07:51 +0000
committerEmil Velikov <emil.l.velikov@gmail.com>2015-01-23 23:02:27 +0000
commit0c5aaeef51233aec89ee1f43f03d457f278f8fa0 (patch)
tree86b8efa91f0f479a73933e5f04c6008d9a074f47 /xf86drm.c
parentad8bbfd3c74466f088be8088d2d0524bed392b71 (diff)
Add new drmOpenRender function
Add a new function, drmOpenRender, that can be used to open render nodes. This can be used in the same way that drmOpenControl is used to open control nodes. Signed-off-by: Frank Binns <frank.binns@imgtec.com> Reviewed-by: Rob Clark <robdclark@gmail.com>
Diffstat (limited to 'xf86drm.c')
-rw-r--r--xf86drm.c40
1 files changed, 38 insertions, 2 deletions
diff --git a/xf86drm.c b/xf86drm.c
index a23d029b..345325a3 100644
--- a/xf86drm.c
+++ b/xf86drm.c
@@ -87,6 +87,7 @@
#define DRM_NODE_CONTROL 0
#define DRM_NODE_PRIMARY 1
+#define DRM_NODE_RENDER 2
static drmServerInfoPtr drm_server_info;
@@ -305,6 +306,7 @@ static int chown_check_return(const char *path, uid_t owner, gid_t group)
static int drmOpenDevice(long dev, int minor, int type)
{
stat_t st;
+ const char *dev_name;
char buf[64];
int fd;
mode_t devmode = DRM_DEV_MODE, serv_mode;
@@ -312,7 +314,21 @@ static int drmOpenDevice(long dev, int minor, int type)
uid_t user = DRM_DEV_UID;
gid_t group = DRM_DEV_GID, serv_group;
- sprintf(buf, type ? DRM_DEV_NAME : DRM_CONTROL_DEV_NAME, DRM_DIR_NAME, minor);
+ switch (type) {
+ case DRM_NODE_PRIMARY:
+ dev_name = DRM_DEV_NAME;
+ break;
+ case DRM_NODE_CONTROL:
+ dev_name = DRM_CONTROL_DEV_NAME;
+ break;
+ case DRM_NODE_RENDER:
+ dev_name = DRM_RENDER_DEV_NAME;
+ break;
+ default:
+ return -EINVAL;
+ };
+
+ sprintf(buf, dev_name, DRM_DIR_NAME, minor);
drmMsg("drmOpenDevice: node name is %s\n", buf);
if (drm_server_info) {
@@ -417,11 +433,26 @@ static int drmOpenMinor(int minor, int create, int type)
{
int fd;
char buf[64];
+ const char *dev_name;
if (create)
return drmOpenDevice(makedev(DRM_MAJOR, minor), minor, type);
- sprintf(buf, type ? DRM_DEV_NAME : DRM_CONTROL_DEV_NAME, DRM_DIR_NAME, minor);
+ switch (type) {
+ case DRM_NODE_PRIMARY:
+ dev_name = DRM_DEV_NAME;
+ break;
+ case DRM_NODE_CONTROL:
+ dev_name = DRM_CONTROL_DEV_NAME;
+ break;
+ case DRM_NODE_RENDER:
+ dev_name = DRM_RENDER_DEV_NAME;
+ break;
+ default:
+ return -EINVAL;
+ };
+
+ sprintf(buf, dev_name, DRM_DIR_NAME, minor);
if ((fd = open(buf, O_RDWR, 0)) >= 0)
return fd;
return -errno;
@@ -646,6 +677,11 @@ int drmOpenControl(int minor)
return drmOpenMinor(minor, 0, DRM_NODE_CONTROL);
}
+int drmOpenRender(int minor)
+{
+ return drmOpenMinor(minor, 0, DRM_NODE_RENDER);
+}
+
/**
* Free the version information returned by drmGetVersion().
*