diff options
author | Thomas Hellstrom <thellstrom@vmware.com> | 2011-09-01 16:18:44 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2011-09-06 06:51:11 -0400 |
commit | ae2a104058e217548215bfe6c6c8a98752139c29 (patch) | |
tree | 9f3fccec1c8f4e78b67b44fc6b4cdda10f3291da /drivers/gpu/drm/vmwgfx/vmwgfx_fence.h | |
parent | 4f73a96bd76914009682432842ac04a32ab9115b (diff) |
vmwgfx: Implement fence objects
Will be needed for queries and drm event-driven throttling.
As a benefit, they help avoid stale user-space fence handles.
Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
Reviewed-by: Jakob Bornecrantz <jakob@vmware.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/vmwgfx/vmwgfx_fence.h')
-rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_fence.h | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.h b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.h new file mode 100644 index 000000000000..93074064aaf3 --- /dev/null +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.h | |||
@@ -0,0 +1,105 @@ | |||
1 | /************************************************************************** | ||
2 | * | ||
3 | * Copyright © 2011 VMware, Inc., Palo Alto, CA., USA | ||
4 | * All Rights Reserved. | ||
5 | * | ||
6 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
7 | * copy of this software and associated documentation files (the | ||
8 | * "Software"), to deal in the Software without restriction, including | ||
9 | * without limitation the rights to use, copy, modify, merge, publish, | ||
10 | * distribute, sub license, and/or sell copies of the Software, and to | ||
11 | * permit persons to whom the Software is furnished to do so, subject to | ||
12 | * the following conditions: | ||
13 | * | ||
14 | * The above copyright notice and this permission notice (including the | ||
15 | * next paragraph) shall be included in all copies or substantial portions | ||
16 | * of the Software. | ||
17 | * | ||
18 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
19 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
20 | * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL | ||
21 | * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, | ||
22 | * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR | ||
23 | * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE | ||
24 | * USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
25 | * | ||
26 | **************************************************************************/ | ||
27 | |||
28 | #ifndef _VMWGFX_FENCE_H_ | ||
29 | |||
30 | #define VMW_FENCE_WAIT_TIMEOUT (5*HZ) | ||
31 | |||
32 | struct vmw_private; | ||
33 | |||
34 | struct vmw_fence_manager; | ||
35 | |||
36 | /** | ||
37 | * | ||
38 | * | ||
39 | */ | ||
40 | struct vmw_fence_action { | ||
41 | struct list_head head; | ||
42 | void (*seq_passed) (struct vmw_fence_action *action); | ||
43 | void (*cleanup) (struct vmw_fence_action *action); | ||
44 | }; | ||
45 | |||
46 | struct vmw_fence_obj { | ||
47 | struct kref kref; | ||
48 | u32 seqno; | ||
49 | |||
50 | struct vmw_fence_manager *fman; | ||
51 | struct list_head head; | ||
52 | uint32_t signaled; | ||
53 | uint32_t signal_mask; | ||
54 | struct list_head seq_passed_actions; | ||
55 | void (*destroy)(struct vmw_fence_obj *fence); | ||
56 | wait_queue_head_t queue; | ||
57 | }; | ||
58 | |||
59 | extern struct vmw_fence_manager * | ||
60 | vmw_fence_manager_init(struct vmw_private *dev_priv); | ||
61 | |||
62 | extern void vmw_fence_manager_takedown(struct vmw_fence_manager *fman); | ||
63 | |||
64 | extern void vmw_fence_obj_unreference(struct vmw_fence_obj **fence_p); | ||
65 | |||
66 | extern struct vmw_fence_obj * | ||
67 | vmw_fence_obj_reference(struct vmw_fence_obj *fence); | ||
68 | |||
69 | extern void vmw_fences_update(struct vmw_fence_manager *fman, | ||
70 | u32 sequence); | ||
71 | |||
72 | extern bool vmw_fence_obj_signaled(struct vmw_fence_obj *fence, | ||
73 | uint32_t flags); | ||
74 | |||
75 | extern int vmw_fence_obj_wait(struct vmw_fence_obj *fence, uint32_t flags, | ||
76 | bool lazy, | ||
77 | bool interruptible, unsigned long timeout); | ||
78 | |||
79 | extern void vmw_fence_obj_flush(struct vmw_fence_obj *fence); | ||
80 | |||
81 | extern int vmw_fence_create(struct vmw_fence_manager *fman, | ||
82 | uint32_t seqno, | ||
83 | uint32_t mask, | ||
84 | struct vmw_fence_obj **p_fence); | ||
85 | |||
86 | extern int vmw_user_fence_create(struct drm_file *file_priv, | ||
87 | struct vmw_fence_manager *fman, | ||
88 | uint32_t sequence, | ||
89 | uint32_t mask, | ||
90 | struct vmw_fence_obj **p_fence, | ||
91 | uint32_t *p_handle); | ||
92 | |||
93 | extern void vmw_fence_fifo_up(struct vmw_fence_manager *fman); | ||
94 | |||
95 | extern void vmw_fence_fifo_down(struct vmw_fence_manager *fman); | ||
96 | |||
97 | extern int vmw_fence_obj_wait_ioctl(struct drm_device *dev, void *data, | ||
98 | struct drm_file *file_priv); | ||
99 | |||
100 | extern int vmw_fence_obj_signaled_ioctl(struct drm_device *dev, void *data, | ||
101 | struct drm_file *file_priv); | ||
102 | |||
103 | extern int vmw_fence_obj_unref_ioctl(struct drm_device *dev, void *data, | ||
104 | struct drm_file *file_priv); | ||
105 | #endif /* _VMWGFX_FENCE_H_ */ | ||