eyxnos: install exynos tests if HAVE_INSTALL_TESTS
[platform/upstream/libdrm.git] / xf86drm.c
index 896b9ba..e94f2cd 100644 (file)
--- a/xf86drm.c
+++ b/xf86drm.c
@@ -104,12 +104,16 @@ void drmSetServerInfo(drmServerInfoPtr info)
  * This function is a wrapper around vfprintf().
  */
 
-static int drmDebugPrint(const char *format, va_list ap)
+static int DRM_PRINTFLIKE(1, 0)
+drmDebugPrint(const char *format, va_list ap)
 {
     return vfprintf(stderr, format, ap);
 }
 
-static int (*drm_debug_print)(const char *format, va_list ap) = drmDebugPrint;
+typedef int DRM_PRINTFLIKE(1, 0) (*debug_msg_func_t)(const char *format,
+                                                    va_list ap);
+
+static debug_msg_func_t drm_debug_print = drmDebugPrint;
 
 void
 drmMsg(const char *format, ...)
@@ -129,7 +133,7 @@ drmMsg(const char *format, ...)
 }
 
 void
-drmSetDebugMsgFunction(int (*debug_msg_ptr)(const char *format, va_list ap))
+drmSetDebugMsgFunction(debug_msg_func_t debug_msg_ptr)
 {
     drm_debug_print = debug_msg_ptr;
 }
@@ -370,6 +374,7 @@ wait_for_udev:
     if (fd >= 0)
        return fd;
 
+#if !defined(UDEV)
     /* Check if the device node is not what we expect it to be, and recreate it
      * and try again if so.
      */
@@ -391,6 +396,7 @@ wait_for_udev:
 
     drmMsg("drmOpenDevice: Open failed\n");
     remove(buf);
+#endif
     return -errno;
 }
 
@@ -497,7 +503,7 @@ static int drmOpenByBusid(const char *busid)
                sv.drm_di_minor = 1;
                sv.drm_dd_major = -1;       /* Don't care */
                sv.drm_dd_minor = -1;       /* Don't care */
-               drmMsg("drmOpenByBusid: Interface 1.4 failed, trying 1.1\n",fd);
+               drmMsg("drmOpenByBusid: Interface 1.4 failed, trying 1.1\n");
                drmSetInterfaceVersion(fd, &sv);
            }
            buf = drmGetBusid(fd);
@@ -808,6 +814,25 @@ 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 0;
+}
+
+int drmSetClientCap(int fd, uint64_t capability, uint64_t value)
+{
+       struct drm_set_client_cap cap  = { capability, value };
+
+       return drmIoctl(fd, DRM_IOCTL_SET_CLIENT_CAP, &cap);
+}
 
 /**
  * Free the bus ID information.
@@ -962,7 +987,7 @@ int drmAddMap(int fd, drm_handle_t offset, drmSize size, drmMapType type,
     if (drmIoctl(fd, DRM_IOCTL_ADD_MAP, &map))
        return -errno;
     if (handle)
-       *handle = (drm_handle_t)map.handle;
+       *handle = (drm_handle_t)(uintptr_t)map.handle;
     return 0;
 }
 
@@ -970,7 +995,7 @@ int drmRmMap(int fd, drm_handle_t handle)
 {
     drm_map_t map;
 
-    map.handle = (void *)handle;
+    map.handle = (void *)(uintptr_t)handle;
 
     if(drmIoctl(fd, DRM_IOCTL_RM_MAP, &map))
        return -errno;
@@ -1932,7 +1957,7 @@ int drmWaitVBlank(int fd, drmVBlankPtr vbl)
 
     ret = clock_gettime(CLOCK_MONOTONIC, &timeout);
     if (ret < 0) {
-       fprintf(stderr, "clock_gettime failed: %s\n", strerror(ret));
+       fprintf(stderr, "clock_gettime failed: %s\n", strerror(errno));
        goto out;
     }
     timeout.tv_sec++;
@@ -2106,7 +2131,7 @@ int drmAddContextPrivateMapping(int fd, drm_context_t ctx_id,
     drm_ctx_priv_map_t map;
 
     map.ctx_id = ctx_id;
-    map.handle = (void *)handle;
+    map.handle = (void *)(uintptr_t)handle;
 
     if (drmIoctl(fd, DRM_IOCTL_SET_SAREA_CTX, &map))
        return -errno;
@@ -2123,7 +2148,7 @@ int drmGetContextPrivateMapping(int fd, drm_context_t ctx_id,
     if (drmIoctl(fd, DRM_IOCTL_GET_SAREA_CTX, &map))
        return -errno;
     if (handle)
-       *handle = (drm_handle_t)map.handle;
+       *handle = (drm_handle_t)(uintptr_t)map.handle;
 
     return 0;
 }
@@ -2528,3 +2553,34 @@ char *drmGetDeviceNameFromFd(int fd)
 
        return strdup(name);
 }
+
+int drmPrimeHandleToFD(int fd, uint32_t handle, uint32_t flags, int *prime_fd)
+{
+       struct drm_prime_handle args;
+       int ret;
+
+       args.handle = handle;
+       args.flags = flags;
+       ret = drmIoctl(fd, DRM_IOCTL_PRIME_HANDLE_TO_FD, &args);
+       if (ret)
+               return ret;
+
+       *prime_fd = args.fd;
+       return 0;
+}
+
+int drmPrimeFDToHandle(int fd, int prime_fd, uint32_t *handle)
+{
+       struct drm_prime_handle args;
+       int ret;
+
+       args.fd = prime_fd;
+       args.flags = 0;
+       ret = drmIoctl(fd, DRM_IOCTL_PRIME_FD_TO_HANDLE, &args);
+       if (ret)
+               return ret;
+
+       *handle = args.handle;
+       return 0;
+}
+