This is an automated email from the git hooks/post-receive script.
git pushed a commit to branch devs/devilhorns/apos
in repository efl.
View the commit online.
commit b69bf1a6acf5f1e3fe6d71f5cf1bf77d16fa8083
Author: Christopher Michael <devilho...@comcast.net>
AuthorDate: Wed Aug 17 12:22:10 2022 -0400
ecore_drm2: Add check for Atomic Modesetting support
---
src/lib/ecore_drm2/ecore_drm2.c | 2 ++
src/lib/ecore_drm2/ecore_drm2_device.c | 29 ++++++++++++++++++++++++++++-
src/lib/ecore_drm2/ecore_drm2_private.h | 4 ++++
3 files changed, 34 insertions(+), 1 deletion(-)
diff --git a/src/lib/ecore_drm2/ecore_drm2.c b/src/lib/ecore_drm2/ecore_drm2.c
index 6d1096d2b7..2ae711fcc7 100644
--- a/src/lib/ecore_drm2/ecore_drm2.c
+++ b/src/lib/ecore_drm2/ecore_drm2.c
@@ -10,6 +10,7 @@ int _ecore_drm2_log_dom = -1;
/* external drm function prototypes (for dlopen) */
void *(*sym_drmModeGetResources)(int fd) = NULL;
void (*sym_drmModeFreeResources)(drmModeResPtr ptr) = NULL;
+int (*sym_drmSetClientCap)(int fd, uint64_t capability, uint64_t value) = NULL;
/* local static functions */
static Eina_Bool
@@ -46,6 +47,7 @@ _ecore_drm2_link(void)
/* TODO: Sym needed libdrm functions */
SYM(_drm_lib, drmModeGetResources);
SYM(_drm_lib, drmModeFreeResources);
+ SYM(_drm_lib, drmSetClientCap);
if (fail)
{
diff --git a/src/lib/ecore_drm2/ecore_drm2_device.c b/src/lib/ecore_drm2/ecore_drm2_device.c
index 6396c92d5e..2fb0311e22 100644
--- a/src/lib/ecore_drm2/ecore_drm2_device.c
+++ b/src/lib/ecore_drm2/ecore_drm2_device.c
@@ -1,6 +1,25 @@
#include "ecore_drm2_private.h"
+/* external variable for using atomic */
+Eina_Bool _ecore_drm2_atomic_use = EINA_FALSE;
+
/* local functions */
+static Eina_Bool
+_ecore_drm2_device_atomic_capable_get(int fd)
+{
+ Eina_Bool ret = EINA_TRUE;
+
+ if (sym_drmSetClientCap(fd, DRM_CLIENT_CAP_UNIVERSAL_PLANES, 1) < 0)
+ ret = EINA_FALSE;
+ else
+ {
+ if (sym_drmSetClientCap(fd, DRM_CLIENT_CAP_ATOMIC, 1) < 0)
+ ret = EINA_FALSE;
+ }
+
+ return ret;
+}
+
static Eina_Bool
_ecore_drm2_device_modeset_capable_get(int fd)
{
@@ -124,7 +143,15 @@ ecore_drm2_device_open(const char *seat, unsigned int tty)
goto open_err;
}
- /* TODO: elput_input_init, check atomic capable, etc */
+ /* TODO: elput_input_init, etc */
+
+ /* NB: For now, we will ONLY support Atomic */
+ _ecore_drm2_atomic_use = _ecore_drm2_device_atomic_capable_get(dev->fd);
+ if (!_ecore_drm2_atomic_use)
+ {
+ WRN("Could not enable Atomic Modesetting support");
+ goto open_err;
+ }
return dev;
diff --git a/src/lib/ecore_drm2/ecore_drm2_private.h b/src/lib/ecore_drm2/ecore_drm2_private.h
index 3f336e3070..06f53fb0d2 100644
--- a/src/lib/ecore_drm2/ecore_drm2_private.h
+++ b/src/lib/ecore_drm2/ecore_drm2_private.h
@@ -31,6 +31,9 @@
/* define necessary vars/macros for ecore_drm2 log domain */
extern int _ecore_drm2_log_dom;
+/* define externval variable for atomic */
+extern Eina_Bool _ecore_drm2_atomic_use;
+
# ifdef ECORE_DRM2_DEFAULT_LOG_COLOR
# undef ECORE_DRM2_DEFAULT_LOG_COLOR
# endif
@@ -72,5 +75,6 @@ struct _Ecore_Drm2_Device
/* external drm function prototypes (for dlopen) */
extern void *(*sym_drmModeGetResources)(int fd);
extern void (*sym_drmModeFreeResources)(drmModeResPtr ptr);
+extern int (*sym_drmSetClientCap)(int fd, uint64_t capability, uint64_t value);
#endif
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.