1,6 → 1,6 |
/************************************************************************** |
* |
* Copyright © 2011 VMware, Inc., Palo Alto, CA., USA |
* Copyright © 2011-2012 VMware, Inc., Palo Alto, CA., USA |
* All Rights Reserved. |
* |
* Permission is hereby granted, free of charge, to any person obtaining a |
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_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 |
|
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; |
|
extern struct vmw_fence_obj * |
vmw_fence_obj_reference(struct vmw_fence_obj *fence); |
*fence_p = NULL; |
if (fence) |
fence_put(&fence->base); |
} |
|
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 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); |
|
111,7 → 118,6 |
struct drm_file *file_priv); |
extern void vmw_event_fence_fpriv_gone(struct vmw_fence_manager *fman, |
struct list_head *event_list); |
/* |
extern int vmw_event_fence_action_queue(struct drm_file *filee_priv, |
struct vmw_fence_obj *fence, |
struct drm_pending_event *event, |
118,6 → 124,4 |
uint32_t *tv_sec, |
uint32_t *tv_usec, |
bool interruptible); |
*/ |
|
#endif /* _VMWGFX_FENCE_H_ */ |