2018-05-14 17:33:46 +03:00
# ifndef _VKMS_DRV_H_
# define _VKMS_DRV_H_
2018-05-16 20:56:21 -03:00
# include <drm/drmP.h>
# include <drm/drm.h>
2018-07-11 23:01:47 -03:00
# include <drm/drm_gem.h>
2018-05-16 20:56:21 -03:00
# include <drm/drm_encoder.h>
2018-07-11 23:02:26 -03:00
# include <linux/hrtimer.h>
2018-05-16 20:56:21 -03:00
2018-07-11 23:02:14 -03:00
# define XRES_MIN 32
# define YRES_MIN 32
# define XRES_DEF 1024
# define YRES_DEF 768
# define XRES_MAX 8192
# define YRES_MAX 8192
2018-05-16 20:56:21 -03:00
static const u32 vkms_formats [ ] = {
DRM_FORMAT_XRGB8888 ,
} ;
struct vkms_output {
struct drm_crtc crtc ;
struct drm_encoder encoder ;
struct drm_connector connector ;
2018-07-11 23:02:26 -03:00
struct hrtimer vblank_hrtimer ;
ktime_t period_ns ;
struct drm_pending_vblank_event * event ;
2018-05-16 20:56:21 -03:00
} ;
2018-05-14 17:33:46 +03:00
struct vkms_device {
struct drm_device drm ;
struct platform_device * platform ;
2018-05-16 20:56:21 -03:00
struct vkms_output output ;
2018-05-14 17:33:46 +03:00
} ;
2018-07-11 23:01:47 -03:00
struct vkms_gem_object {
struct drm_gem_object gem ;
struct mutex pages_lock ; /* Page lock used in page fault handler */
struct page * * pages ;
} ;
2018-07-11 23:02:26 -03:00
# define drm_crtc_to_vkms_output(target) \
container_of ( target , struct vkms_output , crtc )
# define drm_device_to_vkms_device(target) \
container_of ( target , struct vkms_device , drm )
/* CRTC */
2018-05-16 20:56:21 -03:00
int vkms_crtc_init ( struct drm_device * dev , struct drm_crtc * crtc ,
struct drm_plane * primary , struct drm_plane * cursor ) ;
2018-07-11 23:02:26 -03:00
bool vkms_get_vblank_timestamp ( struct drm_device * dev , unsigned int pipe ,
int * max_error , ktime_t * vblank_time ,
bool in_vblank_irq ) ;
2018-05-16 20:56:21 -03:00
int vkms_output_init ( struct vkms_device * vkmsdev ) ;
struct drm_plane * vkms_plane_init ( struct vkms_device * vkmsdev ) ;
2018-07-11 23:01:47 -03:00
/* Gem stuff */
struct drm_gem_object * vkms_gem_create ( struct drm_device * dev ,
struct drm_file * file ,
u32 * handle ,
u64 size ) ;
int vkms_gem_fault ( struct vm_fault * vmf ) ;
int vkms_dumb_create ( struct drm_file * file , struct drm_device * dev ,
struct drm_mode_create_dumb * args ) ;
int vkms_dumb_map ( struct drm_file * file , struct drm_device * dev ,
u32 handle , u64 * offset ) ;
void vkms_gem_free_object ( struct drm_gem_object * obj ) ;
2018-05-14 17:33:46 +03:00
# endif /* _VKMS_DRV_H_ */