diff options
Diffstat (limited to 'drivers/gpu/drm/vmwgfx/vmwgfx_fence.h')
-rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_fence.h | 113 |
1 files changed, 113 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..0854a2096b55 --- /dev/null +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.h | |||
@@ -0,0 +1,113 @@ | |||
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 | enum vmw_action_type { | ||
41 | VMW_ACTION_EVENT = 0, | ||
42 | VMW_ACTION_MAX | ||
43 | }; | ||
44 | |||
45 | struct vmw_fence_action { | ||
46 | struct list_head head; | ||
47 | enum vmw_action_type type; | ||
48 | void (*seq_passed) (struct vmw_fence_action *action); | ||
49 | void (*cleanup) (struct vmw_fence_action *action); | ||
50 | }; | ||
51 | |||
52 | struct vmw_fence_obj { | ||
53 | struct kref kref; | ||
54 | u32 seqno; | ||
55 | |||
56 | struct vmw_fence_manager *fman; | ||
57 | struct list_head head; | ||
58 | uint32_t signaled; | ||
59 | uint32_t signal_mask; | ||
60 | struct list_head seq_passed_actions; | ||
61 | void (*destroy)(struct vmw_fence_obj *fence); | ||
62 | wait_queue_head_t queue; | ||
63 | }; | ||
64 | |||
65 | extern struct vmw_fence_manager * | ||
66 | vmw_fence_manager_init(struct vmw_private *dev_priv); | ||
67 | |||
68 | extern void vmw_fence_manager_takedown(struct vmw_fence_manager *fman); | ||
69 | |||
70 | extern void vmw_fence_obj_unreference(struct vmw_fence_obj **fence_p); | ||
71 | |||
72 | extern struct vmw_fence_obj * | ||
73 | vmw_fence_obj_reference(struct vmw_fence_obj *fence); | ||
74 | |||
75 | extern void vmw_fences_update(struct vmw_fence_manager *fman); | ||
76 | |||
77 | extern bool vmw_fence_obj_signaled(struct vmw_fence_obj *fence, | ||
78 | uint32_t flags); | ||
79 | |||
80 | extern int vmw_fence_obj_wait(struct vmw_fence_obj *fence, uint32_t flags, | ||
81 | bool lazy, | ||
82 | bool interruptible, unsigned long timeout); | ||
83 | |||
84 | extern void vmw_fence_obj_flush(struct vmw_fence_obj *fence); | ||
85 | |||
86 | extern int vmw_fence_create(struct vmw_fence_manager *fman, | ||
87 | uint32_t seqno, | ||
88 | uint32_t mask, | ||
89 | struct vmw_fence_obj **p_fence); | ||
90 | |||
91 | extern int vmw_user_fence_create(struct drm_file *file_priv, | ||
92 | struct vmw_fence_manager *fman, | ||
93 | uint32_t sequence, | ||
94 | uint32_t mask, | ||
95 | struct vmw_fence_obj **p_fence, | ||
96 | uint32_t *p_handle); | ||
97 | |||
98 | extern void vmw_fence_fifo_up(struct vmw_fence_manager *fman); | ||
99 | |||
100 | extern void vmw_fence_fifo_down(struct vmw_fence_manager *fman); | ||
101 | |||
102 | extern int vmw_fence_obj_wait_ioctl(struct drm_device *dev, void *data, | ||
103 | struct drm_file *file_priv); | ||
104 | |||
105 | extern int vmw_fence_obj_signaled_ioctl(struct drm_device *dev, void *data, | ||
106 | struct drm_file *file_priv); | ||
107 | |||
108 | extern int vmw_fence_obj_unref_ioctl(struct drm_device *dev, void *data, | ||
109 | struct drm_file *file_priv); | ||
110 | extern int vmw_fence_event_ioctl(struct drm_device *dev, void *data, | ||
111 | struct drm_file *file_priv); | ||
112 | |||
113 | #endif /* _VMWGFX_FENCE_H_ */ | ||