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