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 2958c10c935a1ec8107bc8d8d38c3a974e8fabd5
Author: Christopher Michael <devilho...@comcast.net>
AuthorDate: Tue Sep 20 08:38:14 2022 -0400

    ecore_drm2: Add public structures for Crtc, Connector, Display, Plane
    
    This commit adds opaque API structures for Crtc, Connector, Display,
    and Plane. It also adds missing sym_drm functions that we will need
    later
---
 src/lib/ecore_drm2/Ecore_Drm2.h         |  15 ++-
 src/lib/ecore_drm2/ecore_drm2.c         |  12 +++
 src/lib/ecore_drm2/ecore_drm2_private.h | 156 ++++++++++++++++++++++++++------
 3 files changed, 152 insertions(+), 31 deletions(-)

diff --git a/src/lib/ecore_drm2/Ecore_Drm2.h b/src/lib/ecore_drm2/Ecore_Drm2.h
index 4a860883e0..e3d904eae3 100644
--- a/src/lib/ecore_drm2/Ecore_Drm2.h
+++ b/src/lib/ecore_drm2/Ecore_Drm2.h
@@ -28,12 +28,21 @@ typedef enum _Ecore_Drm2_Rotation
    ECORE_DRM2_ROTATION_REFLECT_Y = 32
 } Ecore_Drm2_Rotation;
 
+/* opaque structure to represent a drm crtc */
+typedef struct _Ecore_Drm2_Crtc Ecore_Drm2_Crtc;
+
+/* opaque structure to represent a drm connector */
+typedef struct _Ecore_Drm2_Connector Ecore_Drm2_Connector;
+
+/* opaque structure to represent a drm display */
+typedef struct _Ecore_Drm2_Display Ecore_Drm2_Display;
+
+/* opaque structure to represent a drm plane */
+typedef struct _Ecore_Drm2_Plane Ecore_Drm2_Plane;
+
 /* opaque structure to represent a drm device */
 typedef struct _Ecore_Drm2_Device Ecore_Drm2_Device;
 
-/* opaque structure to represent a drm output */
-typedef struct _Ecore_Drm2_Output Ecore_Drm2_Output;
-
 /* API functions */
 EAPI int ecore_drm2_init(void);
 EAPI int ecore_drm2_shutdown(void);
diff --git a/src/lib/ecore_drm2/ecore_drm2.c b/src/lib/ecore_drm2/ecore_drm2.c
index 5d485294b0..85a849228a 100644
--- a/src/lib/ecore_drm2/ecore_drm2.c
+++ b/src/lib/ecore_drm2/ecore_drm2.c
@@ -24,6 +24,12 @@ void *(*sym_drmModeGetPlaneResources)(int fd);
 void (*sym_drmModeFreePlaneResources)(drmModePlaneResPtr ptr);
 void *(*sym_drmModeGetPlane)(int fd, uint32_t plane_id);
 void (*sym_drmModeFreePlane)(drmModePlanePtr ptr);
+void *(*sym_drmModeGetConnector)(int fd, uint32_t connectorId);
+void (*sym_drmModeFreeConnector)(drmModeConnectorPtr ptr);
+void *(*sym_drmModeGetEncoder)(int fd, uint32_t encoder_id);
+void (*sym_drmModeFreeEncoder)(drmModeEncoderPtr ptr);
+void *(*sym_drmModeGetCrtc)(int fd, uint32_t crtcId);
+void (*sym_drmModeFreeCrtc)(drmModeCrtcPtr ptr);
 
 /* local static functions */
 static Eina_Bool
@@ -74,6 +80,12 @@ _ecore_drm2_link(void)
         SYM(_drm_lib, drmModeFreePlaneResources);
         SYM(_drm_lib, drmModeGetPlane);
         SYM(_drm_lib, drmModeFreePlane);
+        SYM(_drm_lib, drmModeGetConnector);
+        SYM(_drm_lib, drmModeFreeConnector);
+        SYM(_drm_lib, drmModeGetEncoder);
+        SYM(_drm_lib, drmModeFreeEncoder);
+        SYM(_drm_lib, drmModeGetCrtc);
+        SYM(_drm_lib, drmModeFreeCrtc);
 
         if (fail)
           {
diff --git a/src/lib/ecore_drm2/ecore_drm2_private.h b/src/lib/ecore_drm2/ecore_drm2_private.h
index 39fcdcaf5f..916cfd9092 100644
--- a/src/lib/ecore_drm2/ecore_drm2_private.h
+++ b/src/lib/ecore_drm2/ecore_drm2_private.h
@@ -31,9 +31,6 @@
 /* define necessary vars/macros for ecore_drm2 log domain */
 extern int _ecore_drm2_log_dom;
 
-/* define external variable for atomic usage */
-extern Eina_Bool _ecore_drm2_atomic_use;
-
 # ifdef ECORE_DRM2_DEFAULT_LOG_COLOR
 #  undef ECORE_DRM2_DEFAULT_LOG_COLOR
 # endif
@@ -64,6 +61,13 @@ extern Eina_Bool _ecore_drm2_atomic_use;
 # endif
 # define CRIT(...) EINA_LOG_DOM_CRIT(_ecore_drm2_log_dom, __VA_ARGS__)
 
+typedef enum _Ecore_Drm2_Backlight_Type
+{
+   ECORE_DRM2_BACKLIGHT_RAW,
+   ECORE_DRM2_BACKLIGHT_PLATFORM,
+   ECORE_DRM2_BACKLIGHT_FIRMWARE
+} Ecore_Drm2_Backlight_Type;
+
 /* internal structures (not exposed) */
 typedef struct _Ecore_Drm2_Atomic_Blob
 {
@@ -100,13 +104,13 @@ typedef struct _Ecore_Drm2_Connector_State
    /* Ecore_Drm2_Atomic_Property Content Protection; */
    /* Ecore_Drm2_Atomic_Property HDCP Content Type; */
    /* Ecore_Drm2_Atomic_Property subconnector; */
-
+   /* Ecore_Drm2_Atomic_Property panel orientation; */
 } Ecore_Drm2_Connector_State;
 
 typedef struct _Ecore_Drm2_Crtc_State
 {
    uint32_t obj_id;
-   int index;
+   /* int index; */
    Ecore_Drm2_Atomic_Property active;
    Ecore_Drm2_Atomic_Blob mode;
 
@@ -124,55 +128,145 @@ typedef struct _Ecore_Drm2_Crtc_State
 typedef struct _Ecore_Drm2_Plane_State
 {
    uint32_t obj_id, mask;
+   uint32_t num_formats;
+   uint32_t *formats;
+
    Ecore_Drm2_Atomic_Property type;
    Ecore_Drm2_Atomic_Property cid, fid;
    Ecore_Drm2_Atomic_Property sx, sy, sw, sh;
    Ecore_Drm2_Atomic_Property cx, cy, cw, ch;
    Ecore_Drm2_Atomic_Property rotation;
 
+   /* TODO ?? */
+   /* Ecore_Drm2_Atomic_Property IN_FENCE_FD; */
+   /* Ecore_Drm2_Atomic_Property IN_FORMATS; */
+   /* Ecore_Drm2_Atomic_Property COLOR_ENCODING; */
+   /* Ecore_Drm2_Atomic_Property COLOR_RANGE; */
+   /* Ecore_Drm2_Atomic_Blob FB_DAMAGE_CLIPS; */
+   /* Ecore_Drm2_Atomic_Property zpos; */
+
    /* NB: these are not part of an atomic state, but we store these here
     * so that we do not have to refetch properties when iterating planes */
    uint32_t rotation_map[6];
    uint32_t supported_rotations;
 
-   uint32_t num_formats;
-   uint32_t *formats;
+   Eina_Bool in_use : 1;
+} Ecore_Drm2_Plane_State;
 
-   Eina_Bool in_use;
+/* opaque API structures */
+struct _Ecore_Drm2_Plane
+{
+   int fd;
+   uint32_t id;
 
-   /* TODO ?? */
-   /* Ecore_Drm2_Atomic_Property IN_FENCE_FD; */
-   /* Ecore_Drm2_Atomic_Property IN_FORMATS; */
-   /* Ecore_Drm2_Atomic_Property COLOR_ENCODING; */
-   /* Ecore_Drm2_Atomic_Property COLOR_RANGE; */
-} Ecore_Drm2_Plane_State;
+   drmModePlanePtr dplane;
+
+   Ecore_Drm2_Plane_State *state;
+
+   Ecore_Thread *thread;
+};
 
-typedef struct _Ecore_Drm2_Atomic_State
+struct _Ecore_Drm2_Display
 {
-   int crtcs, conns, planes;
-   Ecore_Drm2_Crtc_State *crtc_states;
-   Ecore_Drm2_Connector_State *conn_states;
-   Ecore_Drm2_Plane_State *plane_states;
-} Ecore_Drm2_Atomic_State;
+   int fd;
+   int x, y, w, h;
+   int pw, ph; // physical dimensions
+   Eina_Stringshare *name, *make, *model, *serial;
 
-/* opaque API structures */
-struct _Ecore_Drm2_Device
+   uint32_t subpixel;
+   uint16_t gamma;
+
+   struct
+     {
+        char eisa[13];
+        char monitor[13];
+        char pnp[5];
+        char serial[13];
+     } edid;
+
+   struct
+     {
+        const char *path;
+        double value, max;
+        Ecore_Drm2_Backlight_Type type;
+     } backlight;
+
+   Ecore_Drm2_Crtc *crtc;
+   Ecore_Drm2_Connector *conn;
+
+   Ecore_Thread *thread;
+
+   Eina_Bool primary : 1;
+   Eina_Bool enabled : 1;
+   Eina_Bool connected : 1;
+};
+
+struct _Ecore_Drm2_Connector
 {
-   Elput_Manager *em;
+   uint32_t id;
+   uint32_t type;
+   int fd;
+
+   drmModeConnector *conn;
+
+   Ecore_Drm2_Connector_State *state;
 
+   Ecore_Thread *thread;
+
+   Eina_Bool writeback : 1;
+};
+
+struct _Ecore_Drm2_Crtc
+{
+   uint32_t id;
+   uint32_t pipe;
    int fd;
 
-   Ecore_Drm2_Atomic_State *atomic_state;
+   drmModeCrtcPtr dcrtc;
+
+   /* TODO: store FBs */
+
+   Ecore_Drm2_Crtc_State *state;
+
+   Ecore_Thread *thread;
 };
 
-struct _Ecore_Drm2_Output
+struct _Ecore_Drm2_Device
 {
-   Eina_Stringshare *name, *make, *model, *serial;
+   Elput_Manager *em;
+
+   int fd;
+   int clock_id;
+
+   struct
+     {
+        int width, height;
+     } cursor;
+
+   Ecore_Event_Handler *session_hdlr;
+
+   Eina_List *crtcs;
+   Eina_List *conns;
+   Eina_List *displays;
+   Eina_List *planes;
+
+   Eina_Bool atomic : 1;
+   /* Eina_Bool gbm_mods : 1; */
+   Eina_Bool aspect_ratio : 1;
 };
 
 /* internal function prototypes */
-Eina_Bool _ecore_drm2_atomic_state_fill(Ecore_Drm2_Atomic_State *state, int fd);
-void _ecore_drm2_atomic_state_free(Ecore_Drm2_Atomic_State *state);
+Eina_Bool _ecore_drm2_crtcs_create(Ecore_Drm2_Device *dev);
+void _ecore_drm2_crtcs_destroy(Ecore_Drm2_Device *dev);
+
+Eina_Bool _ecore_drm2_connectors_create(Ecore_Drm2_Device *dev);
+void _ecore_drm2_connectors_destroy(Ecore_Drm2_Device *dev);
+
+Eina_Bool _ecore_drm2_displays_create(Ecore_Drm2_Device *dev);
+void _ecore_drm2_displays_destroy(Ecore_Drm2_Device *dev);
+
+Eina_Bool _ecore_drm2_planes_create(Ecore_Drm2_Device *dev);
+void _ecore_drm2_planes_destroy(Ecore_Drm2_Device *dev);
 
 /* external drm function prototypes (for dlopen) */
 extern void *(*sym_drmModeGetResources)(int fd);
@@ -191,5 +285,11 @@ extern void *(*sym_drmModeGetPlaneResources)(int fd);
 extern void (*sym_drmModeFreePlaneResources)(drmModePlaneResPtr ptr);
 extern void *(*sym_drmModeGetPlane)(int fd, uint32_t plane_id);
 extern void (*sym_drmModeFreePlane)(drmModePlanePtr ptr);
+extern void *(*sym_drmModeGetConnector)(int fd, uint32_t connectorId);
+extern void (*sym_drmModeFreeConnector)(drmModeConnectorPtr ptr);
+extern void *(*sym_drmModeGetEncoder)(int fd, uint32_t encoder_id);
+extern void (*sym_drmModeFreeEncoder)(drmModeEncoderPtr ptr);
+extern void *(*sym_drmModeGetCrtc)(int fd, uint32_t crtcId);
+extern void (*sym_drmModeFreeCrtc)(drmModeCrtcPtr ptr);
 
 #endif

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.

Reply via email to