};
#define PVR_EVENT_SYNC 0x01
+#define PVR_EVENT_FLIP 0x02
+#define PVR_EVENT_UPDATE 0x03 /* also uses struct pvr_event_flip */
/*
* Every buffer used as a render target has a 'PVRSRV_KERNEL_SYNC_INFO'
struct pvr_event_sync {
struct pvr_event base;
const struct PVRSRV_KERNEL_SYNC_INFO *sync_info;
+ __u64 user_data;
__u32 tv_sec;
__u32 tv_usec;
};
+struct pvr_event_flip {
+ struct pvr_event base;
+ __u64 user_data;
+ __u32 tv_sec;
+ __u32 tv_usec;
+ __u32 overlay;
+};
+
/* Event queued up for userspace to read */
struct pvr_pending_event {
struct pvr_event *event;
struct list_head link;
struct PVRSRV_FILE_PRIVATE_DATA *file_priv;
void (*destroy)(struct pvr_pending_event *event);
+ u32 write_ops_pending;
};
struct pvr_pending_sync_event {
struct pvr_event_sync event;
};
+struct pvr_pending_flip_event {
+ struct pvr_pending_event base;
+ struct pvr_event_flip event;
+ unsigned int dss_event;
+};
+
+enum pvr_sync_wait_seq_type;
+
void pvr_init_events(void);
+void pvr_exit_events(void);
int pvr_sync_event_req(struct PVRSRV_FILE_PRIVATE_DATA *priv,
- const struct PVRSRV_KERNEL_SYNC_INFO *sync_info);
+ const struct PVRSRV_KERNEL_SYNC_INFO *sync_info,
+ u64 user_data);
+int pvr_flip_event_req(struct PVRSRV_FILE_PRIVATE_DATA *priv,
+ unsigned int overlay,
+ enum pvr_sync_wait_seq_type type, u64 user_data);
ssize_t pvr_read(struct file *filp, char __user *buf, size_t count,
loff_t *off);
unsigned int pvr_poll(struct file *filp, struct poll_table_struct *wait);