Home | History | Annotate | Download | only in media
      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