Implement drmGetCap() to query device/driver capabilities
authorBen Skeggs <bskeggs@redhat.com>
Mon, 21 Feb 2011 01:27:19 +0000 (11:27 +1000)
committerDave Airlie <airlied@redhat.com>
Fri, 4 Mar 2011 05:25:51 +0000 (15:25 +1000)
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
include/drm/drm.h
xf86drm.c
xf86drm.h

index c968dc81fd51c2efea0424d66e9e0d3339532ad8..416673af0536c70fa75a991c6b9f9a7ffc2eb9a0 100644 (file)
@@ -612,6 +612,12 @@ struct drm_gem_open {
        __u64 size;
 };
 
+/** DRM_IOCTL_GET_CAP ioctl argument type */
+struct drm_get_cap {
+       __u64 capability;
+       __u64 value;
+};
+
 #include "drm_mode.h"
 
 #define DRM_IOCTL_BASE                 'd'
@@ -632,6 +638,7 @@ struct drm_gem_open {
 #define DRM_IOCTL_GEM_CLOSE            DRM_IOW (0x09, struct drm_gem_close)
 #define DRM_IOCTL_GEM_FLINK            DRM_IOWR(0x0a, struct drm_gem_flink)
 #define DRM_IOCTL_GEM_OPEN             DRM_IOWR(0x0b, struct drm_gem_open)
+#define DRM_IOCTL_GET_CAP              DRM_IOWR(0x0c, struct drm_get_cap)
 
 #define DRM_IOCTL_SET_UNIQUE           DRM_IOW( 0x10, struct drm_unique)
 #define DRM_IOCTL_AUTH_MAGIC           DRM_IOW( 0x11, struct drm_auth)
@@ -747,6 +754,8 @@ struct drm_event_vblank {
        __u32 reserved;
 };
 
+#define DRM_CAP_DUMB_BUFFER 0x1
+
 /* typedef area */
 typedef struct drm_clip_rect drm_clip_rect_t;
 typedef struct drm_drawable_info drm_drawable_info_t;
index 799fcddf496092e7461aebf69dd6a598a51275f7..bc7a97fe4cb223e400b0fd0e24088b88aba5f176 100644 (file)
--- a/xf86drm.c
+++ b/xf86drm.c
@@ -810,6 +810,18 @@ drmVersionPtr drmGetLibVersion(int fd)
     return (drmVersionPtr)version;
 }
 
+int drmGetCap(int fd, uint64_t capability, uint64_t *value)
+{
+       struct drm_get_cap cap = { capability, 0 };
+       int ret;
+
+       ret = drmIoctl(fd, DRM_IOCTL_GET_CAP, &cap);
+       if (ret)
+               return ret;
+
+       *value = cap.value;
+       return cap.value;
+}
 
 /**
  * Free the bus ID information.
index 9b89f56256b17274003fc14f5bf146a7e76b6282..bf0d5df88403554100789c587cb235716497a745 100644 (file)
--- a/xf86drm.h
+++ b/xf86drm.h
@@ -542,6 +542,7 @@ extern int drmOpenControl(int minor);
 extern int           drmClose(int fd);
 extern drmVersionPtr drmGetVersion(int fd);
 extern drmVersionPtr drmGetLibVersion(int fd);
+extern int           drmGetCap(int fd, uint64_t capability, uint64_t *value);
 extern void          drmFreeVersion(drmVersionPtr);
 extern int           drmGetMagic(int fd, drm_magic_t * magic);
 extern char          *drmGetBusid(int fd);