#ifndef _VKMS_DRV_H_
#define _VKMS_DRV_H_
#include <linux/hrtimer.h>
#include <drm/drm.h>
#include <drm/drm_framebuffer.h>
#include <drm/drm_gem.h>
#include <drm/drm_gem_atomic_helper.h>
#include <drm/drm_encoder.h>
#include <drm/drm_writeback.h>
#define XRES_MIN …
#define YRES_MIN …
#define XRES_DEF …
#define YRES_DEF …
#define XRES_MAX …
#define YRES_MAX …
#define NUM_OVERLAY_PLANES …
#define VKMS_LUT_SIZE …
struct vkms_frame_info { … };
struct pixel_argb_u16 { … };
struct line_buffer { … };
struct vkms_writeback_job { … };
struct vkms_plane_state { … };
struct vkms_plane { … };
struct vkms_color_lut { … };
struct vkms_crtc_state { … };
struct vkms_output { … };
struct vkms_device;
struct vkms_config { … };
struct vkms_device { … };
#define drm_crtc_to_vkms_output(target) …
#define drm_device_to_vkms_device(target) …
#define to_vkms_crtc_state(target) …
#define to_vkms_plane_state(target) …
int vkms_crtc_init(struct drm_device *dev, struct drm_crtc *crtc,
struct drm_plane *primary, struct drm_plane *cursor);
int vkms_output_init(struct vkms_device *vkmsdev, int index);
struct vkms_plane *vkms_plane_init(struct vkms_device *vkmsdev,
enum drm_plane_type type, int index);
const char *const *vkms_get_crc_sources(struct drm_crtc *crtc,
size_t *count);
int vkms_set_crc_source(struct drm_crtc *crtc, const char *src_name);
int vkms_verify_crc_source(struct drm_crtc *crtc, const char *source_name,
size_t *values_cnt);
void vkms_composer_worker(struct work_struct *work);
void vkms_set_composer(struct vkms_output *out, bool enabled);
void vkms_compose_row(struct line_buffer *stage_buffer, struct vkms_plane_state *plane, int y);
void vkms_writeback_row(struct vkms_writeback_job *wb, const struct line_buffer *src_buffer, int y);
int vkms_enable_writeback_connector(struct vkms_device *vkmsdev);
#endif