Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
  1/* SPDX-License-Identifier: GPL-2.0+ */
  2
  3#ifndef _VKMS_DRV_H_
  4#define _VKMS_DRV_H_
  5
  6#include <linux/hrtimer.h>
  7
  8#include <drm/drm.h>
  9#include <drm/drm_gem.h>
 10#include <drm/drm_encoder.h>
 11
 12#define XRES_MIN    20
 13#define YRES_MIN    20
 14
 15#define XRES_DEF  1024
 16#define YRES_DEF   768
 17
 18#define XRES_MAX  8192
 19#define YRES_MAX  8192
 20
 21extern bool enable_cursor;
 22
 23struct vkms_composer {
 24	struct drm_framebuffer fb;
 25	struct drm_rect src, dst;
 26	unsigned int offset;
 27	unsigned int pitch;
 28	unsigned int cpp;
 29};
 30
 31/**
 32 * vkms_plane_state - Driver specific plane state
 33 * @base: base plane state
 34 * @composer: data required for composing computation
 35 */
 36struct vkms_plane_state {
 37	struct drm_plane_state base;
 38	struct vkms_composer *composer;
 39};
 40
 41/**
 42 * vkms_crtc_state - Driver specific CRTC state
 43 * @base: base CRTC state
 44 * @composer_work: work struct to compose and add CRC entries
 45 * @n_frame_start: start frame number for computed CRC
 46 * @n_frame_end: end frame number for computed CRC
 47 */
 48struct vkms_crtc_state {
 49	struct drm_crtc_state base;
 50	struct work_struct composer_work;
 51
 52	int num_active_planes;
 53	/* stack of active planes for crc computation, should be in z order */
 54	struct vkms_plane_state **active_planes;
 55
 56	/* below three are protected by vkms_output.composer_lock */
 57	bool crc_pending;
 58	u64 frame_start;
 59	u64 frame_end;
 60};
 61
 62struct vkms_output {
 63	struct drm_crtc crtc;
 64	struct drm_encoder encoder;
 65	struct drm_connector connector;
 66	struct hrtimer vblank_hrtimer;
 67	ktime_t period_ns;
 68	struct drm_pending_vblank_event *event;
 69	/* ordered wq for composer_work */
 70	struct workqueue_struct *composer_workq;
 71	/* protects concurrent access to composer */
 72	spinlock_t lock;
 73
 74	/* protected by @lock */
 75	bool composer_enabled;
 76	struct vkms_crtc_state *composer_state;
 77
 78	spinlock_t composer_lock;
 79};
 80
 81struct vkms_device {
 82	struct drm_device drm;
 83	struct platform_device *platform;
 84	struct vkms_output output;
 85};
 86
 87struct vkms_gem_object {
 88	struct drm_gem_object gem;
 89	struct mutex pages_lock; /* Page lock used in page fault handler */
 90	struct page **pages;
 91	unsigned int vmap_count;
 92	void *vaddr;
 93};
 94
 95#define drm_crtc_to_vkms_output(target) \
 96	container_of(target, struct vkms_output, crtc)
 97
 98#define drm_device_to_vkms_device(target) \
 99	container_of(target, struct vkms_device, drm)
100
101#define drm_gem_to_vkms_gem(target)\
102	container_of(target, struct vkms_gem_object, gem)
103
104#define to_vkms_crtc_state(target)\
105	container_of(target, struct vkms_crtc_state, base)
106
107#define to_vkms_plane_state(target)\
108	container_of(target, struct vkms_plane_state, base)
109
110/* CRTC */
111int vkms_crtc_init(struct drm_device *dev, struct drm_crtc *crtc,
112		   struct drm_plane *primary, struct drm_plane *cursor);
113
114int vkms_output_init(struct vkms_device *vkmsdev, int index);
115
116struct drm_plane *vkms_plane_init(struct vkms_device *vkmsdev,
117				  enum drm_plane_type type, int index);
118
119/* Gem stuff */
120vm_fault_t vkms_gem_fault(struct vm_fault *vmf);
121
122int vkms_dumb_create(struct drm_file *file, struct drm_device *dev,
123		     struct drm_mode_create_dumb *args);
124
125void vkms_gem_free_object(struct drm_gem_object *obj);
126
127int vkms_gem_vmap(struct drm_gem_object *obj);
128
129void vkms_gem_vunmap(struct drm_gem_object *obj);
130
131/* Prime */
132struct drm_gem_object *
133vkms_prime_import_sg_table(struct drm_device *dev,
134			   struct dma_buf_attachment *attach,
135			   struct sg_table *sg);
136
137/* CRC Support */
138const char *const *vkms_get_crc_sources(struct drm_crtc *crtc,
139					size_t *count);
140int vkms_set_crc_source(struct drm_crtc *crtc, const char *src_name);
141int vkms_verify_crc_source(struct drm_crtc *crtc, const char *source_name,
142			   size_t *values_cnt);
143
144/* Composer Support */
145void vkms_composer_worker(struct work_struct *work);
146
147#endif /* _VKMS_DRV_H_ */