1*61046927SAndroid Build Coastguard Worker #ifndef WAYLAND_DRM_H
2*61046927SAndroid Build Coastguard Worker #define WAYLAND_DRM_H
3*61046927SAndroid Build Coastguard Worker
4*61046927SAndroid Build Coastguard Worker #include <wayland-server.h>
5*61046927SAndroid Build Coastguard Worker
6*61046927SAndroid Build Coastguard Worker struct wl_display;
7*61046927SAndroid Build Coastguard Worker struct wl_resource;
8*61046927SAndroid Build Coastguard Worker struct wl_drm_buffer;
9*61046927SAndroid Build Coastguard Worker
10*61046927SAndroid Build Coastguard Worker struct wayland_drm_callbacks {
11*61046927SAndroid Build Coastguard Worker int (*authenticate)(void *user_data, uint32_t id);
12*61046927SAndroid Build Coastguard Worker
13*61046927SAndroid Build Coastguard Worker void (*reference_buffer)(void *user_data, uint32_t name, int fd,
14*61046927SAndroid Build Coastguard Worker struct wl_drm_buffer *buffer);
15*61046927SAndroid Build Coastguard Worker
16*61046927SAndroid Build Coastguard Worker void (*release_buffer)(void *user_data, struct wl_drm_buffer *buffer);
17*61046927SAndroid Build Coastguard Worker
18*61046927SAndroid Build Coastguard Worker bool (*is_format_supported)(void *user_data, uint32_t format);
19*61046927SAndroid Build Coastguard Worker };
20*61046927SAndroid Build Coastguard Worker
21*61046927SAndroid Build Coastguard Worker struct wl_drm {
22*61046927SAndroid Build Coastguard Worker struct wl_display *display;
23*61046927SAndroid Build Coastguard Worker struct wl_global *wl_drm_global;
24*61046927SAndroid Build Coastguard Worker
25*61046927SAndroid Build Coastguard Worker void *user_data;
26*61046927SAndroid Build Coastguard Worker char *device_name;
27*61046927SAndroid Build Coastguard Worker uint32_t flags;
28*61046927SAndroid Build Coastguard Worker
29*61046927SAndroid Build Coastguard Worker struct wayland_drm_callbacks callbacks;
30*61046927SAndroid Build Coastguard Worker
31*61046927SAndroid Build Coastguard Worker struct wl_buffer_interface buffer_interface;
32*61046927SAndroid Build Coastguard Worker };
33*61046927SAndroid Build Coastguard Worker
34*61046927SAndroid Build Coastguard Worker struct wl_drm_buffer {
35*61046927SAndroid Build Coastguard Worker struct wl_resource *resource;
36*61046927SAndroid Build Coastguard Worker struct wl_drm *drm;
37*61046927SAndroid Build Coastguard Worker int32_t width, height;
38*61046927SAndroid Build Coastguard Worker uint32_t format;
39*61046927SAndroid Build Coastguard Worker const void *driver_format;
40*61046927SAndroid Build Coastguard Worker int32_t offset[3];
41*61046927SAndroid Build Coastguard Worker int32_t stride[3];
42*61046927SAndroid Build Coastguard Worker void *driver_buffer;
43*61046927SAndroid Build Coastguard Worker };
44*61046927SAndroid Build Coastguard Worker
45*61046927SAndroid Build Coastguard Worker enum { WAYLAND_DRM_PRIME = 0x01 };
46*61046927SAndroid Build Coastguard Worker
47*61046927SAndroid Build Coastguard Worker static inline struct wl_drm_buffer *
wayland_drm_buffer_get(struct wl_drm * drm,struct wl_resource * resource)48*61046927SAndroid Build Coastguard Worker wayland_drm_buffer_get(struct wl_drm *drm, struct wl_resource *resource)
49*61046927SAndroid Build Coastguard Worker {
50*61046927SAndroid Build Coastguard Worker if (resource == NULL)
51*61046927SAndroid Build Coastguard Worker return NULL;
52*61046927SAndroid Build Coastguard Worker
53*61046927SAndroid Build Coastguard Worker if (wl_resource_instance_of(resource, &wl_buffer_interface,
54*61046927SAndroid Build Coastguard Worker &drm->buffer_interface))
55*61046927SAndroid Build Coastguard Worker return wl_resource_get_user_data(resource);
56*61046927SAndroid Build Coastguard Worker else
57*61046927SAndroid Build Coastguard Worker return NULL;
58*61046927SAndroid Build Coastguard Worker }
59*61046927SAndroid Build Coastguard Worker
60*61046927SAndroid Build Coastguard Worker struct wl_drm *
61*61046927SAndroid Build Coastguard Worker wayland_drm_init(struct wl_display *display, char *device_name,
62*61046927SAndroid Build Coastguard Worker const struct wayland_drm_callbacks *callbacks, void *user_data,
63*61046927SAndroid Build Coastguard Worker uint32_t flags);
64*61046927SAndroid Build Coastguard Worker
65*61046927SAndroid Build Coastguard Worker void
66*61046927SAndroid Build Coastguard Worker wayland_drm_uninit(struct wl_drm *drm);
67*61046927SAndroid Build Coastguard Worker
68*61046927SAndroid Build Coastguard Worker #endif
69