Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v4.20 145 lines 3.7 kB view raw
1#ifndef _VKMS_DRV_H_ 2#define _VKMS_DRV_H_ 3 4#include <drm/drmP.h> 5#include <drm/drm.h> 6#include <drm/drm_gem.h> 7#include <drm/drm_encoder.h> 8#include <linux/hrtimer.h> 9 10#define XRES_MIN 20 11#define YRES_MIN 20 12 13#define XRES_DEF 1024 14#define YRES_DEF 768 15 16#define XRES_MAX 8192 17#define YRES_MAX 8192 18 19extern bool enable_cursor; 20 21static const u32 vkms_formats[] = { 22 DRM_FORMAT_XRGB8888, 23}; 24 25static const u32 vkms_cursor_formats[] = { 26 DRM_FORMAT_ARGB8888, 27}; 28 29struct vkms_crc_data { 30 struct drm_framebuffer fb; 31 struct drm_rect src, dst; 32 unsigned int offset; 33 unsigned int pitch; 34 unsigned int cpp; 35}; 36 37/** 38 * vkms_plane_state - Driver specific plane state 39 * @base: base plane state 40 * @crc_data: data required for CRC computation 41 */ 42struct vkms_plane_state { 43 struct drm_plane_state base; 44 struct vkms_crc_data *crc_data; 45}; 46 47/** 48 * vkms_crtc_state - Driver specific CRTC state 49 * @base: base CRTC state 50 * @crc_work: work struct to compute and add CRC entries 51 * @n_frame_start: start frame number for computed CRC 52 * @n_frame_end: end frame number for computed CRC 53 */ 54struct vkms_crtc_state { 55 struct drm_crtc_state base; 56 struct work_struct crc_work; 57 u64 frame_start; 58 u64 frame_end; 59}; 60 61struct vkms_output { 62 struct drm_crtc crtc; 63 struct drm_encoder encoder; 64 struct drm_connector connector; 65 struct hrtimer vblank_hrtimer; 66 ktime_t period_ns; 67 struct drm_pending_vblank_event *event; 68 bool crc_enabled; 69 /* ordered wq for crc_work */ 70 struct workqueue_struct *crc_workq; 71 /* protects concurrent access to crc_data */ 72 spinlock_t lock; 73 /* protects concurrent access to crtc_state */ 74 spinlock_t state_lock; 75}; 76 77struct vkms_device { 78 struct drm_device drm; 79 struct platform_device *platform; 80 struct vkms_output output; 81}; 82 83struct vkms_gem_object { 84 struct drm_gem_object gem; 85 struct mutex pages_lock; /* Page lock used in page fault handler */ 86 struct page **pages; 87 unsigned int vmap_count; 88 void *vaddr; 89}; 90 91#define drm_crtc_to_vkms_output(target) \ 92 container_of(target, struct vkms_output, crtc) 93 94#define drm_device_to_vkms_device(target) \ 95 container_of(target, struct vkms_device, drm) 96 97#define drm_gem_to_vkms_gem(target)\ 98 container_of(target, struct vkms_gem_object, gem) 99 100#define to_vkms_crtc_state(target)\ 101 container_of(target, struct vkms_crtc_state, base) 102 103#define to_vkms_plane_state(target)\ 104 container_of(target, struct vkms_plane_state, base) 105 106/* CRTC */ 107int vkms_crtc_init(struct drm_device *dev, struct drm_crtc *crtc, 108 struct drm_plane *primary, struct drm_plane *cursor); 109 110bool vkms_get_vblank_timestamp(struct drm_device *dev, unsigned int pipe, 111 int *max_error, ktime_t *vblank_time, 112 bool in_vblank_irq); 113 114int vkms_output_init(struct vkms_device *vkmsdev); 115 116struct drm_plane *vkms_plane_init(struct vkms_device *vkmsdev, 117 enum drm_plane_type type); 118 119/* Gem stuff */ 120struct drm_gem_object *vkms_gem_create(struct drm_device *dev, 121 struct drm_file *file, 122 u32 *handle, 123 u64 size); 124 125vm_fault_t vkms_gem_fault(struct vm_fault *vmf); 126 127int vkms_dumb_create(struct drm_file *file, struct drm_device *dev, 128 struct drm_mode_create_dumb *args); 129 130int vkms_dumb_map(struct drm_file *file, struct drm_device *dev, 131 u32 handle, u64 *offset); 132 133void vkms_gem_free_object(struct drm_gem_object *obj); 134 135int vkms_gem_vmap(struct drm_gem_object *obj); 136 137void vkms_gem_vunmap(struct drm_gem_object *obj); 138 139/* CRC Support */ 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); 143void vkms_crc_work_handle(struct work_struct *work); 144 145#endif /* _VKMS_DRV_H_ */