Compare commits
2 Commits
3ab68831da
...
c70d27f7f3
Author | SHA1 | Date |
---|---|---|
Christopher Michael | c70d27f7f3 | |
Christopher Michael | 1e4761291c |
|
@ -4,6 +4,25 @@
|
||||||
# define DRM_MODE_CONNECTOR_WRITEBACK 18
|
# define DRM_MODE_CONNECTOR_WRITEBACK 18
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static Eina_Thread_Queue *thq = NULL;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
Eina_Thread_Queue_Msg head;
|
||||||
|
Ecore_Drm2_Thread_Op_Code code;
|
||||||
|
} Thread_Msg;
|
||||||
|
|
||||||
|
static void
|
||||||
|
_ecore_drm2_connector_state_thread_send(Ecore_Drm2_Thread_Op_Code code)
|
||||||
|
{
|
||||||
|
Thread_Msg *msg;
|
||||||
|
void *ref;
|
||||||
|
|
||||||
|
msg = eina_thread_queue_send(thq, sizeof(Thread_Msg), &ref);
|
||||||
|
msg->code = code;
|
||||||
|
eina_thread_queue_send_done(thq, ref);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_ecore_drm2_connector_state_debug(Ecore_Drm2_Connector *conn)
|
_ecore_drm2_connector_state_debug(Ecore_Drm2_Connector *conn)
|
||||||
{
|
{
|
||||||
|
@ -106,39 +125,56 @@ cont:
|
||||||
}
|
}
|
||||||
|
|
||||||
sym_drmModeFreeObjectProperties(oprops);
|
sym_drmModeFreeObjectProperties(oprops);
|
||||||
|
|
||||||
|
/* send message to thread for debug printing connector state */
|
||||||
|
_ecore_drm2_connector_state_thread_send(ECORE_DRM2_THREAD_CODE_DEBUG);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_ecore_drm2_connector_state_thread(void *data, Ecore_Thread *thread EINA_UNUSED)
|
_ecore_drm2_connector_state_commit(Ecore_Drm2_Connector *conn EINA_UNUSED)
|
||||||
|
{
|
||||||
|
DBG("Connector State Commit");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_ecore_drm2_connector_state_thread(void *data, Ecore_Thread *thread)
|
||||||
{
|
{
|
||||||
Ecore_Drm2_Connector *conn;
|
Ecore_Drm2_Connector *conn;
|
||||||
|
Thread_Msg *msg;
|
||||||
|
void *ref;
|
||||||
|
|
||||||
conn = data;
|
conn = data;
|
||||||
if (!conn->state)
|
|
||||||
_ecore_drm2_connector_state_fill(conn);
|
eina_thread_name_set(eina_thread_self(), "Ecore-drm2-connector");
|
||||||
else
|
|
||||||
|
while (!ecore_thread_check(thread))
|
||||||
{
|
{
|
||||||
/* TODO: update atomic state for commit */
|
msg = eina_thread_queue_wait(thq, &ref);
|
||||||
|
if (msg)
|
||||||
|
{
|
||||||
|
switch (msg->code)
|
||||||
|
{
|
||||||
|
case ECORE_DRM2_THREAD_CODE_FILL:
|
||||||
|
_ecore_drm2_connector_state_fill(conn);
|
||||||
|
break;
|
||||||
|
case ECORE_DRM2_THREAD_CODE_COMMIT:
|
||||||
|
_ecore_drm2_connector_state_commit(conn);
|
||||||
|
break;
|
||||||
|
case ECORE_DRM2_THREAD_CODE_DEBUG:
|
||||||
|
_ecore_drm2_connector_state_debug(conn);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
eina_thread_queue_wait_done(thq, ref);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_ecore_drm2_connector_state_thread_end(void *data, Ecore_Thread *thread EINA_UNUSED)
|
_ecore_drm2_connector_state_thread_notify(void *data EINA_UNUSED, Ecore_Thread *thread EINA_UNUSED, void *msg)
|
||||||
{
|
{
|
||||||
Ecore_Drm2_Connector *conn;
|
free(msg);
|
||||||
|
|
||||||
conn = data;
|
|
||||||
/* conn->thread = NULL; */
|
|
||||||
_ecore_drm2_connector_state_debug(conn);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_ecore_drm2_connector_state_thread_cancel(void *data, Ecore_Thread *thread EINA_UNUSED)
|
|
||||||
{
|
|
||||||
Ecore_Drm2_Connector *conn;
|
|
||||||
|
|
||||||
conn = data;
|
|
||||||
conn->thread = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static Ecore_Drm2_Connector *
|
static Ecore_Drm2_Connector *
|
||||||
|
@ -179,6 +215,8 @@ _ecore_drm2_connectors_create(Ecore_Drm2_Device *dev)
|
||||||
|
|
||||||
/* TOOD: set dev->min/max width & height ? */
|
/* TOOD: set dev->min/max width & height ? */
|
||||||
|
|
||||||
|
thq = eina_thread_queue_new();
|
||||||
|
|
||||||
for (; i < res->count_connectors; i++)
|
for (; i < res->count_connectors; i++)
|
||||||
{
|
{
|
||||||
uint32_t conn_id;
|
uint32_t conn_id;
|
||||||
|
@ -196,10 +234,8 @@ _ecore_drm2_connectors_create(Ecore_Drm2_Device *dev)
|
||||||
/* NB: Use an explicit thread to fill crtc atomic state */
|
/* NB: Use an explicit thread to fill crtc atomic state */
|
||||||
c->thread =
|
c->thread =
|
||||||
ecore_thread_feedback_run(_ecore_drm2_connector_state_thread,
|
ecore_thread_feedback_run(_ecore_drm2_connector_state_thread,
|
||||||
NULL, //_ecore_drm2_connector_state_thread_notify,
|
_ecore_drm2_connector_state_thread_notify,
|
||||||
_ecore_drm2_connector_state_thread_end,
|
NULL, NULL, c, EINA_TRUE);
|
||||||
_ecore_drm2_connector_state_thread_cancel,
|
|
||||||
c, EINA_TRUE);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -225,4 +261,7 @@ _ecore_drm2_connectors_destroy(Ecore_Drm2_Device *dev)
|
||||||
free(conn->state);
|
free(conn->state);
|
||||||
free(conn);
|
free(conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
eina_thread_queue_free(thq);
|
||||||
|
thq = NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -181,7 +181,7 @@ _ecore_drm2_crtc_create(Ecore_Drm2_Device *dev, drmModeCrtcPtr dcrtc, uint32_t p
|
||||||
if (!crtc)
|
if (!crtc)
|
||||||
{
|
{
|
||||||
ERR("Could not allocate space for CRTC");
|
ERR("Could not allocate space for CRTC");
|
||||||
goto err;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
crtc->id = dcrtc->crtc_id;
|
crtc->id = dcrtc->crtc_id;
|
||||||
|
@ -193,10 +193,6 @@ _ecore_drm2_crtc_create(Ecore_Drm2_Device *dev, drmModeCrtcPtr dcrtc, uint32_t p
|
||||||
dev->crtcs = eina_list_append(dev->crtcs, crtc);
|
dev->crtcs = eina_list_append(dev->crtcs, crtc);
|
||||||
|
|
||||||
return crtc;
|
return crtc;
|
||||||
|
|
||||||
err:
|
|
||||||
free(crtc);
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Eina_Bool
|
Eina_Bool
|
||||||
|
@ -211,6 +207,8 @@ _ecore_drm2_crtcs_create(Ecore_Drm2_Device *dev)
|
||||||
res = sym_drmModeGetResources(dev->fd);
|
res = sym_drmModeGetResources(dev->fd);
|
||||||
if (!res) return EINA_FALSE;
|
if (!res) return EINA_FALSE;
|
||||||
|
|
||||||
|
thq = eina_thread_queue_new();
|
||||||
|
|
||||||
for (; i < res->count_crtcs; i++)
|
for (; i < res->count_crtcs; i++)
|
||||||
{
|
{
|
||||||
/* try to get this crtc from drm */
|
/* try to get this crtc from drm */
|
||||||
|
@ -221,7 +219,6 @@ _ecore_drm2_crtcs_create(Ecore_Drm2_Device *dev)
|
||||||
if (!crtc) goto err;
|
if (!crtc) goto err;
|
||||||
|
|
||||||
/* NB: Use an explicit thread to fill crtc atomic state */
|
/* NB: Use an explicit thread to fill crtc atomic state */
|
||||||
thq = eina_thread_queue_new();
|
|
||||||
crtc->thread =
|
crtc->thread =
|
||||||
ecore_thread_feedback_run(_ecore_drm2_crtc_state_thread,
|
ecore_thread_feedback_run(_ecore_drm2_crtc_state_thread,
|
||||||
_ecore_drm2_crtc_state_thread_notify,
|
_ecore_drm2_crtc_state_thread_notify,
|
||||||
|
|
Loading…
Reference in New Issue