synx_header.h 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  1. /* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */
  2. /*
  3. * Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved.
  4. */
  5. #ifndef __UAPI_SYNX_H__
  6. #define __UAPI_SYNX_H__
  7. #include <linux/types.h>
  8. #include <linux/ioctl.h>
  9. /* Size of opaque payload sent to kernel for safekeeping until signal time */
  10. #define SYNX_USER_PAYLOAD_SIZE 4
  11. #define SYNX_MAX_WAITING_SYNX 16
  12. #define SYNX_CALLBACK_RESULT_SUCCESS 2
  13. #define SYNX_CALLBACK_RESULT_FAILED 3
  14. #define SYNX_CALLBACK_RESULT_CANCELED 4
  15. /**
  16. * struct synx_info - Sync object creation information
  17. *
  18. * @name : Optional string representation of the synx object
  19. * @synx_obj : Sync object returned after creation in kernel
  20. */
  21. struct synx_info {
  22. char name[64];
  23. __s32 synx_obj;
  24. };
  25. /**
  26. * struct synx_userpayload_info - Payload info from user space
  27. *
  28. * @synx_obj: Sync object for which payload has to be registered for
  29. * @reserved: Reserved
  30. * @payload: Pointer to user payload
  31. */
  32. struct synx_userpayload_info {
  33. __s32 synx_obj;
  34. __u32 reserved;
  35. __u64 payload[SYNX_USER_PAYLOAD_SIZE];
  36. };
  37. /**
  38. * struct synx_signal - Sync object signaling struct
  39. *
  40. * @synx_obj : Sync object to be signaled
  41. * @synx_state : State of the synx object to which it should be signaled
  42. */
  43. struct synx_signal {
  44. __s32 synx_obj;
  45. __u32 synx_state;
  46. };
  47. /**
  48. * struct synx_merge - Merge information for synx objects
  49. *
  50. * @synx_objs : Pointer to synx object array to merge
  51. * @num_objs : Number of objects in the array
  52. * @merged : Merged synx object
  53. */
  54. struct synx_merge {
  55. __u64 synx_objs;
  56. __u32 num_objs;
  57. __s32 merged;
  58. };
  59. /**
  60. * struct synx_wait - Sync object wait information
  61. *
  62. * @synx_obj : Sync object to wait on
  63. * @reserved : Reserved
  64. * @timeout_ms : Timeout in milliseconds
  65. */
  66. struct synx_wait {
  67. __s32 synx_obj;
  68. __u32 reserved;
  69. __u64 timeout_ms;
  70. };
  71. /**
  72. * struct synx_external_desc - info of external sync object
  73. *
  74. * @type : Synx type
  75. * @reserved : Reserved
  76. * @id : Sync object id
  77. *
  78. */
  79. struct synx_external_desc {
  80. __u32 type;
  81. __u32 reserved;
  82. __s32 id[2];
  83. };
  84. /**
  85. * struct synx_bind - info for binding two synx objects
  86. *
  87. * @synx_obj : Synx object
  88. * @Reserved : Reserved
  89. * @ext_sync_desc : External synx to bind to
  90. *
  91. */
  92. struct synx_bind {
  93. __s32 synx_obj;
  94. __u32 reserved;
  95. struct synx_external_desc ext_sync_desc;
  96. };
  97. /**
  98. * struct synx_addrefcount - info for refcount increment
  99. *
  100. * @synx_obj : Synx object
  101. * @count : Count to increment
  102. *
  103. */
  104. struct synx_addrefcount {
  105. __s32 synx_obj;
  106. __u32 count;
  107. };
  108. /**
  109. * struct synx_id_info - info for import and export of a synx object
  110. *
  111. * @synx_obj : Synx object to be exported
  112. * @secure_key : Secure key created in export and used in import
  113. * @new_synx_obj : Synx object created in import
  114. *
  115. */
  116. struct synx_id_info {
  117. __s32 synx_obj;
  118. __u32 secure_key;
  119. __s32 new_synx_obj;
  120. __u32 padding;
  121. };
  122. /**
  123. * struct synx_fence_desc - info of external fence object
  124. *
  125. * @type : Fence type
  126. * @reserved : Reserved
  127. * @id : Fence object id
  128. *
  129. */
  130. struct synx_fence_desc {
  131. __u32 type;
  132. __u32 reserved;
  133. __s32 id[2];
  134. };
  135. /**
  136. * struct synx_create - Sync object creation information
  137. *
  138. * @name : Optional string representation of the synx object
  139. * @synx_obj : Synx object allocated
  140. * @flags : Create flags
  141. * @desc : External fence desc
  142. */
  143. struct synx_create_v2 {
  144. char name[64];
  145. __u32 synx_obj;
  146. __u32 flags;
  147. struct synx_fence_desc desc;
  148. };
  149. /**
  150. * struct synx_userpayload_info - Payload info from user space
  151. *
  152. * @synx_obj : Sync object for which payload has to be registered for
  153. * @reserved : Reserved
  154. * @payload : Pointer to user payload
  155. */
  156. struct synx_userpayload_info_v2 {
  157. __u32 synx_obj;
  158. __u32 reserved;
  159. __u64 payload[SYNX_USER_PAYLOAD_SIZE];
  160. };
  161. /**
  162. * struct synx_signal - Sync object signaling struct
  163. *
  164. * @synx_obj : Sync object to be signaled
  165. * @synx_state : State of the synx object to which it should be signaled
  166. * @reserved : Reserved
  167. */
  168. struct synx_signal_v2 {
  169. __u32 synx_obj;
  170. __u32 synx_state;
  171. __u64 reserved;
  172. };
  173. /**
  174. * struct synx_merge - Merge information for synx objects
  175. *
  176. * @synx_objs : Pointer to synx object array to merge
  177. * @num_objs : Number of objects in the array
  178. * @merged : Merged synx object
  179. * @flags : Merge flags
  180. * @reserved : Reserved
  181. */
  182. struct synx_merge_v2 {
  183. __u64 synx_objs;
  184. __u32 num_objs;
  185. __u32 merged;
  186. __u32 flags;
  187. __u32 reserved;
  188. };
  189. /**
  190. * struct synx_wait - Sync object wait information
  191. *
  192. * @synx_obj : Sync object to wait on
  193. * @reserved : Reserved
  194. * @timeout_ms : Timeout in milliseconds
  195. */
  196. struct synx_wait_v2 {
  197. __u32 synx_obj;
  198. __u32 reserved;
  199. __u64 timeout_ms;
  200. };
  201. /**
  202. * struct synx_external_desc - info of external sync object
  203. *
  204. * @type : Synx type
  205. * @reserved : Reserved
  206. * @id : Sync object id
  207. *
  208. */
  209. struct synx_external_desc_v2 {
  210. __u64 id;
  211. __u32 type;
  212. __u32 reserved;
  213. };
  214. /**
  215. * struct synx_bind - info for binding two synx objects
  216. *
  217. * @synx_obj : Synx object
  218. * @Reserved : Reserved
  219. * @ext_sync_desc : External synx to bind to
  220. *
  221. */
  222. struct synx_bind_v2 {
  223. __u32 synx_obj;
  224. __u32 reserved;
  225. struct synx_external_desc_v2 ext_sync_desc;
  226. };
  227. /**
  228. * struct synx_import_info - import info
  229. *
  230. * @synx_obj : Synx handle to be imported
  231. * @flags : Import flags
  232. * @new_synx_obj : Synx object created in import
  233. * @reserved : Reserved
  234. * @desc : External fence descriptor
  235. */
  236. struct synx_import_info {
  237. __u32 synx_obj;
  238. __u32 flags;
  239. __u32 new_synx_obj;
  240. __u32 reserved;
  241. struct synx_fence_desc desc;
  242. };
  243. /**
  244. * struct synx_import_arr_info - import list info
  245. *
  246. * @list : List of synx_import_info
  247. * @num_objs : No of fences to import
  248. */
  249. struct synx_import_arr_info {
  250. __u64 list;
  251. __u32 num_objs;
  252. };
  253. /**
  254. * struct synx_fence_fd - get fd for synx fence
  255. *
  256. * @synx_obj : Synx handle
  257. * @fd : fd for synx handle fence
  258. */
  259. struct synx_fence_fd {
  260. __u32 synx_obj;
  261. __s32 fd;
  262. };
  263. /**
  264. * struct synx_private_ioctl_arg - Sync driver ioctl argument
  265. *
  266. * @id : IOCTL command id
  267. * @size : Size of command payload
  268. * @result : Result of command execution
  269. * @reserved : Reserved
  270. * @ioctl_ptr : Pointer to user data
  271. */
  272. struct synx_private_ioctl_arg {
  273. __u32 id;
  274. __u32 size;
  275. __u32 result;
  276. __u32 reserved;
  277. __u64 ioctl_ptr;
  278. };
  279. #define SYNX_PRIVATE_MAGIC_NUM 's'
  280. #define SYNX_PRIVATE_IOCTL_CMD \
  281. _IOWR(SYNX_PRIVATE_MAGIC_NUM, 130, struct synx_private_ioctl_arg)
  282. #define SYNX_CREATE 0
  283. #define SYNX_RELEASE 1
  284. #define SYNX_SIGNAL 2
  285. #define SYNX_MERGE 3
  286. #define SYNX_REGISTER_PAYLOAD 4
  287. #define SYNX_DEREGISTER_PAYLOAD 5
  288. #define SYNX_WAIT 6
  289. #define SYNX_BIND 7
  290. #define SYNX_ADDREFCOUNT 8
  291. #define SYNX_GETSTATUS 9
  292. #define SYNX_IMPORT 10
  293. #define SYNX_EXPORT 11
  294. #define SYNX_IMPORT_ARR 12
  295. #define SYNX_GETFENCE_FD 13
  296. #endif /* __UAPI_SYNX_H__ */