Commit | Line | Data |
---|---|---|
6fa3eb70 S |
1 | /* |
2 | * Copyright (C) 2012 Google, Inc. | |
3 | * | |
4 | * This program is distributed in the hope that it will be useful, | |
5 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
6 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
7 | * GNU General Public License for more details. | |
8 | * | |
9 | */ | |
10 | ||
11 | #ifndef _UAPI_LINUX_SYNC_H | |
12 | #define _UAPI_LINUX_SYNC_H | |
13 | ||
14 | #include <linux/ioctl.h> | |
15 | #include <linux/types.h> | |
16 | ||
17 | /** | |
18 | * struct sync_merge_data - data passed to merge ioctl | |
19 | * @fd2: file descriptor of second fence | |
20 | * @name: name of new fence | |
21 | * @fence: returns the fd of the new fence to userspace | |
22 | */ | |
23 | struct sync_merge_data { | |
24 | __s32 fd2; /* fd of second fence */ | |
25 | char name[32]; /* name of new fence */ | |
26 | __s32 fence; /* fd on newly created fence */ | |
27 | }; | |
28 | ||
29 | /** | |
30 | * struct sync_pt_info - detailed sync_pt information | |
31 | * @len: length of sync_pt_info including any driver_data | |
32 | * @obj_name: name of parent sync_timeline | |
33 | * @driver_name: name of driver implmenting the parent | |
34 | * @status: status of the sync_pt 0:active 1:signaled <0:error | |
35 | * @timestamp_ns: timestamp of status change in nanoseconds | |
36 | * @driver_data: any driver dependant data | |
37 | */ | |
38 | struct sync_pt_info { | |
39 | __u32 len; | |
40 | char obj_name[32]; | |
41 | char driver_name[32]; | |
42 | __s32 status; | |
43 | __u64 timestamp_ns; | |
44 | ||
45 | __u8 driver_data[0]; | |
46 | }; | |
47 | ||
48 | /** | |
49 | * struct sync_fence_info_data - data returned from fence info ioctl | |
50 | * @len: ioctl caller writes the size of the buffer its passing in. | |
51 | * ioctl returns length of sync_fence_data reutnred to userspace | |
52 | * including pt_info. | |
53 | * @name: name of fence | |
54 | * @status: status of fence. 1: signaled 0:active <0:error | |
55 | * @pt_info: a sync_pt_info struct for every sync_pt in the fence | |
56 | */ | |
57 | struct sync_fence_info_data { | |
58 | __u32 len; | |
59 | char name[32]; | |
60 | __s32 status; | |
61 | ||
62 | __u8 pt_info[0]; | |
63 | }; | |
64 | ||
65 | #define SYNC_IOC_MAGIC '>' | |
66 | ||
67 | /** | |
68 | * DOC: SYNC_IOC_WAIT - wait for a fence to signal | |
69 | * | |
70 | * pass timeout in milliseconds. Waits indefinitely timeout < 0. | |
71 | */ | |
72 | #define SYNC_IOC_WAIT _IOW(SYNC_IOC_MAGIC, 0, __s32) | |
73 | ||
74 | /** | |
75 | * DOC: SYNC_IOC_MERGE - merge two fences | |
76 | * | |
77 | * Takes a struct sync_merge_data. Creates a new fence containing copies of | |
78 | * the sync_pts in both the calling fd and sync_merge_data.fd2. Returns the | |
79 | * new fence's fd in sync_merge_data.fence | |
80 | */ | |
81 | #define SYNC_IOC_MERGE _IOWR(SYNC_IOC_MAGIC, 1, struct sync_merge_data) | |
82 | ||
83 | /** | |
84 | * DOC: SYNC_IOC_FENCE_INFO - get detailed information on a fence | |
85 | * | |
86 | * Takes a struct sync_fence_info_data with extra space allocated for pt_info. | |
87 | * Caller should write the size of the buffer into len. On return, len is | |
88 | * updated to reflect the total size of the sync_fence_info_data including | |
89 | * pt_info. | |
90 | * | |
91 | * pt_info is a buffer containing sync_pt_infos for every sync_pt in the fence. | |
92 | * To itterate over the sync_pt_infos, use the sync_pt_info.len field. | |
93 | */ | |
94 | #define SYNC_IOC_FENCE_INFO _IOWR(SYNC_IOC_MAGIC, 2,\ | |
95 | struct sync_fence_info_data) | |
96 | ||
97 | #endif /* _UAPI_LINUX_SYNC_H */ |