cam_sync.h 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. /* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */
  2. /*
  3. * Copyright (c) 2016-2018, 2020 The Linux Foundation. All rights reserved.
  4. */
  5. #ifndef __UAPI_CAM_SYNC_H__
  6. #define __UAPI_CAM_SYNC_H__
  7. #include <linux/videodev2.h>
  8. #include <linux/types.h>
  9. #include <linux/ioctl.h>
  10. #include <linux/media.h>
  11. #define CAM_SYNC_DEVICE_NAME "cam_sync_device"
  12. /* V4L event which user space will subscribe to */
  13. #define CAM_SYNC_V4L_EVENT (V4L2_EVENT_PRIVATE_START + 0)
  14. /* Specific event ids to get notified in user space */
  15. #define CAM_SYNC_V4L_EVENT_ID_CB_TRIG 0
  16. /* Size of opaque payload sent to kernel for safekeeping until signal time */
  17. #define CAM_SYNC_USER_PAYLOAD_SIZE 2
  18. /* Device type for sync device needed for device discovery */
  19. #define CAM_SYNC_DEVICE_TYPE (MEDIA_ENT_F_OLD_BASE)
  20. #define CAM_SYNC_GET_PAYLOAD_PTR(ev, type) \
  21. (type *)((char *)ev.u.data + sizeof(struct cam_sync_ev_header))
  22. #define CAM_SYNC_GET_HEADER_PTR(ev) \
  23. ((struct cam_sync_ev_header *)ev.u.data)
  24. #define CAM_SYNC_STATE_INVALID 0
  25. #define CAM_SYNC_STATE_ACTIVE 1
  26. #define CAM_SYNC_STATE_SIGNALED_SUCCESS 2
  27. #define CAM_SYNC_STATE_SIGNALED_ERROR 3
  28. #define CAM_SYNC_STATE_SIGNALED_CANCEL 4
  29. /**
  30. * struct cam_sync_ev_header - Event header for sync event notification
  31. *
  32. * @sync_obj: Sync object
  33. * @status: Status of the object
  34. */
  35. struct cam_sync_ev_header {
  36. __s32 sync_obj;
  37. __s32 status;
  38. };
  39. /**
  40. * struct cam_sync_info - Sync object creation information
  41. *
  42. * @name: Optional string representation of the sync object
  43. * @sync_obj: Sync object returned after creation in kernel
  44. */
  45. struct cam_sync_info {
  46. char name[64];
  47. __s32 sync_obj;
  48. };
  49. /**
  50. * struct cam_sync_signal - Sync object signaling struct
  51. *
  52. * @sync_obj: Sync object to be signaled
  53. * @sync_state: State of the sync object to which it should be signaled
  54. */
  55. struct cam_sync_signal {
  56. __s32 sync_obj;
  57. __u32 sync_state;
  58. };
  59. /**
  60. * struct cam_sync_merge - Merge information for sync objects
  61. *
  62. * @sync_objs: Pointer to sync objects
  63. * @num_objs: Number of objects in the array
  64. * @merged: Merged sync object
  65. */
  66. struct cam_sync_merge {
  67. __u64 sync_objs;
  68. __u32 num_objs;
  69. __s32 merged;
  70. };
  71. /**
  72. * struct cam_sync_userpayload_info - Payload info from user space
  73. *
  74. * @sync_obj: Sync object for which payload has to be registered for
  75. * @reserved: Reserved
  76. * @payload: Pointer to user payload
  77. */
  78. struct cam_sync_userpayload_info {
  79. __s32 sync_obj;
  80. __u32 reserved;
  81. __u64 payload[CAM_SYNC_USER_PAYLOAD_SIZE];
  82. };
  83. /**
  84. * struct cam_sync_wait - Sync object wait information
  85. *
  86. * @sync_obj: Sync object to wait on
  87. * @reserved: Reserved
  88. * @timeout_ms: Timeout in milliseconds
  89. */
  90. struct cam_sync_wait {
  91. __s32 sync_obj;
  92. __u32 reserved;
  93. uint64_t timeout_ms;
  94. };
  95. /**
  96. * struct cam_private_ioctl_arg - Sync driver ioctl argument
  97. *
  98. * @id: IOCTL command id
  99. * @size: Size of command payload
  100. * @result: Result of command execution
  101. * @reserved: Reserved
  102. * @ioctl_ptr: Pointer to user data
  103. */
  104. struct cam_private_ioctl_arg {
  105. __u32 id;
  106. __u32 size;
  107. __u32 result;
  108. __u32 reserved;
  109. __u64 ioctl_ptr;
  110. };
  111. #define CAM_PRIVATE_IOCTL_CMD \
  112. _IOWR('V', BASE_VIDIOC_PRIVATE, struct cam_private_ioctl_arg)
  113. #define CAM_SYNC_CREATE 0
  114. #define CAM_SYNC_DESTROY 1
  115. #define CAM_SYNC_SIGNAL 2
  116. #define CAM_SYNC_MERGE 3
  117. #define CAM_SYNC_REGISTER_PAYLOAD 4
  118. #define CAM_SYNC_DEREGISTER_PAYLOAD 5
  119. #define CAM_SYNC_WAIT 6
  120. #endif /* __UAPI_CAM_SYNC_H__ */