1 #ifndef __MSMB_PPROC_H 2 #define __MSMB_PPROC_H 3 4 #ifdef MSM_CAMERA_BIONIC 5 #include <sys/types.h> 6 #endif 7 #include <linux/videodev2.h> 8 #include <linux/types.h> 9 #include <media/msmb_generic_buf_mgr.h> 10 11 /* Should be same as VIDEO_MAX_PLANES in videodev2.h */ 12 #define MAX_PLANES VIDEO_MAX_PLANES 13 14 #define MAX_NUM_CPP_STRIPS 8 15 #define MSM_CPP_MAX_NUM_PLANES 3 16 #define MSM_CPP_MAX_FRAME_LENGTH 1024 17 #define MSM_CPP_MAX_FW_NAME_LEN 32 18 #define MAX_FREQ_TBL 10 19 20 enum msm_cpp_frame_type { 21 MSM_CPP_OFFLINE_FRAME, 22 MSM_CPP_REALTIME_FRAME, 23 }; 24 25 enum msm_vpe_frame_type { 26 MSM_VPE_OFFLINE_FRAME, 27 MSM_VPE_REALTIME_FRAME, 28 }; 29 30 struct msm_cpp_frame_strip_info { 31 uint32_t scale_v_en; 32 uint32_t scale_h_en; 33 34 uint32_t upscale_v_en; 35 uint32_t upscale_h_en; 36 37 int32_t src_start_x; 38 uint32_t src_end_x; 39 int32_t src_start_y; 40 uint32_t src_end_y; 41 42 int32_t temporal_src_start_x; 43 uint32_t temporal_src_end_x; 44 int32_t temporal_src_start_y; 45 uint32_t temporal_src_end_y; 46 47 /* Padding is required for upscaler because it does not 48 * pad internally like other blocks, also needed for rotation 49 * rotation expects all the blocks in the stripe to be the same size 50 * Padding is done such that all the extra padded pixels 51 * are on the right and bottom 52 */ 53 uint32_t pad_bottom; 54 uint32_t pad_top; 55 uint32_t pad_right; 56 uint32_t pad_left; 57 58 uint32_t v_init_phase; 59 uint32_t h_init_phase; 60 uint32_t h_phase_step; 61 uint32_t v_phase_step; 62 63 uint32_t spatial_denoise_crop_width_first_pixel; 64 uint32_t spatial_denoise_crop_width_last_pixel; 65 uint32_t spatial_denoise_crop_height_first_line; 66 uint32_t spatial_denoise_crop_height_last_line; 67 68 uint32_t sharpen_crop_height_first_line; 69 uint32_t sharpen_crop_height_last_line; 70 uint32_t sharpen_crop_width_first_pixel; 71 uint32_t sharpen_crop_width_last_pixel; 72 73 uint32_t temporal_denoise_crop_width_first_pixel; 74 uint32_t temporal_denoise_crop_width_last_pixel; 75 uint32_t temporal_denoise_crop_height_first_line; 76 uint32_t temporal_denoise_crop_height_last_line; 77 78 uint32_t prescaler_spatial_denoise_crop_width_first_pixel; 79 uint32_t prescaler_spatial_denoise_crop_width_last_pixel; 80 uint32_t prescaler_spatial_denoise_crop_height_first_line; 81 uint32_t prescaler_spatial_denoise_crop_height_last_line; 82 83 uint32_t state_crop_width_first_pixel; 84 uint32_t state_crop_width_last_pixel; 85 uint32_t state_crop_height_first_line; 86 uint32_t state_crop_height_last_line; 87 88 int32_t dst_start_x; 89 uint32_t dst_end_x; 90 int32_t dst_start_y; 91 uint32_t dst_end_y; 92 93 int32_t temporal_dst_start_x; 94 uint32_t temporal_dst_end_x; 95 int32_t temporal_dst_start_y; 96 uint32_t temporal_dst_end_y; 97 98 uint32_t input_bytes_per_pixel; 99 uint32_t output_bytes_per_pixel; 100 uint32_t temporal_bytes_per_pixel; 101 102 unsigned int source_address[2]; 103 unsigned int destination_address[2]; 104 /* source_address[1] is used for CbCR planar 105 * to CbCr interleaved conversion 106 */ 107 unsigned int temporal_source_address[2]; 108 /* destination_address[1] is used for CbCr interleved 109 * to CbCr planar conversion 110 */ 111 unsigned int temporal_destination_address[2]; 112 unsigned int src_stride; 113 unsigned int dst_stride; 114 uint32_t rotate_270; 115 uint32_t horizontal_flip; 116 uint32_t vertical_flip; 117 uint32_t scale_output_width; 118 uint32_t scale_output_height; 119 uint32_t spatial_denoise_crop_en; 120 uint32_t sharpen_crop_en; 121 uint32_t temporal_denoise_crop_en; 122 uint32_t prescaler_spatial_denoise_crop_en; 123 uint32_t state_crop_en; 124 }; 125 126 struct msm_cpp_buffer_info_t { 127 int fd; 128 uint32_t index; 129 uint32_t offset; 130 uint8_t native_buff; 131 uint8_t processed_divert; 132 uint32_t identity; 133 }; 134 135 struct msm_cpp_stream_buff_info_t { 136 uint32_t identity; 137 uint32_t num_buffs; 138 struct msm_cpp_buffer_info_t *buffer_info; 139 }; 140 141 struct msm_cpp_frame_info_t { 142 int32_t frame_id; 143 struct timeval timestamp; 144 uint32_t inst_id; 145 uint32_t identity; 146 uint32_t client_id; 147 enum msm_cpp_frame_type frame_type; 148 uint32_t num_strips; 149 struct msm_cpp_frame_strip_info *strip_info; 150 uint32_t msg_len; 151 uint32_t *cpp_cmd_msg; 152 int src_fd; 153 int dst_fd; 154 struct ion_handle *src_ion_handle; 155 struct ion_handle *dest_ion_handle; 156 struct timeval in_time, out_time; 157 void *cookie; 158 int32_t *status; 159 int32_t duplicate_output; 160 uint32_t duplicate_identity; 161 struct msm_cpp_buffer_info_t input_buffer_info; 162 struct msm_cpp_buffer_info_t output_buffer_info[2]; 163 }; 164 165 struct cpp_hw_info { 166 uint32_t cpp_hw_version; 167 uint32_t cpp_hw_caps; 168 unsigned long freq_tbl[MAX_FREQ_TBL]; 169 uint32_t freq_tbl_count; 170 }; 171 172 struct msm_vpe_frame_strip_info { 173 uint32_t src_w; 174 uint32_t src_h; 175 uint32_t dst_w; 176 uint32_t dst_h; 177 uint32_t src_x; 178 uint32_t src_y; 179 uint32_t phase_step_x; 180 uint32_t phase_step_y; 181 uint32_t phase_init_x; 182 uint32_t phase_init_y; 183 }; 184 185 struct msm_vpe_buffer_info_t { 186 int fd; 187 uint32_t index; 188 uint32_t offset; 189 uint8_t native_buff; 190 uint8_t processed_divert; 191 }; 192 193 struct msm_vpe_stream_buff_info_t { 194 uint32_t identity; 195 uint32_t num_buffs; 196 struct msm_vpe_buffer_info_t *buffer_info; 197 }; 198 199 struct msm_vpe_frame_info_t { 200 int32_t frame_id; 201 struct timeval timestamp; 202 uint32_t inst_id; 203 uint32_t identity; 204 uint32_t client_id; 205 enum msm_vpe_frame_type frame_type; 206 struct msm_vpe_frame_strip_info strip_info; 207 int src_fd; 208 int dst_fd; 209 struct ion_handle *src_ion_handle; 210 struct ion_handle *dest_ion_handle; 211 unsigned long src_phyaddr; 212 unsigned long dest_phyaddr; 213 unsigned long src_chroma_plane_offset; 214 unsigned long dest_chroma_plane_offset; 215 struct timeval in_time, out_time; 216 void *cookie; 217 218 struct msm_vpe_buffer_info_t input_buffer_info; 219 struct msm_vpe_buffer_info_t output_buffer_info; 220 }; 221 222 struct msm_pproc_queue_buf_info { 223 struct msm_buf_mngr_info buff_mgr_info; 224 uint8_t is_buf_dirty; 225 }; 226 227 #define VIDIOC_MSM_CPP_CFG \ 228 _IOWR('V', BASE_VIDIOC_PRIVATE, struct msm_camera_v4l2_ioctl_t) 229 230 #define VIDIOC_MSM_CPP_GET_EVENTPAYLOAD \ 231 _IOWR('V', BASE_VIDIOC_PRIVATE + 1, struct msm_camera_v4l2_ioctl_t) 232 233 #define VIDIOC_MSM_CPP_GET_INST_INFO \ 234 _IOWR('V', BASE_VIDIOC_PRIVATE + 2, struct msm_camera_v4l2_ioctl_t) 235 236 #define VIDIOC_MSM_CPP_LOAD_FIRMWARE \ 237 _IOWR('V', BASE_VIDIOC_PRIVATE + 3, struct msm_camera_v4l2_ioctl_t) 238 239 #define VIDIOC_MSM_CPP_GET_HW_INFO \ 240 _IOWR('V', BASE_VIDIOC_PRIVATE + 4, struct msm_camera_v4l2_ioctl_t) 241 242 #define VIDIOC_MSM_CPP_FLUSH_QUEUE \ 243 _IOWR('V', BASE_VIDIOC_PRIVATE + 5, struct msm_camera_v4l2_ioctl_t) 244 245 #define VIDIOC_MSM_CPP_ENQUEUE_STREAM_BUFF_INFO \ 246 _IOWR('V', BASE_VIDIOC_PRIVATE + 6, struct msm_camera_v4l2_ioctl_t) 247 248 #define VIDIOC_MSM_CPP_DEQUEUE_STREAM_BUFF_INFO \ 249 _IOWR('V', BASE_VIDIOC_PRIVATE + 7, struct msm_camera_v4l2_ioctl_t) 250 251 252 #define VIDIOC_MSM_VPE_CFG \ 253 _IOWR('V', BASE_VIDIOC_PRIVATE + 8, struct msm_camera_v4l2_ioctl_t) 254 255 #define VIDIOC_MSM_VPE_TRANSACTION_SETUP \ 256 _IOWR('V', BASE_VIDIOC_PRIVATE + 9, struct msm_camera_v4l2_ioctl_t) 257 258 #define VIDIOC_MSM_VPE_GET_EVENTPAYLOAD \ 259 _IOWR('V', BASE_VIDIOC_PRIVATE + 10, struct msm_camera_v4l2_ioctl_t) 260 261 #define VIDIOC_MSM_VPE_GET_INST_INFO \ 262 _IOWR('V', BASE_VIDIOC_PRIVATE + 11, struct msm_camera_v4l2_ioctl_t) 263 264 #define VIDIOC_MSM_VPE_ENQUEUE_STREAM_BUFF_INFO \ 265 _IOWR('V', BASE_VIDIOC_PRIVATE + 12, struct msm_camera_v4l2_ioctl_t) 266 267 #define VIDIOC_MSM_VPE_DEQUEUE_STREAM_BUFF_INFO \ 268 _IOWR('V', BASE_VIDIOC_PRIVATE + 13, struct msm_camera_v4l2_ioctl_t) 269 270 #define VIDIOC_MSM_CPP_QUEUE_BUF \ 271 _IOWR('V', BASE_VIDIOC_PRIVATE + 14, struct msm_camera_v4l2_ioctl_t) 272 273 #define VIDIOC_MSM_CPP_APPEND_STREAM_BUFF_INFO \ 274 _IOWR('V', BASE_VIDIOC_PRIVATE + 15, struct msm_camera_v4l2_ioctl_t) 275 276 #define VIDIOC_MSM_CPP_SET_CLOCK \ 277 _IOWR('V', BASE_VIDIOC_PRIVATE + 16, struct msm_camera_v4l2_ioctl_t) 278 279 #define VIDIOC_MSM_CPP_POP_STREAM_BUFFER \ 280 _IOWR('V', BASE_VIDIOC_PRIVATE + 17, struct msm_camera_v4l2_ioctl_t) 281 282 #define VIDIOC_MSM_CPP_IOMMU_ATTACH \ 283 _IOWR('V', BASE_VIDIOC_PRIVATE + 18, struct msm_camera_v4l2_ioctl_t) 284 285 #define VIDIOC_MSM_CPP_IOMMU_DETACH \ 286 _IOWR('V', BASE_VIDIOC_PRIVATE + 19, struct msm_camera_v4l2_ioctl_t) 287 288 #define VIDIOC_MSM_CPP_DELETE_STREAM_BUFF\ 289 _IOWR('V', BASE_VIDIOC_PRIVATE + 20, struct msm_camera_v4l2_ioctl_t) 290 291 292 #define V4L2_EVENT_CPP_FRAME_DONE (V4L2_EVENT_PRIVATE_START + 0) 293 #define V4L2_EVENT_VPE_FRAME_DONE (V4L2_EVENT_PRIVATE_START + 1) 294 295 struct msm_camera_v4l2_ioctl_t { 296 uint32_t id; 297 uint32_t len; 298 int32_t trans_code; 299 void __user *ioctl_ptr; 300 }; 301 302 #ifdef CONFIG_COMPAT 303 struct msm_cpp_frame_info32_t { 304 int32_t frame_id; 305 struct compat_timeval timestamp; 306 uint32_t inst_id; 307 uint32_t identity; 308 uint32_t client_id; 309 enum msm_cpp_frame_type frame_type; 310 uint32_t num_strips; 311 compat_caddr_t strip_info; 312 uint32_t msg_len; 313 compat_uint_t cpp_cmd_msg; 314 int src_fd; 315 int dst_fd; 316 struct compat_timeval in_time, out_time; 317 compat_caddr_t cookie; 318 compat_int_t status; 319 int32_t duplicate_output; 320 uint32_t duplicate_identity; 321 struct msm_cpp_buffer_info_t input_buffer_info; 322 struct msm_cpp_buffer_info_t output_buffer_info[2]; 323 struct msm_cpp_buffer_info_t tnr_scratch_buffer_info[2]; 324 }; 325 326 struct msm_cpp_stream_buff_info32_t { 327 uint32_t identity; 328 uint32_t num_buffs; 329 compat_caddr_t buffer_info; 330 }; 331 332 struct msm_pproc_queue_buf_info32_t { 333 struct msm_buf_mngr_info32_t buff_mgr_info; 334 uint8_t is_buf_dirty; 335 }; 336 337 #define VIDIOC_MSM_CPP_CFG32 \ 338 _IOWR('V', BASE_VIDIOC_PRIVATE, struct msm_camera_v4l2_ioctl32_t) 339 340 #define VIDIOC_MSM_CPP_GET_EVENTPAYLOAD32 \ 341 _IOWR('V', BASE_VIDIOC_PRIVATE + 1, struct msm_camera_v4l2_ioctl32_t) 342 343 #define VIDIOC_MSM_CPP_GET_INST_INFO32 \ 344 _IOWR('V', BASE_VIDIOC_PRIVATE + 2, struct msm_camera_v4l2_ioctl32_t) 345 346 #define VIDIOC_MSM_CPP_LOAD_FIRMWARE32 \ 347 _IOWR('V', BASE_VIDIOC_PRIVATE + 3, struct msm_camera_v4l2_ioctl32_t) 348 349 #define VIDIOC_MSM_CPP_GET_HW_INFO32 \ 350 _IOWR('V', BASE_VIDIOC_PRIVATE + 4, struct msm_camera_v4l2_ioctl32_t) 351 352 #define VIDIOC_MSM_CPP_FLUSH_QUEUE32 \ 353 _IOWR('V', BASE_VIDIOC_PRIVATE + 5, struct msm_camera_v4l2_ioctl32_t) 354 355 #define VIDIOC_MSM_CPP_ENQUEUE_STREAM_BUFF_INFO32 \ 356 _IOWR('V', BASE_VIDIOC_PRIVATE + 6, struct msm_camera_v4l2_ioctl32_t) 357 358 #define VIDIOC_MSM_CPP_DEQUEUE_STREAM_BUFF_INFO32 \ 359 _IOWR('V', BASE_VIDIOC_PRIVATE + 7, struct msm_camera_v4l2_ioctl32_t) 360 361 #define VIDIOC_MSM_VPE_CFG32 \ 362 _IOWR('V', BASE_VIDIOC_PRIVATE + 8, struct msm_camera_v4l2_ioctl32_t) 363 364 #define VIDIOC_MSM_VPE_TRANSACTION_SETUP32 \ 365 _IOWR('V', BASE_VIDIOC_PRIVATE + 9, struct msm_camera_v4l2_ioctl32_t) 366 367 #define VIDIOC_MSM_VPE_GET_EVENTPAYLOAD32 \ 368 _IOWR('V', BASE_VIDIOC_PRIVATE + 10, struct msm_camera_v4l2_ioctl32_t) 369 370 #define VIDIOC_MSM_VPE_GET_INST_INFO32 \ 371 _IOWR('V', BASE_VIDIOC_PRIVATE + 11, struct msm_camera_v4l2_ioctl32_t) 372 373 #define VIDIOC_MSM_VPE_ENQUEUE_STREAM_BUFF_INFO32 \ 374 _IOWR('V', BASE_VIDIOC_PRIVATE + 12, struct msm_camera_v4l2_ioctl32_t) 375 376 #define VIDIOC_MSM_VPE_DEQUEUE_STREAM_BUFF_INFO32 \ 377 _IOWR('V', BASE_VIDIOC_PRIVATE + 13, struct msm_camera_v4l2_ioctl32_t) 378 379 #define VIDIOC_MSM_CPP_QUEUE_BUF32 \ 380 _IOWR('V', BASE_VIDIOC_PRIVATE + 14, struct msm_camera_v4l2_ioctl32_t) 381 382 #define VIDIOC_MSM_CPP_SET_CLOCK32 \ 383 _IOWR('V', BASE_VIDIOC_PRIVATE + 16, struct msm_camera_v4l2_ioctl32_t) 384 385 #define VIDIOC_MSM_CPP_POP_STREAM_BUFFER32 \ 386 _IOWR('V', BASE_VIDIOC_PRIVATE + 17, struct msm_camera_v4l2_ioctl32_t) 387 388 #define VIDIOC_MSM_CPP_IOMMU_ATTACH32 \ 389 _IOWR('V', BASE_VIDIOC_PRIVATE + 18, struct msm_camera_v4l2_ioctl32_t) 390 391 #define VIDIOC_MSM_CPP_IOMMU_DETACH32 \ 392 _IOWR('V', BASE_VIDIOC_PRIVATE + 19, struct msm_camera_v4l2_ioctl32_t) 393 394 #define VIDIOC_MSM_CPP_DELETE_STREAM_BUFF32\ 395 _IOWR('V', BASE_VIDIOC_PRIVATE + 20, struct msm_camera_v4l2_ioctl_t) 396 397 struct msm_camera_v4l2_ioctl32_t { 398 uint32_t id; 399 uint32_t len; 400 int32_t trans_code; 401 compat_caddr_t ioctl_ptr; 402 }; 403 #endif 404 405 #endif /* __MSMB_PPROC_H */ 406