drm backend: implement DRM lease issuance

This commit is contained in:
Drew DeVault 2019-06-27 15:23:50 -04:00
parent 05ed202183
commit 1b96ba8232
2 changed files with 168 additions and 10 deletions

View file

@ -47,6 +47,8 @@ struct wlr_drm_crtc {
// Legacy only
drmModeCrtc *legacy_crtc;
uint32_t lessee_id;
struct wlr_drm_plane *primary;
struct wlr_drm_plane *cursor;
@ -98,6 +100,8 @@ enum wlr_drm_connector_state {
WLR_DRM_CONN_NEEDS_MODESET,
WLR_DRM_CONN_CLEANUP,
WLR_DRM_CONN_CONNECTED,
// Connector has been leased to another DRM master
WLR_DRM_CONN_LEASED,
};
struct wlr_drm_mode {
@ -112,6 +116,9 @@ struct wlr_drm_connector {
struct wlr_output_mode *desired_mode;
bool desired_enabled;
uint32_t id;
uint32_t lessee_id;
void (*lease_terminated_cb)(struct wlr_drm_connector *, void *);
void *lease_terminated_data;
struct wlr_drm_crtc *crtc;
uint32_t possible_crtc;
@ -149,4 +156,11 @@ bool set_drm_connector_gamma(struct wlr_output *output, size_t size,
bool drm_connector_set_mode(struct wlr_output *output,
struct wlr_output_mode *mode);
/** Returns the leased file descriptor */
int drm_create_lease(struct wlr_drm_backend *backend,
struct wlr_drm_connector **conns, int nconns, uint32_t *lessee_id,
void (*lease_terminated_cb)(struct wlr_drm_connector *, void *),
void *lease_terminated_data);
int drm_terminate_lease(struct wlr_drm_backend *backend, uint32_t lessee_id);
#endif