blob: 5b832143f8b17bc1346e66bc7a7010d8f9affa7e [file] [log] [blame]
Deepak Vermaeb8179b2013-01-25 11:57:52 +05301/* Copyright (c) 2010-2013, The Linux Foundation. All rights reserved.
Vinay Kaliab5598742011-12-21 16:52:33 -08002 *
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License version 2 and
5 * only version 2 as published by the Free Software Foundation.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 *
12 */
13#ifndef _VCD_DRIVER_PROPERTY_H_
14#define _VCD_DRIVER_PROPERTY_H_
15
16#define VCD_START_BASE 0x0
17#define VCD_I_LIVE (VCD_START_BASE + 0x1)
18#define VCD_I_CODEC (VCD_START_BASE + 0x2)
19#define VCD_I_FRAME_SIZE (VCD_START_BASE + 0x3)
20#define VCD_I_METADATA_ENABLE (VCD_START_BASE + 0x4)
21#define VCD_I_METADATA_HEADER (VCD_START_BASE + 0x5)
22#define VCD_I_PROFILE (VCD_START_BASE + 0x6)
23#define VCD_I_LEVEL (VCD_START_BASE + 0x7)
24#define VCD_I_BUFFER_FORMAT (VCD_START_BASE + 0x8)
25#define VCD_I_FRAME_RATE (VCD_START_BASE + 0x9)
26#define VCD_I_TARGET_BITRATE (VCD_START_BASE + 0xA)
27#define VCD_I_MULTI_SLICE (VCD_START_BASE + 0xB)
28#define VCD_I_ENTROPY_CTRL (VCD_START_BASE + 0xC)
29#define VCD_I_DEBLOCKING (VCD_START_BASE + 0xD)
30#define VCD_I_RATE_CONTROL (VCD_START_BASE + 0xE)
31#define VCD_I_QP_RANGE (VCD_START_BASE + 0xF)
32#define VCD_I_SESSION_QP (VCD_START_BASE + 0x10)
33#define VCD_I_INTRA_PERIOD (VCD_START_BASE + 0x11)
34#define VCD_I_VOP_TIMING (VCD_START_BASE + 0x12)
35#define VCD_I_SHORT_HEADER (VCD_START_BASE + 0x13)
36#define VCD_I_SEQ_HEADER (VCD_START_BASE + 0x14)
37#define VCD_I_HEADER_EXTENSION (VCD_START_BASE + 0x15)
38#define VCD_I_INTRA_REFRESH (VCD_START_BASE + 0x16)
39#define VCD_I_POST_FILTER (VCD_START_BASE + 0x17)
40#define VCD_I_PROGRESSIVE_ONLY (VCD_START_BASE + 0x18)
41#define VCD_I_OUTPUT_ORDER (VCD_START_BASE + 0x19)
42#define VCD_I_RECON_BUFFERS (VCD_START_BASE + 0x1A)
43#define VCD_I_FREE_RECON_BUFFERS (VCD_START_BASE + 0x1B)
44#define VCD_I_GET_RECON_BUFFER_SIZE (VCD_START_BASE + 0x1C)
45#define VCD_I_H264_MV_BUFFER (VCD_START_BASE + 0x1D)
46#define VCD_I_FREE_H264_MV_BUFFER (VCD_START_BASE + 0x1E)
47#define VCD_I_GET_H264_MV_SIZE (VCD_START_BASE + 0x1F)
48#define VCD_I_DEC_PICTYPE (VCD_START_BASE + 0x20)
49#define VCD_I_CONT_ON_RECONFIG (VCD_START_BASE + 0x21)
50#define VCD_I_META_BUFFER_MODE (VCD_START_BASE + 0x22)
51#define VCD_I_DISABLE_DMX (VCD_START_BASE + 0x23)
52#define VCD_I_DISABLE_DMX_SUPPORT (VCD_START_BASE + 0x24)
Arun Menon4093ccc2012-03-09 12:19:22 -080053#define VCD_I_ENABLE_SPS_PPS_FOR_IDR (VCD_START_BASE + 0x25)
Vinay Kalia700f5c22012-03-28 17:35:28 -070054#define VCD_REQ_PERF_LEVEL (VCD_START_BASE + 0x26)
Pradnya Chaphekarcd681bf2012-02-18 23:05:56 -080055#define VCD_I_SLICE_DELIVERY_MODE (VCD_START_BASE + 0x27)
Deva Ramasubramanian4947d8c2012-04-03 12:41:06 -070056#define VCD_I_VOP_TIMING_CONSTANT_DELTA (VCD_START_BASE + 0x28)
Arun Menon152c3c72012-06-20 11:50:08 -070057#define VCD_I_SET_TURBO_CLK (VCD_START_BASE + 0x29)
Srinu Gorle12b0bc62012-09-05 13:02:13 +053058#define VCD_I_ENABLE_DELIMITER_FLAG (VCD_START_BASE + 0x2A)
Srinu Gorlea41d7772012-11-15 09:36:38 +053059#define VCD_I_ENABLE_VUI_TIMING_INFO (VCD_START_BASE + 0x2B)
Deepak Vermaeb8179b2013-01-25 11:57:52 +053060#define VCD_I_SET_EXT_METABUFFER (VCD_START_BASE + 0x2C)
61#define VCD_I_FREE_EXT_METABUFFER (VCD_START_BASE + 0x2D)
Deepak Verma38837802013-02-02 00:01:05 +053062#define VCD_I_ENABLE_SEC_METADATA (VCD_START_BASE + 0x2E)
63
Vinay Kaliab5598742011-12-21 16:52:33 -080064
65#define VCD_START_REQ (VCD_START_BASE + 0x1000)
66#define VCD_I_REQ_IFRAME (VCD_START_REQ + 0x1)
67
68#define VCD_I_RESERVED_BASE (VCD_START_BASE + 0x10000)
69
70struct vcd_property_hdr {
71 u32 prop_id;
72 size_t sz;
73};
74
75struct vcd_property_live {
76 u32 live;
77};
78
79enum vcd_codec {
80 VCD_CODEC_H264 = 0x1,
81 VCD_CODEC_H263 = 0x2,
82 VCD_CODEC_MPEG1 = 0x3,
83 VCD_CODEC_MPEG2 = 0x4,
84 VCD_CODEC_MPEG4 = 0x5,
85 VCD_CODEC_DIVX_3 = 0x6,
86 VCD_CODEC_DIVX_4 = 0x7,
87 VCD_CODEC_DIVX_5 = 0x8,
88 VCD_CODEC_DIVX_6 = 0x9,
89 VCD_CODEC_XVID = 0xA,
90 VCD_CODEC_VC1 = 0xB,
91 VCD_CODEC_VC1_RCV = 0xC
92};
93
94struct vcd_property_codec {
95 enum vcd_codec codec;
96};
97
98struct vcd_property_frame_size {
99 u32 width;
100 u32 height;
101 u32 stride;
102 u32 scan_lines;
103};
104
Vinay Kalia700f5c22012-03-28 17:35:28 -0700105enum vcd_perf_level {
106 VCD_PERF_LEVEL0,
107 VCD_PERF_LEVEL1,
108 VCD_PERF_LEVEL2,
Deva Ramasubramanian837ae362012-05-12 23:26:53 -0700109 VCD_PERF_LEVEL_TURBO,
Vinay Kalia700f5c22012-03-28 17:35:28 -0700110};
Vinay Kaliab5598742011-12-21 16:52:33 -0800111
112#define VCD_METADATA_DATANONE 0x001
113#define VCD_METADATA_QCOMFILLER 0x002
114#define VCD_METADATA_QPARRAY 0x004
115#define VCD_METADATA_CONCEALMB 0x008
116#define VCD_METADATA_SEI 0x010
117#define VCD_METADATA_VUI 0x020
118#define VCD_METADATA_VC1 0x040
119#define VCD_METADATA_PASSTHROUGH 0x080
120#define VCD_METADATA_ENC_SLICE 0x100
121
Shobhit Pandey833942e2012-08-01 14:02:20 +0530122#define VCD_METADATA_EXT_DATA 0x0800
123#define VCD_METADATA_USER_DATA 0x1000
Deepak Vermaeb8179b2013-01-25 11:57:52 +0530124#define VCD_METADATA_SEPARATE_BUF 0x2000
Shobhit Pandey833942e2012-08-01 14:02:20 +0530125
Vinay Kaliab5598742011-12-21 16:52:33 -0800126struct vcd_property_meta_data_enable {
127 u32 meta_data_enable_flag;
128};
129
130struct vcd_property_metadata_hdr {
131 u32 meta_data_id;
132 u32 version;
133 u32 port_index;
134 u32 type;
135};
136
137struct vcd_property_frame_rate {
138 u32 fps_denominator;
139 u32 fps_numerator;
140};
141
142struct vcd_property_target_bitrate {
143 u32 target_bitrate;
144};
145
Vinay Kalia700f5c22012-03-28 17:35:28 -0700146struct vcd_property_perf_level {
147 enum vcd_perf_level level;
148};
149
Vinay Kaliab5598742011-12-21 16:52:33 -0800150enum vcd_yuv_buffer_format {
151 VCD_BUFFER_FORMAT_NV12 = 0x1,
152 VCD_BUFFER_FORMAT_TILE_4x2 = 0x2,
153 VCD_BUFFER_FORMAT_NV12_16M2KA = 0x3,
Deepak Vermaffc77412013-02-12 16:55:21 +0530154 VCD_BUFFER_FORMAT_TILE_1x1 = 0x4,
155 VCD_BUFFER_FORMAT_NV21_16M2KA = 0x5
Vinay Kaliab5598742011-12-21 16:52:33 -0800156};
157
158struct vcd_property_buffer_format {
159 enum vcd_yuv_buffer_format buffer_format;
160};
161
162struct vcd_property_post_filter {
163 u32 post_filter;
164};
165
166enum vcd_codec_profile {
167 VCD_PROFILE_UNKNOWN = 0x0,
168 VCD_PROFILE_MPEG4_SP = 0x1,
169 VCD_PROFILE_MPEG4_ASP = 0x2,
170 VCD_PROFILE_H264_BASELINE = 0x3,
171 VCD_PROFILE_H264_MAIN = 0x4,
172 VCD_PROFILE_H264_HIGH = 0x5,
173 VCD_PROFILE_H263_BASELINE = 0x6,
174 VCD_PROFILE_VC1_SIMPLE = 0x7,
175 VCD_PROFILE_VC1_MAIN = 0x8,
176 VCD_PROFILE_VC1_ADVANCE = 0x9,
177 VCD_PROFILE_MPEG2_MAIN = 0xA,
178 VCD_PROFILE_MPEG2_SIMPLE = 0xB
179};
180
181struct vcd_property_profile {
182 enum vcd_codec_profile profile;
183};
184
185enum vcd_codec_level {
186 VCD_LEVEL_UNKNOWN = 0x0,
187 VCD_LEVEL_MPEG4_0 = 0x1,
188 VCD_LEVEL_MPEG4_0b = 0x2,
189 VCD_LEVEL_MPEG4_1 = 0x3,
190 VCD_LEVEL_MPEG4_2 = 0x4,
191 VCD_LEVEL_MPEG4_3 = 0x5,
192 VCD_LEVEL_MPEG4_3b = 0x6,
193 VCD_LEVEL_MPEG4_4 = 0x7,
194 VCD_LEVEL_MPEG4_4a = 0x8,
195 VCD_LEVEL_MPEG4_5 = 0x9,
196 VCD_LEVEL_MPEG4_6 = 0xA,
197 VCD_LEVEL_MPEG4_7 = 0xB,
198 VCD_LEVEL_MPEG4_X = 0xC,
199 VCD_LEVEL_H264_1 = 0x10,
200 VCD_LEVEL_H264_1b = 0x11,
201 VCD_LEVEL_H264_1p1 = 0x12,
202 VCD_LEVEL_H264_1p2 = 0x13,
203 VCD_LEVEL_H264_1p3 = 0x14,
204 VCD_LEVEL_H264_2 = 0x15,
205 VCD_LEVEL_H264_2p1 = 0x16,
206 VCD_LEVEL_H264_2p2 = 0x17,
207 VCD_LEVEL_H264_3 = 0x18,
208 VCD_LEVEL_H264_3p1 = 0x19,
209 VCD_LEVEL_H264_3p2 = 0x1A,
210 VCD_LEVEL_H264_4 = 0x1B,
211 VCD_LEVEL_H264_4p1 = 0x1C,
212 VCD_LEVEL_H264_4p2 = 0x1D,
213 VCD_LEVEL_H264_5 = 0x1E,
214 VCD_LEVEL_H264_5p1 = 0x1F,
215 VCD_LEVEL_H263_10 = 0x20,
216 VCD_LEVEL_H263_20 = 0x21,
217 VCD_LEVEL_H263_30 = 0x22,
218 VCD_LEVEL_H263_40 = 0x23,
219 VCD_LEVEL_H263_45 = 0x24,
220 VCD_LEVEL_H263_50 = 0x25,
221 VCD_LEVEL_H263_60 = 0x26,
222 VCD_LEVEL_H263_70 = 0x27,
223 VCD_LEVEL_H263_X = 0x28,
224 VCD_LEVEL_MPEG2_LOW = 0x30,
225 VCD_LEVEL_MPEG2_MAIN = 0x31,
226 VCD_LEVEL_MPEG2_HIGH_14 = 0x32,
227 VCD_LEVEL_MPEG2_HIGH = 0x33,
228 VCD_LEVEL_MPEG2_X = 0x34,
229 VCD_LEVEL_VC1_S_LOW = 0x40,
230 VCD_LEVEL_VC1_S_MEDIUM = 0x41,
231 VCD_LEVEL_VC1_M_LOW = 0x42,
232 VCD_LEVEL_VC1_M_MEDIUM = 0x43,
233 VCD_LEVEL_VC1_M_HIGH = 0x44,
234 VCD_LEVEL_VC1_A_0 = 0x45,
235 VCD_LEVEL_VC1_A_1 = 0x46,
236 VCD_LEVEL_VC1_A_2 = 0x47,
237 VCD_LEVEL_VC1_A_3 = 0x48,
238 VCD_LEVEL_VC1_A_4 = 0x49,
239 VCD_LEVEL_VC1_X = 0x4A
240};
241
242struct vcd_property_level {
243 enum vcd_codec_level level;
244};
245
246enum vcd_m_slice_sel {
247 VCD_MSLICE_OFF = 0x1,
248 VCD_MSLICE_BY_MB_COUNT = 0x2,
249 VCD_MSLICE_BY_BYTE_COUNT = 0x3,
250 VCD_MSLICE_BY_GOB = 0x4
251};
252
253struct vcd_property_multi_slice {
254 enum vcd_m_slice_sel m_slice_sel;
255 u32 m_slice_size;
256};
257
258enum vcd_entropy_sel {
259 VCD_ENTROPY_SEL_CAVLC = 0x1,
260 VCD_ENTROPY_SEL_CABAC = 0x2
261};
262
263enum vcd_cabac_model {
264 VCD_CABAC_MODEL_NUMBER_0 = 0x1,
265 VCD_CABAC_MODEL_NUMBER_1 = 0x2,
266 VCD_CABAC_MODEL_NUMBER_2 = 0x3
267};
268
269struct vcd_property_entropy_control {
270 enum vcd_entropy_sel entropy_sel;
271 enum vcd_cabac_model cabac_model;
272};
273
274enum vcd_db_config {
275 VCD_DB_ALL_BLOCKING_BOUNDARY = 0x1,
276 VCD_DB_DISABLE = 0x2,
277 VCD_DB_SKIP_SLICE_BOUNDARY = 0x3
278};
279struct vcd_property_db_config {
280 enum vcd_db_config db_config;
281 u32 slice_alpha_offset;
282 u32 slice_beta_offset;
283};
284
285enum vcd_rate_control {
286 VCD_RATE_CONTROL_OFF = 0x1,
287 VCD_RATE_CONTROL_VBR_VFR = 0x2,
288 VCD_RATE_CONTROL_VBR_CFR = 0x3,
289 VCD_RATE_CONTROL_CBR_VFR = 0x4,
290 VCD_RATE_CONTROL_CBR_CFR = 0x5
291};
292
293struct vcd_property_rate_control {
294 enum vcd_rate_control rate_control;
295};
296
297struct vcd_property_qp_range {
298 u32 max_qp;
299 u32 min_qp;
300};
301
302struct vcd_property_session_qp {
303 u32 i_frame_qp;
304 u32 p_frame_qp;
305 u32 b_frame_qp;
306};
307
308struct vcd_property_i_period {
309 u32 p_frames;
310 u32 b_frames;
311};
312
313struct vcd_property_vop_timing {
314 u32 vop_time_resolution;
315};
316
Deva Ramasubramanian4947d8c2012-04-03 12:41:06 -0700317struct vcd_property_vop_timing_constant_delta {
318 u32 constant_delta; /*In usecs */
319};
320
Vinay Kaliab5598742011-12-21 16:52:33 -0800321struct vcd_property_short_header {
322 u32 short_header;
323};
324
325struct vcd_property_intra_refresh_mb_number {
326 u32 cir_mb_number;
327};
328
329struct vcd_property_req_i_frame {
330 u32 req_i_frame;
331};
332
333struct vcd_frame_rect {
334 u32 left;
335 u32 top;
336 u32 right;
337 u32 bottom;
338};
339
340struct vcd_property_dec_output_buffer {
341 struct vcd_frame_rect disp_frm;
342 struct vcd_property_frame_size frm_size;
343};
344
345enum vcd_output_order {
346 VCD_DEC_ORDER_DISPLAY = 0x0,
347 VCD_DEC_ORDER_DECODE = 0x1
348};
349
350struct vcd_property_enc_recon_buffer {
351 u8 *user_virtual_addr;
352 u8 *kernel_virtual_addr;
353 u8 *physical_addr;
354 u8 *dev_addr;
355 u32 buffer_size;
356 u32 ysize;
357 int pmem_fd;
358 u32 offset;
359 void *client_data;
360};
361
362struct vcd_property_h264_mv_buffer {
363 u8 *kernel_virtual_addr;
364 u8 *physical_addr;
365 u32 size;
366 u32 count;
367 int pmem_fd;
368 u32 offset;
369 u8 *dev_addr;
370 void *client_data;
371};
372
373struct vcd_property_buffer_size {
374 int width;
375 int height;
376 int size;
377 int alignment;
378};
379
Arun Menon4093ccc2012-03-09 12:19:22 -0800380struct vcd_property_sps_pps_for_idr_enable {
381 u32 sps_pps_for_idr_enable_flag;
382};
383
Srinu Gorle12b0bc62012-09-05 13:02:13 +0530384struct vcd_property_avc_delimiter_enable {
385 u32 avc_delimiter_enable_flag;
386};
387
Srinu Gorlea41d7772012-11-15 09:36:38 +0530388struct vcd_property_vui_timing_info_enable {
389 u32 vui_timing_info;
390};
391
Deepak Vermaeb8179b2013-01-25 11:57:52 +0530392struct vcd_property_meta_buffer {
393 u8 *kernel_virtual_addr;
394 u8 *physical_addr;
395 u32 size;
396 u32 count;
397 int pmem_fd;
398 u32 offset;
399 u8 *dev_addr;
400 void *client_data;
401 u8 *kernel_virt_addr_iommu;
402 u8 *physical_addr_iommu;
403 int pmem_fd_iommu;
404 u8 *dev_addr_iommu;
405 void *client_data_iommu;
406};
Vinay Kaliab5598742011-12-21 16:52:33 -0800407#endif