diff options
Diffstat (limited to 'drivers/gpu/drm/vmwgfx/vmwgfx_drv.h')
-rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_drv.h | 64 |
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); |
674 | extern void vmw_query_move_notify(struct ttm_buffer_object *bo, | 677 | extern void vmw_query_move_notify(struct ttm_buffer_object *bo, |
675 | struct ttm_mem_reg *mem); | 678 | struct ttm_mem_reg *mem); |
679 | extern void vmw_resource_swap_notify(struct ttm_buffer_object *bo); | ||
676 | extern int vmw_query_readback_all(struct vmw_dma_buffer *dx_query_mob); | 680 | extern int vmw_query_readback_all(struct vmw_dma_buffer *dx_query_mob); |
677 | extern void vmw_fence_single_bo(struct ttm_buffer_object *bo, | 681 | extern void vmw_fence_single_bo(struct ttm_buffer_object *bo, |
678 | struct vmw_fence_obj *fence); | 682 | struct vmw_fence_obj *fence); |
679 | extern void vmw_resource_evict_all(struct vmw_private *dev_priv); | 683 | extern 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, | |||
700 | extern void vmw_bo_get_guest_ptr(const struct ttm_buffer_object *buf, | 705 | extern void vmw_bo_get_guest_ptr(const struct ttm_buffer_object *buf, |
701 | SVGAGuestPtr *ptr); | 706 | SVGAGuestPtr *ptr); |
702 | extern void vmw_bo_pin_reserved(struct vmw_dma_buffer *bo, bool pin); | 707 | extern void vmw_bo_pin_reserved(struct vmw_dma_buffer *bo, bool pin); |
708 | extern void *vmw_dma_buffer_map_and_cache(struct vmw_dma_buffer *vbo); | ||
709 | extern 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; | |||
766 | extern struct ttm_placement vmw_srf_placement; | 773 | extern struct ttm_placement vmw_srf_placement; |
767 | extern struct ttm_placement vmw_mob_placement; | 774 | extern struct ttm_placement vmw_mob_placement; |
768 | extern struct ttm_placement vmw_mob_ne_placement; | 775 | extern struct ttm_placement vmw_mob_ne_placement; |
776 | extern struct ttm_placement vmw_nonfixed_placement; | ||
769 | extern struct ttm_bo_driver vmw_bo_driver; | 777 | extern struct ttm_bo_driver vmw_bo_driver; |
770 | extern int vmw_dma_quiescent(struct drm_device *dev); | 778 | extern int vmw_dma_quiescent(struct drm_device *dev); |
771 | extern int vmw_bo_map_dma(struct ttm_buffer_object *bo); | 779 | extern int vmw_bo_map_dma(struct ttm_buffer_object *bo); |
@@ -902,6 +910,7 @@ int vmw_fb_init(struct vmw_private *vmw_priv); | |||
902 | int vmw_fb_close(struct vmw_private *dev_priv); | 910 | int vmw_fb_close(struct vmw_private *dev_priv); |
903 | int vmw_fb_off(struct vmw_private *vmw_priv); | 911 | int vmw_fb_off(struct vmw_private *vmw_priv); |
904 | int vmw_fb_on(struct vmw_private *vmw_priv); | 912 | int vmw_fb_on(struct vmw_private *vmw_priv); |
913 | void 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, | |||
938 | int vmw_kms_update_layout_ioctl(struct drm_device *dev, void *data, | 947 | int vmw_kms_update_layout_ioctl(struct drm_device *dev, void *data, |
939 | struct drm_file *file_priv); | 948 | struct drm_file *file_priv); |
940 | void vmw_kms_legacy_hotspot_clear(struct vmw_private *dev_priv); | 949 | void vmw_kms_legacy_hotspot_clear(struct vmw_private *dev_priv); |
950 | int vmw_kms_suspend(struct drm_device *dev); | ||
951 | int vmw_kms_resume(struct drm_device *dev); | ||
941 | 952 | ||
942 | int vmw_dumb_create(struct drm_file *file_priv, | 953 | int 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); |
1166 | extern void vmw_cmdbuf_irqthread(struct vmw_cmdbuf_man *man); | 1177 | extern 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 | */ | ||
1190 | struct 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 | |||
1215 | void vmw_diff_memcpy(struct vmw_diff_cpy *diff, u8 *dest, const u8 *src, | ||
1216 | size_t n); | ||
1217 | |||
1218 | void vmw_memcpy(struct vmw_diff_cpy *diff, u8 *dest, const u8 *src, size_t n); | ||
1219 | |||
1220 | int 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 |