diff options
Diffstat (limited to 'drivers/gpu/drm/vmwgfx/vmwgfx_drv.h')
-rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_drv.h | 227 |
1 files changed, 173 insertions, 54 deletions
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h index 10fc01f69c40..30589d0aecd9 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h | |||
@@ -38,20 +38,27 @@ | |||
38 | #include "ttm/ttm_lock.h" | 38 | #include "ttm/ttm_lock.h" |
39 | #include "ttm/ttm_execbuf_util.h" | 39 | #include "ttm/ttm_execbuf_util.h" |
40 | #include "ttm/ttm_module.h" | 40 | #include "ttm/ttm_module.h" |
41 | #include "vmwgfx_fence.h" | ||
41 | 42 | ||
42 | #define VMWGFX_DRIVER_DATE "20100927" | 43 | #define VMWGFX_DRIVER_DATE "20111008" |
43 | #define VMWGFX_DRIVER_MAJOR 1 | 44 | #define VMWGFX_DRIVER_MAJOR 2 |
44 | #define VMWGFX_DRIVER_MINOR 4 | 45 | #define VMWGFX_DRIVER_MINOR 2 |
45 | #define VMWGFX_DRIVER_PATCHLEVEL 0 | 46 | #define VMWGFX_DRIVER_PATCHLEVEL 0 |
46 | #define VMWGFX_FILE_PAGE_OFFSET 0x00100000 | 47 | #define VMWGFX_FILE_PAGE_OFFSET 0x00100000 |
47 | #define VMWGFX_FIFO_STATIC_SIZE (1024*1024) | 48 | #define VMWGFX_FIFO_STATIC_SIZE (1024*1024) |
48 | #define VMWGFX_MAX_RELOCATIONS 2048 | 49 | #define VMWGFX_MAX_RELOCATIONS 2048 |
49 | #define VMWGFX_MAX_GMRS 2048 | 50 | #define VMWGFX_MAX_VALIDATIONS 2048 |
50 | #define VMWGFX_MAX_DISPLAYS 16 | 51 | #define VMWGFX_MAX_DISPLAYS 16 |
52 | #define VMWGFX_CMD_BOUNCE_INIT_SIZE 32768 | ||
51 | 53 | ||
52 | #define VMW_PL_GMR TTM_PL_PRIV0 | 54 | #define VMW_PL_GMR TTM_PL_PRIV0 |
53 | #define VMW_PL_FLAG_GMR TTM_PL_FLAG_PRIV0 | 55 | #define VMW_PL_FLAG_GMR TTM_PL_FLAG_PRIV0 |
54 | 56 | ||
57 | #define VMW_RES_CONTEXT ttm_driver_type0 | ||
58 | #define VMW_RES_SURFACE ttm_driver_type1 | ||
59 | #define VMW_RES_STREAM ttm_driver_type2 | ||
60 | #define VMW_RES_FENCE ttm_driver_type3 | ||
61 | |||
55 | struct vmw_fpriv { | 62 | struct vmw_fpriv { |
56 | struct drm_master *locked_master; | 63 | struct drm_master *locked_master; |
57 | struct ttm_object_file *tfile; | 64 | struct ttm_object_file *tfile; |
@@ -72,9 +79,11 @@ struct vmw_resource { | |||
72 | int id; | 79 | int id; |
73 | enum ttm_object_type res_type; | 80 | enum ttm_object_type res_type; |
74 | bool avail; | 81 | bool avail; |
82 | void (*remove_from_lists) (struct vmw_resource *res); | ||
75 | void (*hw_destroy) (struct vmw_resource *res); | 83 | void (*hw_destroy) (struct vmw_resource *res); |
76 | void (*res_free) (struct vmw_resource *res); | 84 | void (*res_free) (struct vmw_resource *res); |
77 | 85 | struct list_head validate_head; | |
86 | struct list_head query_head; /* Protected by the cmdbuf mutex */ | ||
78 | /* TODO is a generic snooper needed? */ | 87 | /* TODO is a generic snooper needed? */ |
79 | #if 0 | 88 | #if 0 |
80 | void (*snoop)(struct vmw_resource *res, | 89 | void (*snoop)(struct vmw_resource *res, |
@@ -90,8 +99,12 @@ struct vmw_cursor_snooper { | |||
90 | uint32_t *image; | 99 | uint32_t *image; |
91 | }; | 100 | }; |
92 | 101 | ||
102 | struct vmw_framebuffer; | ||
103 | struct vmw_surface_offset; | ||
104 | |||
93 | struct vmw_surface { | 105 | struct vmw_surface { |
94 | struct vmw_resource res; | 106 | struct vmw_resource res; |
107 | struct list_head lru_head; /* Protected by the resource lock */ | ||
95 | uint32_t flags; | 108 | uint32_t flags; |
96 | uint32_t format; | 109 | uint32_t format; |
97 | uint32_t mip_levels[DRM_VMW_MAX_SURFACE_FACES]; | 110 | uint32_t mip_levels[DRM_VMW_MAX_SURFACE_FACES]; |
@@ -102,9 +115,12 @@ struct vmw_surface { | |||
102 | 115 | ||
103 | /* TODO so far just a extra pointer */ | 116 | /* TODO so far just a extra pointer */ |
104 | struct vmw_cursor_snooper snooper; | 117 | struct vmw_cursor_snooper snooper; |
118 | struct ttm_buffer_object *backup; | ||
119 | struct vmw_surface_offset *offsets; | ||
120 | uint32_t backup_size; | ||
105 | }; | 121 | }; |
106 | 122 | ||
107 | struct vmw_fence_queue { | 123 | struct vmw_marker_queue { |
108 | struct list_head head; | 124 | struct list_head head; |
109 | struct timespec lag; | 125 | struct timespec lag; |
110 | struct timespec lag_time; | 126 | struct timespec lag_time; |
@@ -115,16 +131,12 @@ struct vmw_fifo_state { | |||
115 | unsigned long reserved_size; | 131 | unsigned long reserved_size; |
116 | __le32 *dynamic_buffer; | 132 | __le32 *dynamic_buffer; |
117 | __le32 *static_buffer; | 133 | __le32 *static_buffer; |
118 | __le32 *last_buffer; | ||
119 | uint32_t last_data_size; | ||
120 | uint32_t last_buffer_size; | ||
121 | bool last_buffer_add; | ||
122 | unsigned long static_buffer_size; | 134 | unsigned long static_buffer_size; |
123 | bool using_bounce_buffer; | 135 | bool using_bounce_buffer; |
124 | uint32_t capabilities; | 136 | uint32_t capabilities; |
125 | struct mutex fifo_mutex; | 137 | struct mutex fifo_mutex; |
126 | struct rw_semaphore rwsem; | 138 | struct rw_semaphore rwsem; |
127 | struct vmw_fence_queue fence_queue; | 139 | struct vmw_marker_queue marker_queue; |
128 | }; | 140 | }; |
129 | 141 | ||
130 | struct vmw_relocation { | 142 | struct vmw_relocation { |
@@ -136,6 +148,8 @@ struct vmw_sw_context{ | |||
136 | struct ida bo_list; | 148 | struct ida bo_list; |
137 | uint32_t last_cid; | 149 | uint32_t last_cid; |
138 | bool cid_valid; | 150 | bool cid_valid; |
151 | bool kernel; /**< is the called made from the kernel */ | ||
152 | struct vmw_resource *cur_ctx; | ||
139 | uint32_t last_sid; | 153 | uint32_t last_sid; |
140 | uint32_t sid_translation; | 154 | uint32_t sid_translation; |
141 | bool sid_valid; | 155 | bool sid_valid; |
@@ -143,8 +157,16 @@ struct vmw_sw_context{ | |||
143 | struct list_head validate_nodes; | 157 | struct list_head validate_nodes; |
144 | struct vmw_relocation relocs[VMWGFX_MAX_RELOCATIONS]; | 158 | struct vmw_relocation relocs[VMWGFX_MAX_RELOCATIONS]; |
145 | uint32_t cur_reloc; | 159 | uint32_t cur_reloc; |
146 | struct ttm_validate_buffer val_bufs[VMWGFX_MAX_GMRS]; | 160 | struct ttm_validate_buffer val_bufs[VMWGFX_MAX_VALIDATIONS]; |
147 | uint32_t cur_val_buf; | 161 | uint32_t cur_val_buf; |
162 | uint32_t *cmd_bounce; | ||
163 | uint32_t cmd_bounce_size; | ||
164 | struct list_head resource_list; | ||
165 | uint32_t fence_flags; | ||
166 | struct list_head query_list; | ||
167 | struct ttm_buffer_object *cur_query_bo; | ||
168 | uint32_t cur_query_cid; | ||
169 | bool query_cid_valid; | ||
148 | }; | 170 | }; |
149 | 171 | ||
150 | struct vmw_legacy_display; | 172 | struct vmw_legacy_display; |
@@ -185,6 +207,8 @@ struct vmw_private { | |||
185 | uint32_t capabilities; | 207 | uint32_t capabilities; |
186 | uint32_t max_gmr_descriptors; | 208 | uint32_t max_gmr_descriptors; |
187 | uint32_t max_gmr_ids; | 209 | uint32_t max_gmr_ids; |
210 | uint32_t max_gmr_pages; | ||
211 | uint32_t memory_size; | ||
188 | bool has_gmr; | 212 | bool has_gmr; |
189 | struct mutex hw_mutex; | 213 | struct mutex hw_mutex; |
190 | 214 | ||
@@ -195,12 +219,7 @@ struct vmw_private { | |||
195 | struct vmw_vga_topology_state vga_save[VMWGFX_MAX_DISPLAYS]; | 219 | struct vmw_vga_topology_state vga_save[VMWGFX_MAX_DISPLAYS]; |
196 | uint32_t vga_width; | 220 | uint32_t vga_width; |
197 | uint32_t vga_height; | 221 | uint32_t vga_height; |
198 | uint32_t vga_depth; | ||
199 | uint32_t vga_bpp; | 222 | uint32_t vga_bpp; |
200 | uint32_t vga_pseudo; | ||
201 | uint32_t vga_red_mask; | ||
202 | uint32_t vga_green_mask; | ||
203 | uint32_t vga_blue_mask; | ||
204 | uint32_t vga_bpl; | 223 | uint32_t vga_bpl; |
205 | uint32_t vga_pitchlock; | 224 | uint32_t vga_pitchlock; |
206 | 225 | ||
@@ -212,6 +231,7 @@ struct vmw_private { | |||
212 | 231 | ||
213 | void *fb_info; | 232 | void *fb_info; |
214 | struct vmw_legacy_display *ldu_priv; | 233 | struct vmw_legacy_display *ldu_priv; |
234 | struct vmw_screen_object_display *sou_priv; | ||
215 | struct vmw_overlay *overlay_priv; | 235 | struct vmw_overlay *overlay_priv; |
216 | 236 | ||
217 | /* | 237 | /* |
@@ -240,13 +260,16 @@ struct vmw_private { | |||
240 | * Fencing and IRQs. | 260 | * Fencing and IRQs. |
241 | */ | 261 | */ |
242 | 262 | ||
243 | atomic_t fence_seq; | 263 | atomic_t marker_seq; |
244 | wait_queue_head_t fence_queue; | 264 | wait_queue_head_t fence_queue; |
245 | wait_queue_head_t fifo_queue; | 265 | wait_queue_head_t fifo_queue; |
246 | atomic_t fence_queue_waiters; | 266 | int fence_queue_waiters; /* Protected by hw_mutex */ |
267 | int goal_queue_waiters; /* Protected by hw_mutex */ | ||
247 | atomic_t fifo_queue_waiters; | 268 | atomic_t fifo_queue_waiters; |
248 | uint32_t last_read_sequence; | 269 | uint32_t last_read_seqno; |
249 | spinlock_t irq_lock; | 270 | spinlock_t irq_lock; |
271 | struct vmw_fence_manager *fman; | ||
272 | uint32_t irq_mask; | ||
250 | 273 | ||
251 | /* | 274 | /* |
252 | * Device state | 275 | * Device state |
@@ -285,6 +308,26 @@ struct vmw_private { | |||
285 | 308 | ||
286 | struct mutex release_mutex; | 309 | struct mutex release_mutex; |
287 | uint32_t num_3d_resources; | 310 | uint32_t num_3d_resources; |
311 | |||
312 | /* | ||
313 | * Query processing. These members | ||
314 | * are protected by the cmdbuf mutex. | ||
315 | */ | ||
316 | |||
317 | struct ttm_buffer_object *dummy_query_bo; | ||
318 | struct ttm_buffer_object *pinned_bo; | ||
319 | uint32_t query_cid; | ||
320 | bool dummy_query_bo_pinned; | ||
321 | |||
322 | /* | ||
323 | * Surface swapping. The "surface_lru" list is protected by the | ||
324 | * resource lock in order to be able to destroy a surface and take | ||
325 | * it off the lru atomically. "used_memory_size" is currently | ||
326 | * protected by the cmdbuf mutex for simplicity. | ||
327 | */ | ||
328 | |||
329 | struct list_head surface_lru; | ||
330 | uint32_t used_memory_size; | ||
288 | }; | 331 | }; |
289 | 332 | ||
290 | static inline struct vmw_private *vmw_priv(struct drm_device *dev) | 333 | static inline struct vmw_private *vmw_priv(struct drm_device *dev) |
@@ -319,8 +362,8 @@ static inline uint32_t vmw_read(struct vmw_private *dev_priv, | |||
319 | return val; | 362 | return val; |
320 | } | 363 | } |
321 | 364 | ||
322 | int vmw_3d_resource_inc(struct vmw_private *dev_priv); | 365 | int vmw_3d_resource_inc(struct vmw_private *dev_priv, bool unhide_svga); |
323 | void vmw_3d_resource_dec(struct vmw_private *dev_priv); | 366 | void vmw_3d_resource_dec(struct vmw_private *dev_priv, bool hide_svga); |
324 | 367 | ||
325 | /** | 368 | /** |
326 | * GMR utilities - vmwgfx_gmr.c | 369 | * GMR utilities - vmwgfx_gmr.c |
@@ -345,7 +388,8 @@ extern int vmw_context_define_ioctl(struct drm_device *dev, void *data, | |||
345 | struct drm_file *file_priv); | 388 | struct drm_file *file_priv); |
346 | extern int vmw_context_check(struct vmw_private *dev_priv, | 389 | extern int vmw_context_check(struct vmw_private *dev_priv, |
347 | struct ttm_object_file *tfile, | 390 | struct ttm_object_file *tfile, |
348 | int id); | 391 | int id, |
392 | struct vmw_resource **p_res); | ||
349 | extern void vmw_surface_res_free(struct vmw_resource *res); | 393 | extern void vmw_surface_res_free(struct vmw_resource *res); |
350 | extern int vmw_surface_init(struct vmw_private *dev_priv, | 394 | extern int vmw_surface_init(struct vmw_private *dev_priv, |
351 | struct vmw_surface *srf, | 395 | struct vmw_surface *srf, |
@@ -363,6 +407,8 @@ extern int vmw_surface_reference_ioctl(struct drm_device *dev, void *data, | |||
363 | extern int vmw_surface_check(struct vmw_private *dev_priv, | 407 | extern int vmw_surface_check(struct vmw_private *dev_priv, |
364 | struct ttm_object_file *tfile, | 408 | struct ttm_object_file *tfile, |
365 | uint32_t handle, int *id); | 409 | uint32_t handle, int *id); |
410 | extern int vmw_surface_validate(struct vmw_private *dev_priv, | ||
411 | struct vmw_surface *srf); | ||
366 | extern void vmw_dmabuf_bo_free(struct ttm_buffer_object *bo); | 412 | extern void vmw_dmabuf_bo_free(struct ttm_buffer_object *bo); |
367 | extern int vmw_dmabuf_init(struct vmw_private *dev_priv, | 413 | extern int vmw_dmabuf_init(struct vmw_private *dev_priv, |
368 | struct vmw_dma_buffer *vmw_bo, | 414 | struct vmw_dma_buffer *vmw_bo, |
@@ -378,10 +424,6 @@ extern uint32_t vmw_dmabuf_validate_node(struct ttm_buffer_object *bo, | |||
378 | extern void vmw_dmabuf_validate_clear(struct ttm_buffer_object *bo); | 424 | extern void vmw_dmabuf_validate_clear(struct ttm_buffer_object *bo); |
379 | extern int vmw_user_dmabuf_lookup(struct ttm_object_file *tfile, | 425 | extern int vmw_user_dmabuf_lookup(struct ttm_object_file *tfile, |
380 | uint32_t id, struct vmw_dma_buffer **out); | 426 | uint32_t id, struct vmw_dma_buffer **out); |
381 | extern int vmw_dmabuf_to_start_of_vram(struct vmw_private *vmw_priv, | ||
382 | struct vmw_dma_buffer *bo); | ||
383 | extern int vmw_dmabuf_from_vram(struct vmw_private *vmw_priv, | ||
384 | struct vmw_dma_buffer *bo); | ||
385 | extern int vmw_stream_claim_ioctl(struct drm_device *dev, void *data, | 427 | extern int vmw_stream_claim_ioctl(struct drm_device *dev, void *data, |
386 | struct drm_file *file_priv); | 428 | struct drm_file *file_priv); |
387 | extern int vmw_stream_unref_ioctl(struct drm_device *dev, void *data, | 429 | extern int vmw_stream_unref_ioctl(struct drm_device *dev, void *data, |
@@ -390,7 +432,30 @@ extern int vmw_user_stream_lookup(struct vmw_private *dev_priv, | |||
390 | struct ttm_object_file *tfile, | 432 | struct ttm_object_file *tfile, |
391 | uint32_t *inout_id, | 433 | uint32_t *inout_id, |
392 | struct vmw_resource **out); | 434 | struct vmw_resource **out); |
435 | extern void vmw_resource_unreserve(struct list_head *list); | ||
393 | 436 | ||
437 | /** | ||
438 | * DMA buffer helper routines - vmwgfx_dmabuf.c | ||
439 | */ | ||
440 | extern int vmw_dmabuf_to_placement(struct vmw_private *vmw_priv, | ||
441 | struct vmw_dma_buffer *bo, | ||
442 | struct ttm_placement *placement, | ||
443 | bool interruptible); | ||
444 | extern int vmw_dmabuf_to_vram(struct vmw_private *dev_priv, | ||
445 | struct vmw_dma_buffer *buf, | ||
446 | bool pin, bool interruptible); | ||
447 | extern int vmw_dmabuf_to_vram_or_gmr(struct vmw_private *dev_priv, | ||
448 | struct vmw_dma_buffer *buf, | ||
449 | bool pin, bool interruptible); | ||
450 | extern int vmw_dmabuf_to_start_of_vram(struct vmw_private *vmw_priv, | ||
451 | struct vmw_dma_buffer *bo, | ||
452 | bool pin, bool interruptible); | ||
453 | extern int vmw_dmabuf_unpin(struct vmw_private *vmw_priv, | ||
454 | struct vmw_dma_buffer *bo, | ||
455 | bool interruptible); | ||
456 | extern void vmw_bo_get_guest_ptr(const struct ttm_buffer_object *buf, | ||
457 | SVGAGuestPtr *ptr); | ||
458 | extern void vmw_bo_pin(struct ttm_buffer_object *bo, bool pin); | ||
394 | 459 | ||
395 | /** | 460 | /** |
396 | * Misc Ioctl functionality - vmwgfx_ioctl.c | 461 | * Misc Ioctl functionality - vmwgfx_ioctl.c |
@@ -398,8 +463,16 @@ extern int vmw_user_stream_lookup(struct vmw_private *dev_priv, | |||
398 | 463 | ||
399 | extern int vmw_getparam_ioctl(struct drm_device *dev, void *data, | 464 | extern int vmw_getparam_ioctl(struct drm_device *dev, void *data, |
400 | struct drm_file *file_priv); | 465 | struct drm_file *file_priv); |
401 | extern int vmw_fifo_debug_ioctl(struct drm_device *dev, void *data, | 466 | extern int vmw_get_cap_3d_ioctl(struct drm_device *dev, void *data, |
402 | struct drm_file *file_priv); | 467 | struct drm_file *file_priv); |
468 | extern int vmw_present_ioctl(struct drm_device *dev, void *data, | ||
469 | struct drm_file *file_priv); | ||
470 | extern int vmw_present_readback_ioctl(struct drm_device *dev, void *data, | ||
471 | struct drm_file *file_priv); | ||
472 | extern unsigned int vmw_fops_poll(struct file *filp, | ||
473 | struct poll_table_struct *wait); | ||
474 | extern ssize_t vmw_fops_read(struct file *filp, char __user *buffer, | ||
475 | size_t count, loff_t *offset); | ||
403 | 476 | ||
404 | /** | 477 | /** |
405 | * Fifo utilities - vmwgfx_fifo.c | 478 | * Fifo utilities - vmwgfx_fifo.c |
@@ -412,11 +485,12 @@ extern void vmw_fifo_release(struct vmw_private *dev_priv, | |||
412 | extern void *vmw_fifo_reserve(struct vmw_private *dev_priv, uint32_t bytes); | 485 | extern void *vmw_fifo_reserve(struct vmw_private *dev_priv, uint32_t bytes); |
413 | extern void vmw_fifo_commit(struct vmw_private *dev_priv, uint32_t bytes); | 486 | extern void vmw_fifo_commit(struct vmw_private *dev_priv, uint32_t bytes); |
414 | extern int vmw_fifo_send_fence(struct vmw_private *dev_priv, | 487 | extern int vmw_fifo_send_fence(struct vmw_private *dev_priv, |
415 | uint32_t *sequence); | 488 | uint32_t *seqno); |
416 | extern void vmw_fifo_ping_host(struct vmw_private *dev_priv, uint32_t reason); | 489 | extern void vmw_fifo_ping_host(struct vmw_private *dev_priv, uint32_t reason); |
417 | extern int vmw_fifo_mmap(struct file *filp, struct vm_area_struct *vma); | ||
418 | extern bool vmw_fifo_have_3d(struct vmw_private *dev_priv); | 490 | extern bool vmw_fifo_have_3d(struct vmw_private *dev_priv); |
419 | extern bool vmw_fifo_have_pitchlock(struct vmw_private *dev_priv); | 491 | extern bool vmw_fifo_have_pitchlock(struct vmw_private *dev_priv); |
492 | extern int vmw_fifo_emit_dummy_query(struct vmw_private *dev_priv, | ||
493 | uint32_t cid); | ||
420 | 494 | ||
421 | /** | 495 | /** |
422 | * TTM glue - vmwgfx_ttm_glue.c | 496 | * TTM glue - vmwgfx_ttm_glue.c |
@@ -434,7 +508,10 @@ extern struct ttm_placement vmw_vram_placement; | |||
434 | extern struct ttm_placement vmw_vram_ne_placement; | 508 | extern struct ttm_placement vmw_vram_ne_placement; |
435 | extern struct ttm_placement vmw_vram_sys_placement; | 509 | extern struct ttm_placement vmw_vram_sys_placement; |
436 | extern struct ttm_placement vmw_vram_gmr_placement; | 510 | extern struct ttm_placement vmw_vram_gmr_placement; |
511 | extern struct ttm_placement vmw_vram_gmr_ne_placement; | ||
437 | extern struct ttm_placement vmw_sys_placement; | 512 | extern struct ttm_placement vmw_sys_placement; |
513 | extern struct ttm_placement vmw_evictable_placement; | ||
514 | extern struct ttm_placement vmw_srf_placement; | ||
438 | extern struct ttm_bo_driver vmw_bo_driver; | 515 | extern struct ttm_bo_driver vmw_bo_driver; |
439 | extern int vmw_dma_quiescent(struct drm_device *dev); | 516 | extern int vmw_dma_quiescent(struct drm_device *dev); |
440 | 517 | ||
@@ -444,45 +521,70 @@ extern int vmw_dma_quiescent(struct drm_device *dev); | |||
444 | 521 | ||
445 | extern int vmw_execbuf_ioctl(struct drm_device *dev, void *data, | 522 | extern int vmw_execbuf_ioctl(struct drm_device *dev, void *data, |
446 | struct drm_file *file_priv); | 523 | struct drm_file *file_priv); |
524 | extern int vmw_execbuf_process(struct drm_file *file_priv, | ||
525 | struct vmw_private *dev_priv, | ||
526 | void __user *user_commands, | ||
527 | void *kernel_commands, | ||
528 | uint32_t command_size, | ||
529 | uint64_t throttle_us, | ||
530 | struct drm_vmw_fence_rep __user | ||
531 | *user_fence_rep); | ||
532 | |||
533 | extern void | ||
534 | vmw_execbuf_release_pinned_bo(struct vmw_private *dev_priv, | ||
535 | bool only_on_cid_match, uint32_t cid); | ||
536 | |||
537 | extern int vmw_execbuf_fence_commands(struct drm_file *file_priv, | ||
538 | struct vmw_private *dev_priv, | ||
539 | struct vmw_fence_obj **p_fence, | ||
540 | uint32_t *p_handle); | ||
541 | extern void vmw_execbuf_copy_fence_user(struct vmw_private *dev_priv, | ||
542 | struct vmw_fpriv *vmw_fp, | ||
543 | int ret, | ||
544 | struct drm_vmw_fence_rep __user | ||
545 | *user_fence_rep, | ||
546 | struct vmw_fence_obj *fence, | ||
547 | uint32_t fence_handle); | ||
447 | 548 | ||
448 | /** | 549 | /** |
449 | * IRQs and wating - vmwgfx_irq.c | 550 | * IRQs and wating - vmwgfx_irq.c |
450 | */ | 551 | */ |
451 | 552 | ||
452 | extern irqreturn_t vmw_irq_handler(DRM_IRQ_ARGS); | 553 | extern irqreturn_t vmw_irq_handler(DRM_IRQ_ARGS); |
453 | extern int vmw_wait_fence(struct vmw_private *dev_priv, bool lazy, | 554 | extern int vmw_wait_seqno(struct vmw_private *dev_priv, bool lazy, |
454 | uint32_t sequence, bool interruptible, | 555 | uint32_t seqno, bool interruptible, |
455 | unsigned long timeout); | 556 | unsigned long timeout); |
456 | extern void vmw_irq_preinstall(struct drm_device *dev); | 557 | extern void vmw_irq_preinstall(struct drm_device *dev); |
457 | extern int vmw_irq_postinstall(struct drm_device *dev); | 558 | extern int vmw_irq_postinstall(struct drm_device *dev); |
458 | extern void vmw_irq_uninstall(struct drm_device *dev); | 559 | extern void vmw_irq_uninstall(struct drm_device *dev); |
459 | extern bool vmw_fence_signaled(struct vmw_private *dev_priv, | 560 | extern bool vmw_seqno_passed(struct vmw_private *dev_priv, |
460 | uint32_t sequence); | 561 | uint32_t seqno); |
461 | extern int vmw_fence_wait_ioctl(struct drm_device *dev, void *data, | ||
462 | struct drm_file *file_priv); | ||
463 | extern int vmw_fallback_wait(struct vmw_private *dev_priv, | 562 | extern int vmw_fallback_wait(struct vmw_private *dev_priv, |
464 | bool lazy, | 563 | bool lazy, |
465 | bool fifo_idle, | 564 | bool fifo_idle, |
466 | uint32_t sequence, | 565 | uint32_t seqno, |
467 | bool interruptible, | 566 | bool interruptible, |
468 | unsigned long timeout); | 567 | unsigned long timeout); |
469 | extern void vmw_update_sequence(struct vmw_private *dev_priv, | 568 | extern void vmw_update_seqno(struct vmw_private *dev_priv, |
470 | struct vmw_fifo_state *fifo_state); | 569 | struct vmw_fifo_state *fifo_state); |
471 | 570 | extern void vmw_seqno_waiter_add(struct vmw_private *dev_priv); | |
571 | extern void vmw_seqno_waiter_remove(struct vmw_private *dev_priv); | ||
572 | extern void vmw_goal_waiter_add(struct vmw_private *dev_priv); | ||
573 | extern void vmw_goal_waiter_remove(struct vmw_private *dev_priv); | ||
472 | 574 | ||
473 | /** | 575 | /** |
474 | * Rudimentary fence objects currently used only for throttling - | 576 | * Rudimentary fence-like objects currently used only for throttling - |
475 | * vmwgfx_fence.c | 577 | * vmwgfx_marker.c |
476 | */ | 578 | */ |
477 | 579 | ||
478 | extern void vmw_fence_queue_init(struct vmw_fence_queue *queue); | 580 | extern void vmw_marker_queue_init(struct vmw_marker_queue *queue); |
479 | extern void vmw_fence_queue_takedown(struct vmw_fence_queue *queue); | 581 | extern void vmw_marker_queue_takedown(struct vmw_marker_queue *queue); |
480 | extern int vmw_fence_push(struct vmw_fence_queue *queue, | 582 | extern int vmw_marker_push(struct vmw_marker_queue *queue, |
481 | uint32_t sequence); | 583 | uint32_t seqno); |
482 | extern int vmw_fence_pull(struct vmw_fence_queue *queue, | 584 | extern int vmw_marker_pull(struct vmw_marker_queue *queue, |
483 | uint32_t signaled_sequence); | 585 | uint32_t signaled_seqno); |
484 | extern int vmw_wait_lag(struct vmw_private *dev_priv, | 586 | extern int vmw_wait_lag(struct vmw_private *dev_priv, |
485 | struct vmw_fence_queue *queue, uint32_t us); | 587 | struct vmw_marker_queue *queue, uint32_t us); |
486 | 588 | ||
487 | /** | 589 | /** |
488 | * Kernel framebuffer - vmwgfx_fb.c | 590 | * Kernel framebuffer - vmwgfx_fb.c |
@@ -508,16 +610,29 @@ void vmw_kms_cursor_snoop(struct vmw_surface *srf, | |||
508 | struct ttm_object_file *tfile, | 610 | struct ttm_object_file *tfile, |
509 | struct ttm_buffer_object *bo, | 611 | struct ttm_buffer_object *bo, |
510 | SVGA3dCmdHeader *header); | 612 | SVGA3dCmdHeader *header); |
511 | void vmw_kms_write_svga(struct vmw_private *vmw_priv, | 613 | int vmw_kms_write_svga(struct vmw_private *vmw_priv, |
512 | unsigned width, unsigned height, unsigned pitch, | 614 | unsigned width, unsigned height, unsigned pitch, |
513 | unsigned bbp, unsigned depth); | 615 | unsigned bpp, unsigned depth); |
514 | int vmw_kms_update_layout_ioctl(struct drm_device *dev, void *data, | ||
515 | struct drm_file *file_priv); | ||
516 | void vmw_kms_idle_workqueues(struct vmw_master *vmaster); | 616 | void vmw_kms_idle_workqueues(struct vmw_master *vmaster); |
517 | bool vmw_kms_validate_mode_vram(struct vmw_private *dev_priv, | 617 | bool vmw_kms_validate_mode_vram(struct vmw_private *dev_priv, |
518 | uint32_t pitch, | 618 | uint32_t pitch, |
519 | uint32_t height); | 619 | uint32_t height); |
520 | u32 vmw_get_vblank_counter(struct drm_device *dev, int crtc); | 620 | u32 vmw_get_vblank_counter(struct drm_device *dev, int crtc); |
621 | int vmw_enable_vblank(struct drm_device *dev, int crtc); | ||
622 | void vmw_disable_vblank(struct drm_device *dev, int crtc); | ||
623 | int vmw_kms_present(struct vmw_private *dev_priv, | ||
624 | struct drm_file *file_priv, | ||
625 | struct vmw_framebuffer *vfb, | ||
626 | struct vmw_surface *surface, | ||
627 | uint32_t sid, int32_t destX, int32_t destY, | ||
628 | struct drm_vmw_rect *clips, | ||
629 | uint32_t num_clips); | ||
630 | int vmw_kms_readback(struct vmw_private *dev_priv, | ||
631 | struct drm_file *file_priv, | ||
632 | struct vmw_framebuffer *vfb, | ||
633 | struct drm_vmw_fence_rep __user *user_fence_rep, | ||
634 | struct drm_vmw_rect *clips, | ||
635 | uint32_t num_clips); | ||
521 | 636 | ||
522 | /** | 637 | /** |
523 | * Overlay control - vmwgfx_overlay.c | 638 | * Overlay control - vmwgfx_overlay.c |
@@ -576,4 +691,8 @@ static inline struct vmw_dma_buffer *vmw_dmabuf_reference(struct vmw_dma_buffer | |||
576 | return NULL; | 691 | return NULL; |
577 | } | 692 | } |
578 | 693 | ||
694 | static inline struct ttm_mem_global *vmw_mem_glob(struct vmw_private *dev_priv) | ||
695 | { | ||
696 | return (struct ttm_mem_global *) dev_priv->mem_global_ref.object; | ||
697 | } | ||
579 | #endif | 698 | #endif |