cam_sync.h 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. /* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */
  2. /*
  3. * Copyright (c) 2016-2018, 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. /**
  29. * struct cam_sync_ev_header - Event header for sync event notification
  30. *
  31. * @sync_obj: Sync object
  32. * @status: Status of the object
  33. */
  34. struct cam_sync_ev_header {
  35. int32_t sync_obj;
  36. int32_t status;
  37. };
  38. /**
  39. * struct cam_sync_info - Sync object creation information
  40. *
  41. * @name: Optional string representation of the sync object
  42. * @sync_obj: Sync object returned after creation in kernel
  43. */
  44. struct cam_sync_info {
  45. char name[64];
  46. int32_t sync_obj;
  47. };
  48. /**
  49. * struct cam_sync_signal - Sync object signaling struct
  50. *
  51. * @sync_obj: Sync object to be signaled
  52. * @sync_state: State of the sync object to which it should be signaled
  53. */
  54. struct cam_sync_signal {
  55. int32_t sync_obj;
  56. uint32_t sync_state;
  57. };
  58. /**
  59. * struct cam_sync_merge - Merge information for sync objects
  60. *
  61. * @sync_objs: Pointer to sync objects
  62. * @num_objs: Number of objects in the array
  63. * @merged: Merged sync object
  64. */
  65. struct cam_sync_merge {
  66. __u64 sync_objs;
  67. uint32_t num_objs;
  68. int32_t merged;
  69. };
  70. /**
  71. * struct cam_sync_userpayload_info - Payload info from user space
  72. *
  73. * @sync_obj: Sync object for which payload has to be registered for
  74. * @reserved: Reserved
  75. * @payload: Pointer to user payload
  76. */
  77. struct cam_sync_userpayload_info {
  78. int32_t sync_obj;
  79. uint32_t reserved;
  80. __u64 payload[CAM_SYNC_USER_PAYLOAD_SIZE];
  81. };
  82. /**
  83. * struct cam_sync_wait - Sync object wait information
  84. *
  85. * @sync_obj: Sync object to wait on
  86. * @reserved: Reserved
  87. * @timeout_ms: Timeout in milliseconds
  88. */
  89. struct cam_sync_wait {
  90. int32_t sync_obj;
  91. uint32_t reserved;
  92. uint64_t timeout_ms;
  93. };
  94. /**
  95. * struct cam_private_ioctl_arg - Sync driver ioctl argument
  96. *
  97. * @id: IOCTL command id
  98. * @size: Size of command payload
  99. * @result: Result of command execution
  100. * @reserved: Reserved
  101. * @ioctl_ptr: Pointer to user data
  102. */
  103. struct cam_private_ioctl_arg {
  104. __u32 id;
  105. __u32 size;
  106. __u32 result;
  107. __u32 reserved;
  108. __u64 ioctl_ptr;
  109. };
  110. #define CAM_PRIVATE_IOCTL_CMD \
  111. _IOWR('V', BASE_VIDIOC_PRIVATE, struct cam_private_ioctl_arg)
  112. #define CAM_SYNC_CREATE 0
  113. #define CAM_SYNC_DESTROY 1
  114. #define CAM_SYNC_SIGNAL 2
  115. #define CAM_SYNC_MERGE 3
  116. #define CAM_SYNC_REGISTER_PAYLOAD 4
  117. #define CAM_SYNC_DEREGISTER_PAYLOAD 5
  118. #define CAM_SYNC_WAIT 6
  119. #endif /* __UAPI_CAM_SYNC_H__ */