Home | History | Annotate | Download | only in media
      1 #ifndef __MSMB_PPROC_H
      2 #define __MSMB_PPROC_H
      3 
      4 #ifdef MSM_CAMERA_BIONIC
      5 #include <sys/types.h>
      6 #endif
      7 #ifdef CONFIG_COMPAT
      8 #include <linux/compat.h>
      9 #endif
     10 #include <linux/videodev2.h>
     11 #include <linux/types.h>
     12 #include <media/msmb_generic_buf_mgr.h>
     13 
     14 /* Should be same as VIDEO_MAX_PLANES in videodev2.h */
     15 #define MAX_PLANES VIDEO_MAX_PLANES
     16 /* PARTIAL_FRAME_STRIPE_COUNT must be even */
     17 #define PARTIAL_FRAME_STRIPE_COUNT 4
     18 
     19 #define MAX_NUM_CPP_STRIPS 8
     20 #define MSM_CPP_MAX_NUM_PLANES 3
     21 #define MSM_CPP_MIN_FRAME_LENGTH 13
     22 #define MSM_CPP_MAX_FRAME_LENGTH 4096
     23 #define MSM_CPP_MAX_FW_NAME_LEN 32
     24 #define MAX_FREQ_TBL 10
     25 
     26 enum msm_cpp_frame_type {
     27 	MSM_CPP_OFFLINE_FRAME,
     28 	MSM_CPP_REALTIME_FRAME,
     29 };
     30 
     31 enum msm_vpe_frame_type {
     32 	MSM_VPE_OFFLINE_FRAME,
     33 	MSM_VPE_REALTIME_FRAME,
     34 };
     35 
     36 struct msm_cpp_buffer_info_t {
     37 	int32_t fd;
     38 	uint32_t index;
     39 	uint32_t offset;
     40 	uint8_t native_buff;
     41 	uint8_t processed_divert;
     42 	uint32_t identity;
     43 };
     44 
     45 struct msm_cpp_stream_buff_info_t {
     46 	uint32_t identity;
     47 	uint32_t num_buffs;
     48 	struct msm_cpp_buffer_info_t *buffer_info;
     49 };
     50 
     51 enum msm_cpp_batch_mode_t {
     52 	BATCH_MODE_NONE,
     53 	BATCH_MODE_VIDEO,
     54 	BATCH_MODE_PREVIEW
     55 };
     56 
     57 struct msm_cpp_batch_info_t {
     58 	enum msm_cpp_batch_mode_t  batch_mode;
     59 	uint32_t batch_size;
     60 	uint32_t intra_plane_offset[MAX_PLANES];
     61 	uint32_t pick_preview_idx;
     62 	uint32_t cont_idx;
     63 };
     64 
     65 struct msm_cpp_frame_info_t {
     66 	int32_t frame_id;
     67 	struct timeval timestamp;
     68 	uint32_t inst_id;
     69 	uint32_t identity;
     70 	uint32_t client_id;
     71 	enum msm_cpp_frame_type frame_type;
     72 	uint32_t num_strips;
     73 	uint32_t msg_len;
     74 	uint32_t *cpp_cmd_msg;
     75 	int src_fd;
     76 	int dst_fd;
     77 	struct timeval in_time, out_time;
     78 	void __user *cookie;
     79 	int32_t *status;
     80 	int32_t duplicate_output;
     81 	uint32_t duplicate_identity;
     82 	uint32_t feature_mask;
     83 	uint8_t we_disable;
     84 	struct msm_cpp_buffer_info_t input_buffer_info;
     85 	struct msm_cpp_buffer_info_t output_buffer_info[8];
     86 	struct msm_cpp_buffer_info_t duplicate_buffer_info;
     87 	struct msm_cpp_buffer_info_t tnr_scratch_buffer_info[2];
     88 	uint32_t reserved;
     89 	uint8_t partial_frame_indicator;
     90 	/* the followings are used only for partial_frame type
     91 	 * and is only used for offline frame processing and
     92 	 * only if payload big enough and need to be split into partial_frame
     93 	 * if first_payload, kernel acquires output buffer
     94 	 * first payload must have the last stripe
     95 	 * buffer addresses from 0 to last_stripe_index are updated.
     96 	 * kernel updates payload with msg_len and stripe_info
     97 	 * kernel sends top level, plane level, then only stripes
     98 	 * starting with first_stripe_index and
     99 	 * ends with last_stripe_index
    100 	 * kernel then sends trailing flag at frame done,
    101 	 * if last payload, kernel queues the output buffer to HAL
    102 	 */
    103 	uint8_t first_payload;
    104 	uint8_t last_payload;
    105 	uint32_t first_stripe_index;
    106 	uint32_t last_stripe_index;
    107 	uint32_t stripe_info_offset;
    108 	uint32_t stripe_info;
    109 	struct msm_cpp_batch_info_t  batch_info;
    110 };
    111 
    112 struct msm_cpp_pop_stream_info_t {
    113 	int32_t frame_id;
    114 	uint32_t identity;
    115 };
    116 
    117 struct cpp_hw_info {
    118 	uint32_t cpp_hw_version;
    119 	uint32_t cpp_hw_caps;
    120 	unsigned long freq_tbl[MAX_FREQ_TBL];
    121 	uint32_t freq_tbl_count;
    122 };
    123 
    124 struct msm_vpe_frame_strip_info {
    125 	uint32_t src_w;
    126 	uint32_t src_h;
    127 	uint32_t dst_w;
    128 	uint32_t dst_h;
    129 	uint32_t src_x;
    130 	uint32_t src_y;
    131 	uint32_t phase_step_x;
    132 	uint32_t phase_step_y;
    133 	uint32_t phase_init_x;
    134 	uint32_t phase_init_y;
    135 };
    136 
    137 struct msm_vpe_buffer_info_t {
    138 	int32_t fd;
    139 	uint32_t index;
    140 	uint32_t offset;
    141 	uint8_t native_buff;
    142 	uint8_t processed_divert;
    143 };
    144 
    145 struct msm_vpe_stream_buff_info_t {
    146 	uint32_t identity;
    147 	uint32_t num_buffs;
    148 	struct msm_vpe_buffer_info_t *buffer_info;
    149 };
    150 
    151 struct msm_vpe_frame_info_t {
    152 	int32_t frame_id;
    153 	struct timeval timestamp;
    154 	uint32_t inst_id;
    155 	uint32_t identity;
    156 	uint32_t client_id;
    157 	enum msm_vpe_frame_type frame_type;
    158 	struct msm_vpe_frame_strip_info strip_info;
    159 	unsigned long src_fd;
    160 	unsigned long dst_fd;
    161 	struct ion_handle *src_ion_handle;
    162 	struct ion_handle *dest_ion_handle;
    163 	unsigned long src_phyaddr;
    164 	unsigned long dest_phyaddr;
    165 	unsigned long src_chroma_plane_offset;
    166 	unsigned long dest_chroma_plane_offset;
    167 	struct timeval in_time, out_time;
    168 	void *cookie;
    169 
    170 	struct msm_vpe_buffer_info_t input_buffer_info;
    171 	struct msm_vpe_buffer_info_t output_buffer_info;
    172 };
    173 
    174 struct msm_pproc_queue_buf_info {
    175 	struct msm_buf_mngr_info buff_mgr_info;
    176 	uint8_t is_buf_dirty;
    177 };
    178 
    179 struct msm_cpp_clock_settings_t {
    180 	unsigned long clock_rate;
    181 	uint64_t avg;
    182 	uint64_t inst;
    183 };
    184 
    185 #define VIDIOC_MSM_CPP_CFG \
    186 	_IOWR('V', BASE_VIDIOC_PRIVATE, struct msm_camera_v4l2_ioctl_t)
    187 
    188 #define VIDIOC_MSM_CPP_GET_EVENTPAYLOAD \
    189 	_IOWR('V', BASE_VIDIOC_PRIVATE + 1, struct msm_camera_v4l2_ioctl_t)
    190 
    191 #define VIDIOC_MSM_CPP_GET_INST_INFO \
    192 	_IOWR('V', BASE_VIDIOC_PRIVATE + 2, struct msm_camera_v4l2_ioctl_t)
    193 
    194 #define VIDIOC_MSM_CPP_LOAD_FIRMWARE \
    195 	_IOWR('V', BASE_VIDIOC_PRIVATE + 3, struct msm_camera_v4l2_ioctl_t)
    196 
    197 #define VIDIOC_MSM_CPP_GET_HW_INFO \
    198 	_IOWR('V', BASE_VIDIOC_PRIVATE + 4, struct msm_camera_v4l2_ioctl_t)
    199 
    200 #define VIDIOC_MSM_CPP_FLUSH_QUEUE \
    201 	_IOWR('V', BASE_VIDIOC_PRIVATE + 5, struct msm_camera_v4l2_ioctl_t)
    202 
    203 #define VIDIOC_MSM_CPP_ENQUEUE_STREAM_BUFF_INFO \
    204 	_IOWR('V', BASE_VIDIOC_PRIVATE + 6, struct msm_camera_v4l2_ioctl_t)
    205 
    206 #define VIDIOC_MSM_CPP_DEQUEUE_STREAM_BUFF_INFO \
    207 	_IOWR('V', BASE_VIDIOC_PRIVATE + 7, struct msm_camera_v4l2_ioctl_t)
    208 
    209 #define VIDIOC_MSM_VPE_CFG \
    210 	_IOWR('V', BASE_VIDIOC_PRIVATE + 8, struct msm_camera_v4l2_ioctl_t)
    211 
    212 #define VIDIOC_MSM_VPE_TRANSACTION_SETUP \
    213 	_IOWR('V', BASE_VIDIOC_PRIVATE + 9, struct msm_camera_v4l2_ioctl_t)
    214 
    215 #define VIDIOC_MSM_VPE_GET_EVENTPAYLOAD \
    216 	_IOWR('V', BASE_VIDIOC_PRIVATE + 10, struct msm_camera_v4l2_ioctl_t)
    217 
    218 #define VIDIOC_MSM_VPE_GET_INST_INFO \
    219 	_IOWR('V', BASE_VIDIOC_PRIVATE + 11, struct msm_camera_v4l2_ioctl_t)
    220 
    221 #define VIDIOC_MSM_VPE_ENQUEUE_STREAM_BUFF_INFO \
    222 	_IOWR('V', BASE_VIDIOC_PRIVATE + 12, struct msm_camera_v4l2_ioctl_t)
    223 
    224 #define VIDIOC_MSM_VPE_DEQUEUE_STREAM_BUFF_INFO \
    225 	_IOWR('V', BASE_VIDIOC_PRIVATE + 13, struct msm_camera_v4l2_ioctl_t)
    226 
    227 #define VIDIOC_MSM_CPP_QUEUE_BUF \
    228 	_IOWR('V', BASE_VIDIOC_PRIVATE + 14, struct msm_camera_v4l2_ioctl_t)
    229 
    230 #define VIDIOC_MSM_CPP_APPEND_STREAM_BUFF_INFO \
    231 	_IOWR('V', BASE_VIDIOC_PRIVATE + 15, struct msm_camera_v4l2_ioctl_t)
    232 
    233 #define VIDIOC_MSM_CPP_SET_CLOCK \
    234 	_IOWR('V', BASE_VIDIOC_PRIVATE + 16, struct msm_camera_v4l2_ioctl_t)
    235 
    236 #define VIDIOC_MSM_CPP_POP_STREAM_BUFFER \
    237 	_IOWR('V', BASE_VIDIOC_PRIVATE + 17, struct msm_camera_v4l2_ioctl_t)
    238 
    239 #define VIDIOC_MSM_CPP_IOMMU_ATTACH \
    240 	_IOWR('V', BASE_VIDIOC_PRIVATE + 18, struct msm_camera_v4l2_ioctl_t)
    241 
    242 #define VIDIOC_MSM_CPP_IOMMU_DETACH \
    243 	_IOWR('V', BASE_VIDIOC_PRIVATE + 19, struct msm_camera_v4l2_ioctl_t)
    244 
    245 #define VIDIOC_MSM_CPP_DELETE_STREAM_BUFF\
    246 	_IOWR('V', BASE_VIDIOC_PRIVATE + 20, struct msm_camera_v4l2_ioctl_t)
    247 
    248 
    249 #define V4L2_EVENT_CPP_FRAME_DONE  (V4L2_EVENT_PRIVATE_START + 0)
    250 #define V4L2_EVENT_VPE_FRAME_DONE  (V4L2_EVENT_PRIVATE_START + 1)
    251 
    252 struct msm_camera_v4l2_ioctl_t {
    253 	uint32_t id;
    254 	size_t len;
    255 	int32_t trans_code;
    256 	void __user *ioctl_ptr;
    257 };
    258 
    259 #ifdef CONFIG_COMPAT
    260 struct msm_cpp_frame_info32_t {
    261 	int32_t frame_id;
    262 	struct compat_timeval timestamp;
    263 	uint32_t inst_id;
    264 	uint32_t identity;
    265 	uint32_t client_id;
    266 	enum msm_cpp_frame_type frame_type;
    267 	uint32_t num_strips;
    268 	uint32_t msg_len;
    269 	compat_uint_t cpp_cmd_msg;
    270 	int src_fd;
    271 	int dst_fd;
    272 	struct compat_timeval in_time, out_time;
    273 	compat_caddr_t cookie;
    274 	compat_int_t status;
    275 	int32_t duplicate_output;
    276 	uint32_t duplicate_identity;
    277 	uint32_t feature_mask;
    278 	uint8_t we_disable;
    279 	struct msm_cpp_buffer_info_t input_buffer_info;
    280 	struct msm_cpp_buffer_info_t output_buffer_info[8];
    281 	struct msm_cpp_buffer_info_t duplicate_buffer_info;
    282 	struct msm_cpp_buffer_info_t tnr_scratch_buffer_info[2];
    283 	uint32_t reserved;
    284 	uint8_t partial_frame_indicator;
    285 	/* the followings are used only for partial_frame type
    286 	 * and is only used for offline frame processing and
    287 	 * only if payload big enough and need to be split into partial_frame
    288 	 * if first_payload, kernel acquires output buffer
    289 	 * first payload must have the last stripe
    290 	 * buffer addresses from 0 to last_stripe_index are updated.
    291 	 * kernel updates payload with msg_len and stripe_info
    292 	 * kernel sends top level, plane level, then only stripes
    293 	 * starting with first_stripe_index and
    294 	 * ends with last_stripe_index
    295 	 * kernel then sends trailing flag at frame done,
    296 	 * if last payload, kernel queues the output buffer to HAL
    297 	 */
    298 	uint8_t first_payload;
    299 	uint8_t last_payload;
    300 	uint32_t first_stripe_index;
    301 	uint32_t last_stripe_index;
    302 	uint32_t stripe_info_offset;
    303 	uint32_t stripe_info;
    304 	struct msm_cpp_batch_info_t  batch_info;
    305 };
    306 
    307 struct msm_cpp_clock_settings32_t {
    308 	compat_long_t clock_rate;
    309 	uint64_t avg;
    310 	uint64_t inst;
    311 };
    312 
    313 struct msm_cpp_stream_buff_info32_t {
    314 	uint32_t identity;
    315 	uint32_t num_buffs;
    316 	compat_caddr_t buffer_info;
    317 };
    318 
    319 struct msm_pproc_queue_buf_info32_t {
    320 	struct msm_buf_mngr_info32_t buff_mgr_info;
    321 	uint8_t is_buf_dirty;
    322 };
    323 
    324 struct cpp_hw_info_32_t {
    325 	uint32_t cpp_hw_version;
    326 	uint32_t cpp_hw_caps;
    327 	compat_long_t freq_tbl[MAX_FREQ_TBL];
    328 	uint32_t freq_tbl_count;
    329 };
    330 
    331 
    332 #define VIDIOC_MSM_CPP_CFG32 \
    333 	_IOWR('V', BASE_VIDIOC_PRIVATE, struct msm_camera_v4l2_ioctl32_t)
    334 
    335 #define VIDIOC_MSM_CPP_GET_EVENTPAYLOAD32 \
    336 	_IOWR('V', BASE_VIDIOC_PRIVATE + 1, struct msm_camera_v4l2_ioctl32_t)
    337 
    338 #define VIDIOC_MSM_CPP_GET_INST_INFO32 \
    339 	_IOWR('V', BASE_VIDIOC_PRIVATE + 2, struct msm_camera_v4l2_ioctl32_t)
    340 
    341 #define VIDIOC_MSM_CPP_LOAD_FIRMWARE32 \
    342 	_IOWR('V', BASE_VIDIOC_PRIVATE + 3, struct msm_camera_v4l2_ioctl32_t)
    343 
    344 #define VIDIOC_MSM_CPP_GET_HW_INFO32 \
    345 	_IOWR('V', BASE_VIDIOC_PRIVATE + 4, struct msm_camera_v4l2_ioctl32_t)
    346 
    347 #define VIDIOC_MSM_CPP_FLUSH_QUEUE32 \
    348 	_IOWR('V', BASE_VIDIOC_PRIVATE + 5, struct msm_camera_v4l2_ioctl32_t)
    349 
    350 #define VIDIOC_MSM_CPP_ENQUEUE_STREAM_BUFF_INFO32 \
    351 	_IOWR('V', BASE_VIDIOC_PRIVATE + 6, struct msm_camera_v4l2_ioctl32_t)
    352 
    353 #define VIDIOC_MSM_CPP_DEQUEUE_STREAM_BUFF_INFO32 \
    354 	_IOWR('V', BASE_VIDIOC_PRIVATE + 7, struct msm_camera_v4l2_ioctl32_t)
    355 
    356 #define VIDIOC_MSM_VPE_CFG32 \
    357 	_IOWR('V', BASE_VIDIOC_PRIVATE + 8, struct msm_camera_v4l2_ioctl32_t)
    358 
    359 #define VIDIOC_MSM_VPE_TRANSACTION_SETUP32 \
    360 	_IOWR('V', BASE_VIDIOC_PRIVATE + 9, struct msm_camera_v4l2_ioctl32_t)
    361 
    362 #define VIDIOC_MSM_VPE_GET_EVENTPAYLOAD32 \
    363 	_IOWR('V', BASE_VIDIOC_PRIVATE + 10, struct msm_camera_v4l2_ioctl32_t)
    364 
    365 #define VIDIOC_MSM_VPE_GET_INST_INFO32 \
    366 	_IOWR('V', BASE_VIDIOC_PRIVATE + 11, struct msm_camera_v4l2_ioctl32_t)
    367 
    368 #define VIDIOC_MSM_VPE_ENQUEUE_STREAM_BUFF_INFO32 \
    369 	_IOWR('V', BASE_VIDIOC_PRIVATE + 12, struct msm_camera_v4l2_ioctl32_t)
    370 
    371 #define VIDIOC_MSM_VPE_DEQUEUE_STREAM_BUFF_INFO32 \
    372 	_IOWR('V', BASE_VIDIOC_PRIVATE + 13, struct msm_camera_v4l2_ioctl32_t)
    373 
    374 #define VIDIOC_MSM_CPP_QUEUE_BUF32 \
    375 	_IOWR('V', BASE_VIDIOC_PRIVATE + 14, struct msm_camera_v4l2_ioctl32_t)
    376 
    377 #define VIDIOC_MSM_CPP_APPEND_STREAM_BUFF_INFO32 \
    378 	_IOWR('V', BASE_VIDIOC_PRIVATE + 15, struct msm_camera_v4l2_ioctl32_t)
    379 
    380 #define VIDIOC_MSM_CPP_SET_CLOCK32 \
    381 	_IOWR('V', BASE_VIDIOC_PRIVATE + 16, struct msm_camera_v4l2_ioctl32_t)
    382 
    383 #define VIDIOC_MSM_CPP_POP_STREAM_BUFFER32 \
    384 	_IOWR('V', BASE_VIDIOC_PRIVATE + 17, struct msm_camera_v4l2_ioctl32_t)
    385 
    386 #define VIDIOC_MSM_CPP_IOMMU_ATTACH32 \
    387 	_IOWR('V', BASE_VIDIOC_PRIVATE + 18, struct msm_camera_v4l2_ioctl32_t)
    388 
    389 #define VIDIOC_MSM_CPP_IOMMU_DETACH32 \
    390 	_IOWR('V', BASE_VIDIOC_PRIVATE + 19, struct msm_camera_v4l2_ioctl32_t)
    391 
    392 #define VIDIOC_MSM_CPP_DELETE_STREAM_BUFF32\
    393 	_IOWR('V', BASE_VIDIOC_PRIVATE + 20, struct msm_camera_v4l2_ioctl32_t)
    394 
    395 struct msm_camera_v4l2_ioctl32_t {
    396 	uint32_t id;
    397 	uint32_t len;
    398 	int32_t trans_code;
    399 	compat_caddr_t ioctl_ptr;
    400 };
    401 #endif
    402 
    403 #endif /* __MSMB_PPROC_H */
    404