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.