Merge tag 'for-linville-20141024' of git://github.com/kvalo/ath
[firefly-linux-kernel-4.4.55.git] / drivers / gpu / drm / vmwgfx / vmwgfx_fence.h
index faf2e7873860a388e4f5323e30636a53a9c2d366..26a4add392085531c2dc5d2c77c4072177a0be1d 100644 (file)
@@ -27,6 +27,8 @@
 
 #ifndef _VMWGFX_FENCE_H_
 
+#include <linux/fence.h>
+
 #define VMW_FENCE_WAIT_TIMEOUT (5*HZ)
 
 struct vmw_private;
@@ -50,16 +52,11 @@ struct vmw_fence_action {
 };
 
 struct vmw_fence_obj {
-       struct kref kref;
-       u32 seqno;
+       struct fence base;
 
-       struct vmw_fence_manager *fman;
        struct list_head head;
-       uint32_t signaled;
-       uint32_t signal_mask;
        struct list_head seq_passed_actions;
        void (*destroy)(struct vmw_fence_obj *fence);
-       wait_queue_head_t queue;
 };
 
 extern struct vmw_fence_manager *
@@ -67,17 +64,29 @@ vmw_fence_manager_init(struct vmw_private *dev_priv);
 
 extern void vmw_fence_manager_takedown(struct vmw_fence_manager *fman);
 
-extern void vmw_fence_obj_unreference(struct vmw_fence_obj **fence_p);
+static inline void
+vmw_fence_obj_unreference(struct vmw_fence_obj **fence_p)
+{
+       struct vmw_fence_obj *fence = *fence_p;
+
+       *fence_p = NULL;
+       if (fence)
+               fence_put(&fence->base);
+}
 
-extern struct vmw_fence_obj *
-vmw_fence_obj_reference(struct vmw_fence_obj *fence);
+static inline struct vmw_fence_obj *
+vmw_fence_obj_reference(struct vmw_fence_obj *fence)
+{
+       if (fence)
+               fence_get(&fence->base);
+       return fence;
+}
 
 extern void vmw_fences_update(struct vmw_fence_manager *fman);
 
-extern bool vmw_fence_obj_signaled(struct vmw_fence_obj *fence,
-                                  uint32_t flags);
+extern bool vmw_fence_obj_signaled(struct vmw_fence_obj *fence);
 
-extern int vmw_fence_obj_wait(struct vmw_fence_obj *fence, uint32_t flags,
+extern int vmw_fence_obj_wait(struct vmw_fence_obj *fence,
                              bool lazy,
                              bool interruptible, unsigned long timeout);
 
@@ -85,13 +94,11 @@ extern void vmw_fence_obj_flush(struct vmw_fence_obj *fence);
 
 extern int vmw_fence_create(struct vmw_fence_manager *fman,
                            uint32_t seqno,
-                           uint32_t mask,
                            struct vmw_fence_obj **p_fence);
 
 extern int vmw_user_fence_create(struct drm_file *file_priv,
                                 struct vmw_fence_manager *fman,
                                 uint32_t sequence,
-                                uint32_t mask,
                                 struct vmw_fence_obj **p_fence,
                                 uint32_t *p_handle);