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.h227
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
55struct vmw_fpriv { 62struct 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
102struct vmw_framebuffer;
103struct vmw_surface_offset;
104
93struct vmw_surface { 105struct 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
107struct vmw_fence_queue { 123struct 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
130struct vmw_relocation { 142struct 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
150struct vmw_legacy_display; 172struct 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
290static inline struct vmw_private *vmw_priv(struct drm_device *dev) 333static 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
322int vmw_3d_resource_inc(struct vmw_private *dev_priv); 365int vmw_3d_resource_inc(struct vmw_private *dev_priv, bool unhide_svga);
323void vmw_3d_resource_dec(struct vmw_private *dev_priv); 366void 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);
346extern int vmw_context_check(struct vmw_private *dev_priv, 389extern 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);
349extern void vmw_surface_res_free(struct vmw_resource *res); 393extern void vmw_surface_res_free(struct vmw_resource *res);
350extern int vmw_surface_init(struct vmw_private *dev_priv, 394extern 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,
363extern int vmw_surface_check(struct vmw_private *dev_priv, 407extern 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);
410extern int vmw_surface_validate(struct vmw_private *dev_priv,
411 struct vmw_surface *srf);
366extern void vmw_dmabuf_bo_free(struct ttm_buffer_object *bo); 412extern void vmw_dmabuf_bo_free(struct ttm_buffer_object *bo);
367extern int vmw_dmabuf_init(struct vmw_private *dev_priv, 413extern 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,
378extern void vmw_dmabuf_validate_clear(struct ttm_buffer_object *bo); 424extern void vmw_dmabuf_validate_clear(struct ttm_buffer_object *bo);
379extern int vmw_user_dmabuf_lookup(struct ttm_object_file *tfile, 425extern 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);
381extern int vmw_dmabuf_to_start_of_vram(struct vmw_private *vmw_priv,
382 struct vmw_dma_buffer *bo);
383extern int vmw_dmabuf_from_vram(struct vmw_private *vmw_priv,
384 struct vmw_dma_buffer *bo);
385extern int vmw_stream_claim_ioctl(struct drm_device *dev, void *data, 427extern int vmw_stream_claim_ioctl(struct drm_device *dev, void *data,
386 struct drm_file *file_priv); 428 struct drm_file *file_priv);
387extern int vmw_stream_unref_ioctl(struct drm_device *dev, void *data, 429extern 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);
435extern void vmw_resource_unreserve(struct list_head *list);
393 436
437/**
438 * DMA buffer helper routines - vmwgfx_dmabuf.c
439 */
440extern int vmw_dmabuf_to_placement(struct vmw_private *vmw_priv,
441 struct vmw_dma_buffer *bo,
442 struct ttm_placement *placement,
443 bool interruptible);
444extern int vmw_dmabuf_to_vram(struct vmw_private *dev_priv,
445 struct vmw_dma_buffer *buf,
446 bool pin, bool interruptible);
447extern int vmw_dmabuf_to_vram_or_gmr(struct vmw_private *dev_priv,
448 struct vmw_dma_buffer *buf,
449 bool pin, bool interruptible);
450extern int vmw_dmabuf_to_start_of_vram(struct vmw_private *vmw_priv,
451 struct vmw_dma_buffer *bo,
452 bool pin, bool interruptible);
453extern int vmw_dmabuf_unpin(struct vmw_private *vmw_priv,
454 struct vmw_dma_buffer *bo,
455 bool interruptible);
456extern void vmw_bo_get_guest_ptr(const struct ttm_buffer_object *buf,
457 SVGAGuestPtr *ptr);
458extern 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
399extern int vmw_getparam_ioctl(struct drm_device *dev, void *data, 464extern int vmw_getparam_ioctl(struct drm_device *dev, void *data,
400 struct drm_file *file_priv); 465 struct drm_file *file_priv);
401extern int vmw_fifo_debug_ioctl(struct drm_device *dev, void *data, 466extern int vmw_get_cap_3d_ioctl(struct drm_device *dev, void *data,
402 struct drm_file *file_priv); 467 struct drm_file *file_priv);
468extern int vmw_present_ioctl(struct drm_device *dev, void *data,
469 struct drm_file *file_priv);
470extern int vmw_present_readback_ioctl(struct drm_device *dev, void *data,
471 struct drm_file *file_priv);
472extern unsigned int vmw_fops_poll(struct file *filp,
473 struct poll_table_struct *wait);
474extern 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,
412extern void *vmw_fifo_reserve(struct vmw_private *dev_priv, uint32_t bytes); 485extern void *vmw_fifo_reserve(struct vmw_private *dev_priv, uint32_t bytes);
413extern void vmw_fifo_commit(struct vmw_private *dev_priv, uint32_t bytes); 486extern void vmw_fifo_commit(struct vmw_private *dev_priv, uint32_t bytes);
414extern int vmw_fifo_send_fence(struct vmw_private *dev_priv, 487extern int vmw_fifo_send_fence(struct vmw_private *dev_priv,
415 uint32_t *sequence); 488 uint32_t *seqno);
416extern void vmw_fifo_ping_host(struct vmw_private *dev_priv, uint32_t reason); 489extern void vmw_fifo_ping_host(struct vmw_private *dev_priv, uint32_t reason);
417extern int vmw_fifo_mmap(struct file *filp, struct vm_area_struct *vma);
418extern bool vmw_fifo_have_3d(struct vmw_private *dev_priv); 490extern bool vmw_fifo_have_3d(struct vmw_private *dev_priv);
419extern bool vmw_fifo_have_pitchlock(struct vmw_private *dev_priv); 491extern bool vmw_fifo_have_pitchlock(struct vmw_private *dev_priv);
492extern 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;
434extern struct ttm_placement vmw_vram_ne_placement; 508extern struct ttm_placement vmw_vram_ne_placement;
435extern struct ttm_placement vmw_vram_sys_placement; 509extern struct ttm_placement vmw_vram_sys_placement;
436extern struct ttm_placement vmw_vram_gmr_placement; 510extern struct ttm_placement vmw_vram_gmr_placement;
511extern struct ttm_placement vmw_vram_gmr_ne_placement;
437extern struct ttm_placement vmw_sys_placement; 512extern struct ttm_placement vmw_sys_placement;
513extern struct ttm_placement vmw_evictable_placement;
514extern struct ttm_placement vmw_srf_placement;
438extern struct ttm_bo_driver vmw_bo_driver; 515extern struct ttm_bo_driver vmw_bo_driver;
439extern int vmw_dma_quiescent(struct drm_device *dev); 516extern 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
445extern int vmw_execbuf_ioctl(struct drm_device *dev, void *data, 522extern int vmw_execbuf_ioctl(struct drm_device *dev, void *data,
446 struct drm_file *file_priv); 523 struct drm_file *file_priv);
524extern 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
533extern void
534vmw_execbuf_release_pinned_bo(struct vmw_private *dev_priv,
535 bool only_on_cid_match, uint32_t cid);
536
537extern 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);
541extern 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
452extern irqreturn_t vmw_irq_handler(DRM_IRQ_ARGS); 553extern irqreturn_t vmw_irq_handler(DRM_IRQ_ARGS);
453extern int vmw_wait_fence(struct vmw_private *dev_priv, bool lazy, 554extern 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);
456extern void vmw_irq_preinstall(struct drm_device *dev); 557extern void vmw_irq_preinstall(struct drm_device *dev);
457extern int vmw_irq_postinstall(struct drm_device *dev); 558extern int vmw_irq_postinstall(struct drm_device *dev);
458extern void vmw_irq_uninstall(struct drm_device *dev); 559extern void vmw_irq_uninstall(struct drm_device *dev);
459extern bool vmw_fence_signaled(struct vmw_private *dev_priv, 560extern bool vmw_seqno_passed(struct vmw_private *dev_priv,
460 uint32_t sequence); 561 uint32_t seqno);
461extern int vmw_fence_wait_ioctl(struct drm_device *dev, void *data,
462 struct drm_file *file_priv);
463extern int vmw_fallback_wait(struct vmw_private *dev_priv, 562extern 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);
469extern void vmw_update_sequence(struct vmw_private *dev_priv, 568extern void vmw_update_seqno(struct vmw_private *dev_priv,
470 struct vmw_fifo_state *fifo_state); 569 struct vmw_fifo_state *fifo_state);
471 570extern void vmw_seqno_waiter_add(struct vmw_private *dev_priv);
571extern void vmw_seqno_waiter_remove(struct vmw_private *dev_priv);
572extern void vmw_goal_waiter_add(struct vmw_private *dev_priv);
573extern 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
478extern void vmw_fence_queue_init(struct vmw_fence_queue *queue); 580extern void vmw_marker_queue_init(struct vmw_marker_queue *queue);
479extern void vmw_fence_queue_takedown(struct vmw_fence_queue *queue); 581extern void vmw_marker_queue_takedown(struct vmw_marker_queue *queue);
480extern int vmw_fence_push(struct vmw_fence_queue *queue, 582extern int vmw_marker_push(struct vmw_marker_queue *queue,
481 uint32_t sequence); 583 uint32_t seqno);
482extern int vmw_fence_pull(struct vmw_fence_queue *queue, 584extern int vmw_marker_pull(struct vmw_marker_queue *queue,
483 uint32_t signaled_sequence); 585 uint32_t signaled_seqno);
484extern int vmw_wait_lag(struct vmw_private *dev_priv, 586extern 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);
511void vmw_kms_write_svga(struct vmw_private *vmw_priv, 613int 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);
514int vmw_kms_update_layout_ioctl(struct drm_device *dev, void *data,
515 struct drm_file *file_priv);
516void vmw_kms_idle_workqueues(struct vmw_master *vmaster); 616void vmw_kms_idle_workqueues(struct vmw_master *vmaster);
517bool vmw_kms_validate_mode_vram(struct vmw_private *dev_priv, 617bool 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);
520u32 vmw_get_vblank_counter(struct drm_device *dev, int crtc); 620u32 vmw_get_vblank_counter(struct drm_device *dev, int crtc);
621int vmw_enable_vblank(struct drm_device *dev, int crtc);
622void vmw_disable_vblank(struct drm_device *dev, int crtc);
623int 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);
630int 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
694static 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