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_frame_strip_info {
     37 	uint32_t scale_v_en;
     38 	uint32_t scale_h_en;
     39 
     40 	uint32_t upscale_v_en;
     41 	uint32_t upscale_h_en;
     42 
     43 	int32_t src_start_x;
     44 	uint32_t src_end_x;
     45 	int32_t src_start_y;
     46 	uint32_t src_end_y;
     47 
     48 	/* extra 5th and 6th layer parameters */
     49 	int32_t extra_src_start_x;
     50 	int32_t extra_src_end_x;
     51 	int32_t extra_src_start_y;
     52 	int32_t extra_src_end_y;
     53 
     54 	int32_t extra_initial_vertical_count[2];
     55 	int32_t extra_initial_horizontal_count[2];
     56 
     57 	/* crop downscale 32x pixels */
     58 	int32_t extra_left_crop;
     59 	int32_t extra_top_crop;
     60 
     61 	int32_t extra_pad_bottom;
     62 	int32_t extra_pad_top;
     63 	int32_t extra_pad_right;
     64 	int32_t extra_pad_left;
     65 
     66 	int32_t extra_upscale_width;
     67 	int32_t extra_upscale_height;
     68 
     69 	uint32_t temporal_pad_bottom;
     70 	uint32_t temporal_pad_top;
     71 	uint32_t temporal_pad_right;
     72 	uint32_t temporal_pad_left;
     73 
     74 	int32_t temporal_src_start_x;
     75 	uint32_t temporal_src_end_x;
     76 	int32_t temporal_src_start_y;
     77 	uint32_t temporal_src_end_y;
     78 
     79 	/* Padding is required for upscaler because it does not
     80 	 * pad internally like other blocks, also needed for rotation
     81 	 * rotation expects all the blocks in the stripe to be the same size
     82 	 * Padding is done such that all the extra padded pixels
     83 	 * are on the right and bottom
     84 	 */
     85 	uint32_t pad_bottom;
     86 	uint32_t pad_top;
     87 	uint32_t pad_right;
     88 	uint32_t pad_left;
     89 
     90 	uint32_t v_init_phase;
     91 	uint32_t h_init_phase;
     92 	uint32_t h_phase_step;
     93 	uint32_t v_phase_step;
     94 
     95 	uint32_t spatial_denoise_crop_width_first_pixel;
     96 	uint32_t spatial_denoise_crop_width_last_pixel;
     97 	uint32_t spatial_denoise_crop_height_first_line;
     98 	uint32_t spatial_denoise_crop_height_last_line;
     99 
    100 	uint32_t sharpen_crop_height_first_line;
    101 	uint32_t sharpen_crop_height_last_line;
    102 	uint32_t sharpen_crop_width_first_pixel;
    103 	uint32_t sharpen_crop_width_last_pixel;
    104 
    105 	uint32_t temporal_denoise_crop_width_first_pixel;
    106 	uint32_t temporal_denoise_crop_width_last_pixel;
    107 	uint32_t temporal_denoise_crop_height_first_line;
    108 	uint32_t temporal_denoise_crop_height_last_line;
    109 
    110 	uint32_t prescaler_spatial_denoise_crop_width_first_pixel;
    111 	uint32_t prescaler_spatial_denoise_crop_width_last_pixel;
    112 	uint32_t prescaler_spatial_denoise_crop_height_first_line;
    113 	uint32_t prescaler_spatial_denoise_crop_height_last_line;
    114 
    115 	uint32_t state_crop_width_first_pixel;
    116 	uint32_t state_crop_width_last_pixel;
    117 	uint32_t state_crop_height_first_line;
    118 	uint32_t state_crop_height_last_line;
    119 
    120 	int32_t dst_start_x;
    121 	uint32_t dst_end_x;
    122 	int32_t dst_start_y;
    123 	uint32_t dst_end_y;
    124 
    125 	int32_t temporal_dst_start_x;
    126 	uint32_t temporal_dst_end_x;
    127 	int32_t temporal_dst_start_y;
    128 	uint32_t temporal_dst_end_y;
    129 
    130 	uint32_t input_bytes_per_pixel;
    131 	uint32_t output_bytes_per_pixel;
    132 	uint32_t temporal_bytes_per_pixel;
    133 
    134 	uint32_t source_address[2];
    135 	uint32_t extra_source_address[2];
    136 	uint32_t destination_address[2];
    137 	/* source_address[1] is used for CbCR planar
    138 	 * to CbCr interleaved conversion
    139 	 */
    140 	uint32_t temporal_source_address[2];
    141 	/* destination_address[1] is used for CbCr interleved
    142 	 * to CbCr planar conversion
    143 	 */
    144 	uint32_t temporal_destination_address[2];
    145 	uint32_t src_stride;
    146 	uint32_t dst_stride;
    147 	uint32_t rotate_270;
    148 	uint32_t horizontal_flip;
    149 	uint32_t vertical_flip;
    150 	uint32_t scale_output_width;
    151 	uint32_t scale_output_height;
    152 	uint32_t spatial_denoise_crop_en;
    153 	uint32_t sharpen_crop_en;
    154 	uint32_t temporal_denoise_crop_en;
    155 	uint32_t prescaler_spatial_denoise_crop_en;
    156 	uint32_t state_crop_en;
    157 
    158 	int32_t we_h_init;
    159 	int32_t we_v_init;
    160 	int32_t we_h_step;
    161 	int32_t we_v_step;
    162 };
    163 
    164 struct msm_cpp_buffer_info_t {
    165 	int32_t fd;
    166 	uint32_t index;
    167 	uint32_t offset;
    168 	uint8_t native_buff;
    169 	uint8_t processed_divert;
    170 	uint32_t identity;
    171 };
    172 
    173 struct msm_cpp_stream_buff_info_t {
    174 	uint32_t identity;
    175 	uint32_t num_buffs;
    176 	struct msm_cpp_buffer_info_t *buffer_info;
    177 };
    178 
    179 enum msm_cpp_batch_mode_t {
    180 	BATCH_MODE_NONE,
    181 	BATCH_MODE_VIDEO,
    182 	BATCH_MODE_PREVIEW
    183 };
    184 
    185 struct msm_cpp_batch_info_t {
    186 	enum msm_cpp_batch_mode_t  batch_mode;
    187 	uint32_t batch_size;
    188 	uint32_t intra_plane_offset[MAX_PLANES];
    189 	uint32_t pick_preview_idx;
    190 	uint32_t cont_idx;
    191 };
    192 
    193 struct msm_cpp_frame_info_t {
    194 	int32_t frame_id;
    195 	struct timeval timestamp;
    196 	uint32_t inst_id;
    197 	uint32_t identity;
    198 	uint32_t client_id;
    199 	enum msm_cpp_frame_type frame_type;
    200 	uint32_t num_strips;
    201 	struct msm_cpp_frame_strip_info __user *strip_info;
    202 	uint32_t msg_len;
    203 	uint32_t *cpp_cmd_msg;
    204 	int src_fd;
    205 	int dst_fd;
    206 	struct timeval in_time, out_time;
    207 	void __user *cookie;
    208 	int32_t *status;
    209 	int32_t duplicate_output;
    210 	uint32_t duplicate_identity;
    211 	uint32_t feature_mask;
    212 	uint8_t we_disable;
    213 	struct msm_cpp_buffer_info_t input_buffer_info;
    214 	struct msm_cpp_buffer_info_t output_buffer_info[8];
    215 	struct msm_cpp_buffer_info_t duplicate_buffer_info;
    216 	struct msm_cpp_buffer_info_t tnr_scratch_buffer_info[2];
    217 	uint32_t reserved;
    218 	uint8_t partial_frame_indicator;
    219 	/* the followings are used only for partial_frame type
    220 	 * and is only used for offline frame processing and
    221 	 * only if payload big enough and need to be split into partial_frame
    222 	 * if first_payload, kernel acquires output buffer
    223 	 * first payload must have the last stripe
    224 	 * buffer addresses from 0 to last_stripe_index are updated.
    225 	 * kernel updates payload with msg_len and stripe_info
    226 	 * kernel sends top level, plane level, then only stripes
    227 	 * starting with first_stripe_index and
    228 	 * ends with last_stripe_index
    229 	 * kernel then sends trailing flag at frame done,
    230 	 * if last payload, kernel queues the output buffer to HAL
    231 	 */
    232 	uint8_t first_payload;
    233 	uint8_t last_payload;
    234 	uint32_t first_stripe_index;
    235 	uint32_t last_stripe_index;
    236 	uint32_t stripe_info_offset;
    237 	uint32_t stripe_info;
    238 	struct msm_cpp_batch_info_t  batch_info;
    239 };
    240 
    241 struct msm_cpp_pop_stream_info_t {
    242 	int32_t frame_id;
    243 	uint32_t identity;
    244 };
    245 
    246 struct cpp_hw_info {
    247 	uint32_t cpp_hw_version;
    248 	uint32_t cpp_hw_caps;
    249 	unsigned long freq_tbl[MAX_FREQ_TBL];
    250 	uint32_t freq_tbl_count;
    251 };
    252 
    253 struct msm_vpe_frame_strip_info {
    254 	uint32_t src_w;
    255 	uint32_t src_h;
    256 	uint32_t dst_w;
    257 	uint32_t dst_h;
    258 	uint32_t src_x;
    259 	uint32_t src_y;
    260 	uint32_t phase_step_x;
    261 	uint32_t phase_step_y;
    262 	uint32_t phase_init_x;
    263 	uint32_t phase_init_y;
    264 };
    265 
    266 struct msm_vpe_buffer_info_t {
    267 	int32_t fd;
    268 	uint32_t index;
    269 	uint32_t offset;
    270 	uint8_t native_buff;
    271 	uint8_t processed_divert;
    272 };
    273 
    274 struct msm_vpe_stream_buff_info_t {
    275 	uint32_t identity;
    276 	uint32_t num_buffs;
    277 	struct msm_vpe_buffer_info_t *buffer_info;
    278 };
    279 
    280 struct msm_vpe_frame_info_t {
    281 	int32_t frame_id;
    282 	struct timeval timestamp;
    283 	uint32_t inst_id;
    284 	uint32_t identity;
    285 	uint32_t client_id;
    286 	enum msm_vpe_frame_type frame_type;
    287 	struct msm_vpe_frame_strip_info strip_info;
    288 	unsigned long src_fd;
    289 	unsigned long dst_fd;
    290 	struct ion_handle *src_ion_handle;
    291 	struct ion_handle *dest_ion_handle;
    292 	unsigned long src_phyaddr;
    293 	unsigned long dest_phyaddr;
    294 	unsigned long src_chroma_plane_offset;
    295 	unsigned long dest_chroma_plane_offset;
    296 	struct timeval in_time, out_time;
    297 	void *cookie;
    298 
    299 	struct msm_vpe_buffer_info_t input_buffer_info;
    300 	struct msm_vpe_buffer_info_t output_buffer_info;
    301 };
    302 
    303 struct msm_pproc_queue_buf_info {
    304 	struct msm_buf_mngr_info buff_mgr_info;
    305 	uint8_t is_buf_dirty;
    306 };
    307 
    308 struct msm_cpp_clock_settings_t {
    309 	unsigned long clock_rate;
    310 	uint64_t avg;
    311 	uint64_t inst;
    312 };
    313 
    314 #define VIDIOC_MSM_CPP_CFG \
    315 	_IOWR('V', BASE_VIDIOC_PRIVATE, struct msm_camera_v4l2_ioctl_t)
    316 
    317 #define VIDIOC_MSM_CPP_GET_EVENTPAYLOAD \
    318 	_IOWR('V', BASE_VIDIOC_PRIVATE + 1, struct msm_camera_v4l2_ioctl_t)
    319 
    320 #define VIDIOC_MSM_CPP_GET_INST_INFO \
    321 	_IOWR('V', BASE_VIDIOC_PRIVATE + 2, struct msm_camera_v4l2_ioctl_t)
    322 
    323 #define VIDIOC_MSM_CPP_LOAD_FIRMWARE \
    324 	_IOWR('V', BASE_VIDIOC_PRIVATE + 3, struct msm_camera_v4l2_ioctl_t)
    325 
    326 #define VIDIOC_MSM_CPP_GET_HW_INFO \
    327 	_IOWR('V', BASE_VIDIOC_PRIVATE + 4, struct msm_camera_v4l2_ioctl_t)
    328 
    329 #define VIDIOC_MSM_CPP_FLUSH_QUEUE \
    330 	_IOWR('V', BASE_VIDIOC_PRIVATE + 5, struct msm_camera_v4l2_ioctl_t)
    331 
    332 #define VIDIOC_MSM_CPP_ENQUEUE_STREAM_BUFF_INFO \
    333 	_IOWR('V', BASE_VIDIOC_PRIVATE + 6, struct msm_camera_v4l2_ioctl_t)
    334 
    335 #define VIDIOC_MSM_CPP_DEQUEUE_STREAM_BUFF_INFO \
    336 	_IOWR('V', BASE_VIDIOC_PRIVATE + 7, struct msm_camera_v4l2_ioctl_t)
    337 
    338 #define VIDIOC_MSM_VPE_CFG \
    339 	_IOWR('V', BASE_VIDIOC_PRIVATE + 8, struct msm_camera_v4l2_ioctl_t)
    340 
    341 #define VIDIOC_MSM_VPE_TRANSACTION_SETUP \
    342 	_IOWR('V', BASE_VIDIOC_PRIVATE + 9, struct msm_camera_v4l2_ioctl_t)
    343 
    344 #define VIDIOC_MSM_VPE_GET_EVENTPAYLOAD \
    345 	_IOWR('V', BASE_VIDIOC_PRIVATE + 10, struct msm_camera_v4l2_ioctl_t)
    346 
    347 #define VIDIOC_MSM_VPE_GET_INST_INFO \
    348 	_IOWR('V', BASE_VIDIOC_PRIVATE + 11, struct msm_camera_v4l2_ioctl_t)
    349 
    350 #define VIDIOC_MSM_VPE_ENQUEUE_STREAM_BUFF_INFO \
    351 	_IOWR('V', BASE_VIDIOC_PRIVATE + 12, struct msm_camera_v4l2_ioctl_t)
    352 
    353 #define VIDIOC_MSM_VPE_DEQUEUE_STREAM_BUFF_INFO \
    354 	_IOWR('V', BASE_VIDIOC_PRIVATE + 13, struct msm_camera_v4l2_ioctl_t)
    355 
    356 #define VIDIOC_MSM_CPP_QUEUE_BUF \
    357 	_IOWR('V', BASE_VIDIOC_PRIVATE + 14, struct msm_camera_v4l2_ioctl_t)
    358 
    359 #define VIDIOC_MSM_CPP_APPEND_STREAM_BUFF_INFO \
    360 	_IOWR('V', BASE_VIDIOC_PRIVATE + 15, struct msm_camera_v4l2_ioctl_t)
    361 
    362 #define VIDIOC_MSM_CPP_SET_CLOCK \
    363 	_IOWR('V', BASE_VIDIOC_PRIVATE + 16, struct msm_camera_v4l2_ioctl_t)
    364 
    365 #define VIDIOC_MSM_CPP_POP_STREAM_BUFFER \
    366 	_IOWR('V', BASE_VIDIOC_PRIVATE + 17, struct msm_camera_v4l2_ioctl_t)
    367 
    368 #define VIDIOC_MSM_CPP_IOMMU_ATTACH \
    369 	_IOWR('V', BASE_VIDIOC_PRIVATE + 18, struct msm_camera_v4l2_ioctl_t)
    370 
    371 #define VIDIOC_MSM_CPP_IOMMU_DETACH \
    372 	_IOWR('V', BASE_VIDIOC_PRIVATE + 19, struct msm_camera_v4l2_ioctl_t)
    373 
    374 #define VIDIOC_MSM_CPP_DELETE_STREAM_BUFF\
    375 	_IOWR('V', BASE_VIDIOC_PRIVATE + 20, struct msm_camera_v4l2_ioctl_t)
    376 
    377 
    378 #define V4L2_EVENT_CPP_FRAME_DONE  (V4L2_EVENT_PRIVATE_START + 0)
    379 #define V4L2_EVENT_VPE_FRAME_DONE  (V4L2_EVENT_PRIVATE_START + 1)
    380 
    381 struct msm_camera_v4l2_ioctl_t {
    382 	uint32_t id;
    383 	size_t len;
    384 	int32_t trans_code;
    385 	void __user *ioctl_ptr;
    386 };
    387 
    388 #ifdef CONFIG_COMPAT
    389 struct msm_cpp_frame_info32_t {
    390 	int32_t frame_id;
    391 	struct compat_timeval timestamp;
    392 	uint32_t inst_id;
    393 	uint32_t identity;
    394 	uint32_t client_id;
    395 	enum msm_cpp_frame_type frame_type;
    396 	uint32_t num_strips;
    397 	compat_caddr_t strip_info;
    398 	uint32_t msg_len;
    399 	compat_uint_t cpp_cmd_msg;
    400 	int src_fd;
    401 	int dst_fd;
    402 	struct compat_timeval in_time, out_time;
    403 	compat_caddr_t cookie;
    404 	compat_int_t status;
    405 	int32_t duplicate_output;
    406 	uint32_t duplicate_identity;
    407 	uint32_t feature_mask;
    408 	uint8_t we_disable;
    409 	struct msm_cpp_buffer_info_t input_buffer_info;
    410 	struct msm_cpp_buffer_info_t output_buffer_info[8];
    411 	struct msm_cpp_buffer_info_t duplicate_buffer_info;
    412 	struct msm_cpp_buffer_info_t tnr_scratch_buffer_info[2];
    413 	uint32_t reserved;
    414 	uint8_t partial_frame_indicator;
    415 	/* the followings are used only for partial_frame type
    416 	 * and is only used for offline frame processing and
    417 	 * only if payload big enough and need to be split into partial_frame
    418 	 * if first_payload, kernel acquires output buffer
    419 	 * first payload must have the last stripe
    420 	 * buffer addresses from 0 to last_stripe_index are updated.
    421 	 * kernel updates payload with msg_len and stripe_info
    422 	 * kernel sends top level, plane level, then only stripes
    423 	 * starting with first_stripe_index and
    424 	 * ends with last_stripe_index
    425 	 * kernel then sends trailing flag at frame done,
    426 	 * if last payload, kernel queues the output buffer to HAL
    427 	 */
    428 	uint8_t first_payload;
    429 	uint8_t last_payload;
    430 	uint32_t first_stripe_index;
    431 	uint32_t last_stripe_index;
    432 	uint32_t stripe_info_offset;
    433 	uint32_t stripe_info;
    434 	struct msm_cpp_batch_info_t  batch_info;
    435 };
    436 
    437 struct msm_cpp_clock_settings32_t {
    438 	compat_long_t clock_rate;
    439 	uint64_t avg;
    440 	uint64_t inst;
    441 };
    442 
    443 struct msm_cpp_stream_buff_info32_t {
    444 	uint32_t identity;
    445 	uint32_t num_buffs;
    446 	compat_caddr_t buffer_info;
    447 };
    448 
    449 struct msm_pproc_queue_buf_info32_t {
    450 	struct msm_buf_mngr_info32_t buff_mgr_info;
    451 	uint8_t is_buf_dirty;
    452 };
    453 
    454 struct cpp_hw_info_32_t {
    455 	uint32_t cpp_hw_version;
    456 	uint32_t cpp_hw_caps;
    457 	compat_long_t freq_tbl[MAX_FREQ_TBL];
    458 	uint32_t freq_tbl_count;
    459 };
    460 
    461 
    462 #define VIDIOC_MSM_CPP_CFG32 \
    463 	_IOWR('V', BASE_VIDIOC_PRIVATE, struct msm_camera_v4l2_ioctl32_t)
    464 
    465 #define VIDIOC_MSM_CPP_GET_EVENTPAYLOAD32 \
    466 	_IOWR('V', BASE_VIDIOC_PRIVATE + 1, struct msm_camera_v4l2_ioctl32_t)
    467 
    468 #define VIDIOC_MSM_CPP_GET_INST_INFO32 \
    469 	_IOWR('V', BASE_VIDIOC_PRIVATE + 2, struct msm_camera_v4l2_ioctl32_t)
    470 
    471 #define VIDIOC_MSM_CPP_LOAD_FIRMWARE32 \
    472 	_IOWR('V', BASE_VIDIOC_PRIVATE + 3, struct msm_camera_v4l2_ioctl32_t)
    473 
    474 #define VIDIOC_MSM_CPP_GET_HW_INFO32 \
    475 	_IOWR('V', BASE_VIDIOC_PRIVATE + 4, struct msm_camera_v4l2_ioctl32_t)
    476 
    477 #define VIDIOC_MSM_CPP_FLUSH_QUEUE32 \
    478 	_IOWR('V', BASE_VIDIOC_PRIVATE + 5, struct msm_camera_v4l2_ioctl32_t)
    479 
    480 #define VIDIOC_MSM_CPP_ENQUEUE_STREAM_BUFF_INFO32 \
    481 	_IOWR('V', BASE_VIDIOC_PRIVATE + 6, struct msm_camera_v4l2_ioctl32_t)
    482 
    483 #define VIDIOC_MSM_CPP_DEQUEUE_STREAM_BUFF_INFO32 \
    484 	_IOWR('V', BASE_VIDIOC_PRIVATE + 7, struct msm_camera_v4l2_ioctl32_t)
    485 
    486 #define VIDIOC_MSM_VPE_CFG32 \
    487 	_IOWR('V', BASE_VIDIOC_PRIVATE + 8, struct msm_camera_v4l2_ioctl32_t)
    488 
    489 #define VIDIOC_MSM_VPE_TRANSACTION_SETUP32 \
    490 	_IOWR('V', BASE_VIDIOC_PRIVATE + 9, struct msm_camera_v4l2_ioctl32_t)
    491 
    492 #define VIDIOC_MSM_VPE_GET_EVENTPAYLOAD32 \
    493 	_IOWR('V', BASE_VIDIOC_PRIVATE + 10, struct msm_camera_v4l2_ioctl32_t)
    494 
    495 #define VIDIOC_MSM_VPE_GET_INST_INFO32 \
    496 	_IOWR('V', BASE_VIDIOC_PRIVATE + 11, struct msm_camera_v4l2_ioctl32_t)
    497 
    498 #define VIDIOC_MSM_VPE_ENQUEUE_STREAM_BUFF_INFO32 \
    499 	_IOWR('V', BASE_VIDIOC_PRIVATE + 12, struct msm_camera_v4l2_ioctl32_t)
    500 
    501 #define VIDIOC_MSM_VPE_DEQUEUE_STREAM_BUFF_INFO32 \
    502 	_IOWR('V', BASE_VIDIOC_PRIVATE + 13, struct msm_camera_v4l2_ioctl32_t)
    503 
    504 #define VIDIOC_MSM_CPP_QUEUE_BUF32 \
    505 	_IOWR('V', BASE_VIDIOC_PRIVATE + 14, struct msm_camera_v4l2_ioctl32_t)
    506 
    507 #define VIDIOC_MSM_CPP_APPEND_STREAM_BUFF_INFO32 \
    508 	_IOWR('V', BASE_VIDIOC_PRIVATE + 15, struct msm_camera_v4l2_ioctl32_t)
    509 
    510 #define VIDIOC_MSM_CPP_SET_CLOCK32 \
    511 	_IOWR('V', BASE_VIDIOC_PRIVATE + 16, struct msm_camera_v4l2_ioctl32_t)
    512 
    513 #define VIDIOC_MSM_CPP_POP_STREAM_BUFFER32 \
    514 	_IOWR('V', BASE_VIDIOC_PRIVATE + 17, struct msm_camera_v4l2_ioctl32_t)
    515 
    516 #define VIDIOC_MSM_CPP_IOMMU_ATTACH32 \
    517 	_IOWR('V', BASE_VIDIOC_PRIVATE + 18, struct msm_camera_v4l2_ioctl32_t)
    518 
    519 #define VIDIOC_MSM_CPP_IOMMU_DETACH32 \
    520 	_IOWR('V', BASE_VIDIOC_PRIVATE + 19, struct msm_camera_v4l2_ioctl32_t)
    521 
    522 #define VIDIOC_MSM_CPP_DELETE_STREAM_BUFF32\
    523 	_IOWR('V', BASE_VIDIOC_PRIVATE + 20, struct msm_camera_v4l2_ioctl32_t)
    524 
    525 struct msm_camera_v4l2_ioctl32_t {
    526 	uint32_t id;
    527 	uint32_t len;
    528 	int32_t trans_code;
    529 	compat_caddr_t ioctl_ptr;
    530 };
    531 #endif
    532 
    533 #endif /* __MSMB_PPROC_H */
    534