Instead of passing display-ops to every helper store it in vdrm-objects.
During vdrm-setup we set the pointer and reuse it in all helpers. This
simplifies the function headers and allows calling them from
helper-callbacks without requiring a pointer from the respective user.
Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
uint64_t has_dumb;
struct uterm_drm_video *vdrm;
- ret = uterm_drm_video_init(video, node, NULL, NULL);
+ ret = uterm_drm_video_init(video, node, &drm2d_display_ops,
+ NULL, NULL);
if (ret)
return ret;
vdrm = video->data;
static int video_poll(struct uterm_video *video)
{
- return uterm_drm_video_poll(video, &drm2d_display_ops);
+ return uterm_drm_video_poll(video);
}
static void video_sleep(struct uterm_video *video)
{
int ret;
- ret = uterm_drm_video_wake_up(video, &drm2d_display_ops);
+ ret = uterm_drm_video_wake_up(video);
if (ret)
return ret;
return -ENOMEM;
memset(v3d, 0, sizeof(*v3d));
- ret = uterm_drm_video_init(video, node, page_flip_handler, v3d);
+ ret = uterm_drm_video_init(video, node, &drm_display_ops,
+ page_flip_handler, v3d);
if (ret)
goto err_free;
vdrm = video->data;
static int video_poll(struct uterm_video *video)
{
- return uterm_drm_video_poll(video, &drm_display_ops);
+ return uterm_drm_video_poll(video);
}
static void video_sleep(struct uterm_video *video)
{
int ret;
- ret = uterm_drm_video_wake_up(video, &drm_display_ops);
+ ret = uterm_drm_video_wake_up(video);
if (ret)
return ret;
}
int uterm_drm_video_init(struct uterm_video *video, const char *node,
+ const struct display_ops *display_ops,
uterm_drm_page_flip_t pflip, void *data)
{
struct uterm_drm_video *vdrm;
video->data = vdrm;
vdrm->data = data;
vdrm->page_flip = pflip;
+ vdrm->display_ops = display_ops;
vdrm->fd = open(node, O_RDWR | O_CLOEXEC | O_NONBLOCK);
if (vdrm->fd < 0) {
}
static void bind_display(struct uterm_video *video, drmModeRes *res,
- drmModeConnector *conn,
- const struct display_ops *ops)
+ drmModeConnector *conn)
{
struct uterm_drm_video *vdrm = video->data;
struct uterm_display *disp;
struct uterm_mode *mode;
int ret, i;
- ret = display_new(&disp, ops);
+ ret = display_new(&disp, vdrm->display_ops);
if (ret)
return;
ddrm = disp->data;
}
int uterm_drm_video_hotplug(struct uterm_video *video,
- const struct display_ops *ops,
bool read_dpms)
{
struct uterm_drm_video *vdrm = video->data;
}
if (iter == &video->displays)
- bind_display(video, res, conn, ops);
+ bind_display(video, res, conn);
drmModeFreeConnector(conn);
}
return 0;
}
-int uterm_drm_video_wake_up(struct uterm_video *video,
- const struct display_ops *ops)
+int uterm_drm_video_wake_up(struct uterm_video *video)
{
int ret;
struct uterm_drm_video *vdrm = video->data;
}
video->flags |= VIDEO_AWAKE;
- ret = uterm_drm_video_hotplug(video, ops, true);
+ ret = uterm_drm_video_hotplug(video, true);
if (ret) {
drmDropMaster(vdrm->fd);
return ret;
drmDropMaster(vdrm->fd);
}
-int uterm_drm_video_poll(struct uterm_video *video,
- const struct display_ops *ops)
+int uterm_drm_video_poll(struct uterm_video *video)
{
video->flags |= VIDEO_HOTPLUG;
- return uterm_drm_video_hotplug(video, ops, false);
+ return uterm_drm_video_hotplug(video, false);
}
/* Waits for events on DRM fd for \mtimeout milliseconds and returns 0 if the
uterm_drm_page_flip_t page_flip;
void *data;
struct shl_timer *timer;
+ const struct display_ops *display_ops;
};
int uterm_drm_video_init(struct uterm_video *video, const char *node,
+ const struct display_ops *display_ops,
uterm_drm_page_flip_t pflip, void *data);
void uterm_drm_video_destroy(struct uterm_video *video);
int uterm_drm_video_find_crtc(struct uterm_video *video, drmModeRes *res,
drmModeEncoder *enc);
-int uterm_drm_video_hotplug(struct uterm_video *video,
- const struct display_ops *ops, bool read_dpms);
-int uterm_drm_video_wake_up(struct uterm_video *video,
- const struct display_ops *ops);
+int uterm_drm_video_hotplug(struct uterm_video *video, bool read_dpms);
+int uterm_drm_video_wake_up(struct uterm_video *video);
void uterm_drm_video_sleep(struct uterm_video *video);
-int uterm_drm_video_poll(struct uterm_video *video,
- const struct display_ops *ops);
+int uterm_drm_video_poll(struct uterm_video *video);
int uterm_drm_video_wait_pflip(struct uterm_video *video,
unsigned int *mtimeout);