aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/vmwgfx/vmwgfx_drv.h')
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_drv.h64
1 files changed, 61 insertions, 3 deletions
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
index d08753e8fd94..9e60de95b863 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
@@ -43,10 +43,10 @@
43#include <linux/sync_file.h> 43#include <linux/sync_file.h>
44 44
45#define VMWGFX_DRIVER_NAME "vmwgfx" 45#define VMWGFX_DRIVER_NAME "vmwgfx"
46#define VMWGFX_DRIVER_DATE "20170612" 46#define VMWGFX_DRIVER_DATE "20180322"
47#define VMWGFX_DRIVER_MAJOR 2 47#define VMWGFX_DRIVER_MAJOR 2
48#define VMWGFX_DRIVER_MINOR 14 48#define VMWGFX_DRIVER_MINOR 14
49#define VMWGFX_DRIVER_PATCHLEVEL 0 49#define VMWGFX_DRIVER_PATCHLEVEL 1
50#define VMWGFX_FILE_PAGE_OFFSET 0x00100000 50#define VMWGFX_FILE_PAGE_OFFSET 0x00100000
51#define VMWGFX_FIFO_STATIC_SIZE (1024*1024) 51#define VMWGFX_FIFO_STATIC_SIZE (1024*1024)
52#define VMWGFX_MAX_RELOCATIONS 2048 52#define VMWGFX_MAX_RELOCATIONS 2048
@@ -92,6 +92,8 @@ struct vmw_dma_buffer {
92 s32 pin_count; 92 s32 pin_count;
93 /* Not ref-counted. Protected by binding_mutex */ 93 /* Not ref-counted. Protected by binding_mutex */
94 struct vmw_resource *dx_query_ctx; 94 struct vmw_resource *dx_query_ctx;
95 /* Protected by reservation */
96 struct ttm_bo_kmap_obj map;
95}; 97};
96 98
97/** 99/**
@@ -423,6 +425,7 @@ struct vmw_private {
423 struct vmw_framebuffer *implicit_fb; 425 struct vmw_framebuffer *implicit_fb;
424 struct mutex global_kms_state_mutex; 426 struct mutex global_kms_state_mutex;
425 spinlock_t cursor_lock; 427 spinlock_t cursor_lock;
428 struct drm_atomic_state *suspend_state;
426 429
427 /* 430 /*
428 * Context and surface management. 431 * Context and surface management.
@@ -494,8 +497,8 @@ struct vmw_private {
494 struct vmw_master *active_master; 497 struct vmw_master *active_master;
495 struct vmw_master fbdev_master; 498 struct vmw_master fbdev_master;
496 struct notifier_block pm_nb; 499 struct notifier_block pm_nb;
497 bool suspended;
498 bool refuse_hibernation; 500 bool refuse_hibernation;
501 bool suspend_locked;
499 502
500 struct mutex release_mutex; 503 struct mutex release_mutex;
501 atomic_t num_fifo_resources; 504 atomic_t num_fifo_resources;
@@ -673,11 +676,13 @@ extern void vmw_resource_move_notify(struct ttm_buffer_object *bo,
673 struct ttm_mem_reg *mem); 676 struct ttm_mem_reg *mem);
674extern void vmw_query_move_notify(struct ttm_buffer_object *bo, 677extern void vmw_query_move_notify(struct ttm_buffer_object *bo,
675 struct ttm_mem_reg *mem); 678 struct ttm_mem_reg *mem);
679extern void vmw_resource_swap_notify(struct ttm_buffer_object *bo);
676extern int vmw_query_readback_all(struct vmw_dma_buffer *dx_query_mob); 680extern int vmw_query_readback_all(struct vmw_dma_buffer *dx_query_mob);
677extern void vmw_fence_single_bo(struct ttm_buffer_object *bo, 681extern void vmw_fence_single_bo(struct ttm_buffer_object *bo,
678 struct vmw_fence_obj *fence); 682 struct vmw_fence_obj *fence);
679extern void vmw_resource_evict_all(struct vmw_private *dev_priv); 683extern void vmw_resource_evict_all(struct vmw_private *dev_priv);
680 684
685
681/** 686/**
682 * DMA buffer helper routines - vmwgfx_dmabuf.c 687 * DMA buffer helper routines - vmwgfx_dmabuf.c
683 */ 688 */
@@ -700,6 +705,8 @@ extern int vmw_dmabuf_unpin(struct vmw_private *vmw_priv,
700extern void vmw_bo_get_guest_ptr(const struct ttm_buffer_object *buf, 705extern void vmw_bo_get_guest_ptr(const struct ttm_buffer_object *buf,
701 SVGAGuestPtr *ptr); 706 SVGAGuestPtr *ptr);
702extern void vmw_bo_pin_reserved(struct vmw_dma_buffer *bo, bool pin); 707extern void vmw_bo_pin_reserved(struct vmw_dma_buffer *bo, bool pin);
708extern void *vmw_dma_buffer_map_and_cache(struct vmw_dma_buffer *vbo);
709extern void vmw_dma_buffer_unmap(struct vmw_dma_buffer *vbo);
703 710
704/** 711/**
705 * Misc Ioctl functionality - vmwgfx_ioctl.c 712 * Misc Ioctl functionality - vmwgfx_ioctl.c
@@ -766,6 +773,7 @@ extern struct ttm_placement vmw_evictable_placement;
766extern struct ttm_placement vmw_srf_placement; 773extern struct ttm_placement vmw_srf_placement;
767extern struct ttm_placement vmw_mob_placement; 774extern struct ttm_placement vmw_mob_placement;
768extern struct ttm_placement vmw_mob_ne_placement; 775extern struct ttm_placement vmw_mob_ne_placement;
776extern struct ttm_placement vmw_nonfixed_placement;
769extern struct ttm_bo_driver vmw_bo_driver; 777extern struct ttm_bo_driver vmw_bo_driver;
770extern int vmw_dma_quiescent(struct drm_device *dev); 778extern int vmw_dma_quiescent(struct drm_device *dev);
771extern int vmw_bo_map_dma(struct ttm_buffer_object *bo); 779extern int vmw_bo_map_dma(struct ttm_buffer_object *bo);
@@ -902,6 +910,7 @@ int vmw_fb_init(struct vmw_private *vmw_priv);
902int vmw_fb_close(struct vmw_private *dev_priv); 910int vmw_fb_close(struct vmw_private *dev_priv);
903int vmw_fb_off(struct vmw_private *vmw_priv); 911int vmw_fb_off(struct vmw_private *vmw_priv);
904int vmw_fb_on(struct vmw_private *vmw_priv); 912int vmw_fb_on(struct vmw_private *vmw_priv);
913void vmw_fb_refresh(struct vmw_private *vmw_priv);
905 914
906/** 915/**
907 * Kernel modesetting - vmwgfx_kms.c 916 * Kernel modesetting - vmwgfx_kms.c
@@ -938,6 +947,8 @@ int vmw_kms_present(struct vmw_private *dev_priv,
938int vmw_kms_update_layout_ioctl(struct drm_device *dev, void *data, 947int vmw_kms_update_layout_ioctl(struct drm_device *dev, void *data,
939 struct drm_file *file_priv); 948 struct drm_file *file_priv);
940void vmw_kms_legacy_hotspot_clear(struct vmw_private *dev_priv); 949void vmw_kms_legacy_hotspot_clear(struct vmw_private *dev_priv);
950int vmw_kms_suspend(struct drm_device *dev);
951int vmw_kms_resume(struct drm_device *dev);
941 952
942int vmw_dumb_create(struct drm_file *file_priv, 953int vmw_dumb_create(struct drm_file *file_priv,
943 struct drm_device *dev, 954 struct drm_device *dev,
@@ -1165,6 +1176,53 @@ extern int vmw_cmdbuf_cur_flush(struct vmw_cmdbuf_man *man,
1165 bool interruptible); 1176 bool interruptible);
1166extern void vmw_cmdbuf_irqthread(struct vmw_cmdbuf_man *man); 1177extern void vmw_cmdbuf_irqthread(struct vmw_cmdbuf_man *man);
1167 1178
1179/* CPU blit utilities - vmwgfx_blit.c */
1180
1181/**
1182 * struct vmw_diff_cpy - CPU blit information structure
1183 *
1184 * @rect: The output bounding box rectangle.
1185 * @line: The current line of the blit.
1186 * @line_offset: Offset of the current line segment.
1187 * @cpp: Bytes per pixel (granularity information).
1188 * @memcpy: Which memcpy function to use.
1189 */
1190struct vmw_diff_cpy {
1191 struct drm_rect rect;
1192 size_t line;
1193 size_t line_offset;
1194 int cpp;
1195 void (*do_cpy)(struct vmw_diff_cpy *diff, u8 *dest, const u8 *src,
1196 size_t n);
1197};
1198
1199#define VMW_CPU_BLIT_INITIALIZER { \
1200 .do_cpy = vmw_memcpy, \
1201}
1202
1203#define VMW_CPU_BLIT_DIFF_INITIALIZER(_cpp) { \
1204 .line = 0, \
1205 .line_offset = 0, \
1206 .rect = { .x1 = INT_MAX/2, \
1207 .y1 = INT_MAX/2, \
1208 .x2 = INT_MIN/2, \
1209 .y2 = INT_MIN/2 \
1210 }, \
1211 .cpp = _cpp, \
1212 .do_cpy = vmw_diff_memcpy, \
1213}
1214
1215void vmw_diff_memcpy(struct vmw_diff_cpy *diff, u8 *dest, const u8 *src,
1216 size_t n);
1217
1218void vmw_memcpy(struct vmw_diff_cpy *diff, u8 *dest, const u8 *src, size_t n);
1219
1220int vmw_bo_cpu_blit(struct ttm_buffer_object *dst,
1221 u32 dst_offset, u32 dst_stride,
1222 struct ttm_buffer_object *src,
1223 u32 src_offset, u32 src_stride,
1224 u32 w, u32 h,
1225 struct vmw_diff_cpy *diff);
1168 1226
1169/** 1227/**
1170 * Inline helper functions 1228 * Inline helper functions