blob: 15441f405af27d31fd3ce58ba8f58921873c4ac4 [file] [log] [blame]
Ashray Kulkarni6ab782b2012-01-26 16:58:01 -08001/* Copyright (c) 2012, Code Aurora Forum. All rights reserved.
2 *
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
14#ifndef __VIDC_HAL_H__
15#define __VIDC_HAL_H__
16
17#include <linux/spinlock.h>
18#include <linux/mutex.h>
19#include "vidc_hal_api.h"
20#include "msm_smem.h"
21
22#ifdef HAL_MSG_LOG
23#define HAL_MSG_LOW(x...) pr_debug(KERN_INFO x)
24#define HAL_MSG_MEDIUM(x...) pr_debug(KERN_INFO x)
25#define HAL_MSG_HIGH(x...) pr_debug(KERN_INFO x)
26#else
27#define HAL_MSG_LOW(x...)
28#define HAL_MSG_MEDIUM(x...)
29#define HAL_MSG_HIGH(x...)
30#endif
31
32#define HAL_MSG_ERROR(x...) pr_err(KERN_INFO x)
33#define HAL_MSG_FATAL(x...) pr_err(KERN_INFO x)
34#define HAL_MSG_INFO(x...) pr_info(KERN_INFO x)
35
36#define HFI_MASK_QHDR_TX_TYPE 0xFF000000
37#define HFI_MASK_QHDR_RX_TYPE 0x00FF0000
38#define HFI_MASK_QHDR_PRI_TYPE 0x0000FF00
39#define HFI_MASK_QHDR_Q_ID_TYPE 0x000000FF
40#define HFI_Q_ID_HOST_TO_CTRL_CMD_Q 0x00
41#define HFI_Q_ID_CTRL_TO_HOST_MSG_Q 0x01
42#define HFI_Q_ID_CTRL_TO_HOST_DEBUG_Q 0x02
43#define HFI_MASK_QHDR_STATUS 0x000000FF
44
45#define VIDC_MAX_UNCOMPRESSED_FMT_PLANES 3
46
47#define VIDC_IFACEQ_NUMQ 3
48#define VIDC_IFACEQ_CMDQ_IDX 0
49#define VIDC_IFACEQ_MSGQ_IDX 1
50#define VIDC_IFACEQ_DBGQ_IDX 2
51
52#define VIDC_IFACEQ_MAX_PKT_SIZE 1024
53#define VIDC_IFACEQ_MED_PKT_SIZE 768
54#define VIDC_IFACEQ_MIN_PKT_SIZE 8
55#define VIDC_IFACEQ_VAR_SMALL_PKT_SIZE 100
56#define VIDC_IFACEQ_VAR_LARGE_PKT_SIZE 512
57#define VIDC_IFACEQ_MAX_BUF_COUNT 50
58#define VIDC_IFACE_MAX_PARALLEL_CLNTS 16
59#define VIDC_IFACEQ_DFLT_QHDR 0x01010000
60
61struct hfi_queue_table_header {
62 u32 qtbl_version;
63 u32 qtbl_size;
64 u32 qtbl_qhdr0_offset;
65 u32 qtbl_qhdr_size;
66 u32 qtbl_num_q;
67 u32 qtbl_num_active_q;
68};
69
70struct hfi_queue_header {
71 u32 qhdr_status;
72 u32 qhdr_start_addr;
73 u32 qhdr_type;
74 u32 qhdr_q_size;
75 u32 qhdr_pkt_size;
76 u32 qhdr_pkt_drop_cnt;
77 u32 qhdr_rx_wm;
78 u32 qhdr_tx_wm;
79 u32 qhdr_rx_req;
80 u32 qhdr_tx_req;
81 u32 qhdr_rx_irq_status;
82 u32 qhdr_tx_irq_status;
83 u32 qhdr_read_idx;
84 u32 qhdr_write_idx;
85};
86
87#define VIDC_IFACEQ_TABLE_SIZE (sizeof(struct hfi_queue_table_header) \
88 + sizeof(struct hfi_queue_header) * VIDC_IFACEQ_NUMQ)
89
90#define VIDC_IFACEQ_QUEUE_SIZE (VIDC_IFACEQ_MAX_PKT_SIZE * \
91 VIDC_IFACEQ_MAX_BUF_COUNT * VIDC_IFACE_MAX_PARALLEL_CLNTS)
92
93#define VIDC_IFACEQ_GET_QHDR_START_ADDR(ptr, i) \
94 (void *)((((u32)ptr) + sizeof(struct hfi_queue_table_header)) + \
95 (i * sizeof(struct hfi_queue_header)))
96
97enum vidc_hw_reg {
98 VIDC_HWREG_CTRL_STATUS = 0x1,
99 VIDC_HWREG_QTBL_INFO = 0x2,
100 VIDC_HWREG_QTBL_ADDR = 0x3,
101 VIDC_HWREG_CTRLR_RESET = 0x4,
102 VIDC_HWREG_IFACEQ_FWRXREQ = 0x5,
103 VIDC_HWREG_IFACEQ_FWTXREQ = 0x6,
104 VIDC_HWREG_VHI_SOFTINTEN = 0x7,
105 VIDC_HWREG_VHI_SOFTINTSTATUS = 0x8,
106 VIDC_HWREG_VHI_SOFTINTCLR = 0x9,
107 VIDC_HWREG_HVI_SOFTINTEN = 0xA,
108};
109
110enum HFI_EVENT {
111 HFI_EVENT_SYS_ERROR,
112 HFI_EVENT_SESSION_ERROR,
113 HFI_EVENT_SESSION_SEQUENCE_CHANGED,
114 HFI_EVENT_SESSION_PROPERTY_CHANGED,
115 HFI_UNUSED_EVENT = 0x10000000,
116};
117
118enum HFI_EVENT_DATA_SEQUENCE_CHANGED {
119 HFI_EVENT_DATA_SEQUENCE_CHANGED_SUFFICIENT_BUFFER_RESOURCES,
120 HFI_EVENT_DATA_SEQUENCE_CHANGED_INSUFFICIENT_BUFFER_RESOURCES,
121 HFI_UNUSED_SEQCHG = 0x10000000,
122};
123
124#define HFI_BUFFERFLAG_EOS 0x00000001
125#define HFI_BUFFERFLAG_STARTTIME 0x00000002
126#define HFI_BUFFERFLAG_DECODEONLY 0x00000004
127#define HFI_BUFFERFLAG_DATACORRUPT 0x00000008
128#define HFI_BUFFERFLAG_ENDOFFRAME 0x00000010
129#define HFI_BUFFERFLAG_SYNCFRAME 0x00000020
130#define HFI_BUFFERFLAG_EXTRADATA 0x00000040
131#define HFI_BUFFERFLAG_CODECCONFIG 0x00000080
132#define HFI_BUFFERFLAG_TIMESTAMPINVALID 0x00000100
133#define HFI_BUFFERFLAG_READONLY 0x00000200
134#define HFI_BUFFERFLAG_ENDOFSUBFRAME 0x00000400
135
136enum HFI_ERROR {
137 HFI_ERR_NONE = 0,
138 HFI_ERR_SYS_UNKNOWN = 0x80000001,
139 HFI_ERR_SYS_FATAL = 0x80000002,
140 HFI_ERR_SYS_INVALID_PARAMETER = 0x80000003,
141 HFI_ERR_SYS_VERSION_MISMATCH = 0x80000004,
142 HFI_ERR_SYS_INSUFFICIENT_RESOURCES = 0x80000005,
143 HFI_ERR_SYS_MAX_SESSIONS_REACHED = 0x80000006,
144 HFI_ERR_SYS_UNSUPPORTED_CODEC = 0x80000007,
145 HFI_ERR_SYS_SESSION_IN_USE = 0x80000008,
146 HFI_ERR_SYS_SESSION_ID_OUT_OF_RANGE = 0x80000009,
147 HFI_ERR_SYS_UNSUPPORTED_DOMAIN = 0x8000000A,
148 HFI_ERR_SESSION_START_UNUSED = 0x80001000,
149 HFI_ERR_SESSION_UNKNOWN = 0x80001001,
150 HFI_ERR_SESSION_FATAL = 0x80001002,
151 HFI_ERR_SESSION_INVALID_PARAMETER = 0x80001003,
152 HFI_ERR_SESSION_BAD_POINTER = 0x80001004,
153 HFI_ERR_SESSION_INVALID_SESSION_ID = 0x80001005,
154 HFI_ERR_SESSION_INVALID_STREAM_ID = 0x80001006,
155 HFI_ERR_SESSION_INCORRECT_STATE_OPERATION = 0x80001007,
156 HFI_ERR_SESSION_UNSUPPORTED_PROPERTY = 0x80001008,
157 HFI_ERR_SESSION_UNSUPPORTED_SETTING = 0x80001009,
158 HFI_ERR_SESSION_INSUFFICIENT_RESOURCES = 0x8000100A,
159 HFI_ERR_SESSION_STREAM_CORRUPT = 0x8000100B,
160 HFI_ERR_SESSION_STREAM_CORRUPT_OUTPUT_STALLED = 0x8000100C,
161 HFI_ERR_SESSION_SYNC_FRAME_NOT_DETECTED = 0x8000100D,
162 HFI_ERR_SESSION_EMPTY_BUFFER_DONE_OUTPUT_PENDING = 0x8000100E,
163 HFI_ERR_SESSION_SAME_STATE_OPERATION = 0x8000100F,
164 HFI_UNUSED_ERR = 0x10000000,
165};
166
167enum HFI_DOMAIN {
168 HFI_VIDEO_DOMAIN_VPE,
169 HFI_VIDEO_DOMAIN_ENCODER,
170 HFI_VIDEO_DOMAIN_DECODER,
171 HFI_UNUSED_DOMAIN = 0x10000000,
172};
173
174enum HFI_VIDEO_CODEC {
175 HFI_VIDEO_CODEC_UNKNOWN = 0x00000000,
176 HFI_VIDEO_CODEC_H264 = 0x00000002,
177 HFI_VIDEO_CODEC_H263 = 0x00000004,
178 HFI_VIDEO_CODEC_MPEG1 = 0x00000008,
179 HFI_VIDEO_CODEC_MPEG2 = 0x00000010,
180 HFI_VIDEO_CODEC_MPEG4 = 0x00000020,
181 HFI_VIDEO_CODEC_DIVX_311 = 0x00000040,
182 HFI_VIDEO_CODEC_DIVX = 0x00000080,
183 HFI_VIDEO_CODEC_VC1 = 0x00000100,
184 HFI_VIDEO_CODEC_SPARK = 0x00000200,
185 HFI_VIDEO_CODEC_VP6 = 0x00000400,
186 HFI_VIDEO_CODEC_VP7 = 0x00000800,
187 HFI_VIDEO_CODEC_VP8 = 0x00001000,
188 HFI_UNUSED_CODEC = 0x10000000,
189};
190
191enum HFI_H263_PROFILE {
192 HFI_H263_PROFILE_BASELINE = 0x00000001,
193 HFI_H263_PROFILE_H320CODING = 0x00000002,
194 HFI_H263_PROFILE_BACKWARDCOMPATIBLE = 0x00000004,
195 HFI_H263_PROFILE_ISWV2 = 0x00000008,
196 HFI_H263_PROFILE_ISWV3 = 0x00000010,
197 HFI_H263_PROFILE_HIGHCOMPRESSION = 0x00000020,
198 HFI_H263_PROFILE_INTERNET = 0x00000040,
199 HFI_H263_PROFILE_INTERLACE = 0x00000080,
200 HFI_H263_PROFILE_HIGHLATENCY = 0x00000100,
201 HFI_UNUSED_H263_PROFILE = 0x10000000,
202};
203
204enum HFI_H263_LEVEL {
205 HFI_H263_LEVEL_10 = 0x00000001,
206 HFI_H263_LEVEL_20 = 0x00000002,
207 HFI_H263_LEVEL_30 = 0x00000004,
208 HFI_H263_LEVEL_40 = 0x00000008,
209 HFI_H263_LEVEL_45 = 0x00000010,
210 HFI_H263_LEVEL_50 = 0x00000020,
211 HFI_H263_LEVEL_60 = 0x00000040,
212 HFI_H263_LEVEL_70 = 0x00000080,
213 HFI_UNUSED_H263_LEVEL = 0x10000000,
214};
215
216enum HFI_MPEG2_PROFILE {
217 HFI_MPEG2_PROFILE_SIMPLE = 0x00000001,
218 HFI_MPEG2_PROFILE_MAIN = 0x00000002,
219 HFI_MPEG2_PROFILE_422 = 0x00000004,
220 HFI_MPEG2_PROFILE_SNR = 0x00000008,
221 HFI_MPEG2_PROFILE_SPATIAL = 0x00000010,
222 HFI_MPEG2_PROFILE_HIGH = 0x00000020,
223 HFI_UNUSED_MPEG2_PROFILE = 0x10000000,
224};
225
226enum HFI_MPEG2_LEVEL {
227 HFI_MPEG2_LEVEL_LL = 0x00000001,
228 HFI_MPEG2_LEVEL_ML = 0x00000002,
229 HFI_MPEG2_LEVEL_H14 = 0x00000004,
230 HFI_MPEG2_LEVEL_HL = 0x00000008,
231 HFI_UNUSED_MEPG2_LEVEL = 0x10000000,
232};
233
234enum HFI_MPEG4_PROFILE {
235 HFI_MPEG4_PROFILE_SIMPLE = 0x00000001,
236 HFI_MPEG4_PROFILE_SIMPLESCALABLE = 0x00000002,
237 HFI_MPEG4_PROFILE_CORE = 0x00000004,
238 HFI_MPEG4_PROFILE_MAIN = 0x00000008,
239 HFI_MPEG4_PROFILE_NBIT = 0x00000010,
240 HFI_MPEG4_PROFILE_SCALABLETEXTURE = 0x00000020,
241 HFI_MPEG4_PROFILE_SIMPLEFACE = 0x00000040,
242 HFI_MPEG4_PROFILE_SIMPLEFBA = 0x00000080,
243 HFI_MPEG4_PROFILE_BASICANIMATED = 0x00000100,
244 HFI_MPEG4_PROFILE_HYBRID = 0x00000200,
245 HFI_MPEG4_PROFILE_ADVANCEDREALTIME = 0x00000400,
246 HFI_MPEG4_PROFILE_CORESCALABLE = 0x00000800,
247 HFI_MPEG4_PROFILE_ADVANCEDCODING = 0x00001000,
248 HFI_MPEG4_PROFILE_ADVANCEDCORE = 0x00002000,
249 HFI_MPEG4_PROFILE_ADVANCEDSCALABLE = 0x00004000,
250 HFI_MPEG4_PROFILE_ADVANCEDSIMPLE = 0x00008000,
251 HFI_UNUSED_MPEG4_PROFILE = 0x10000000,
252};
253
254enum HFI_MPEG4_LEVEL {
255 HFI_MPEG4_LEVEL_0 = 0x00000001,
256 HFI_MPEG4_LEVEL_0b = 0x00000002,
257 HFI_MPEG4_LEVEL_1 = 0x00000004,
258 HFI_MPEG4_LEVEL_2 = 0x00000008,
259 HFI_MPEG4_LEVEL_3 = 0x00000010,
260 HFI_MPEG4_LEVEL_4 = 0x00000020,
261 HFI_MPEG4_LEVEL_4a = 0x00000040,
262 HFI_MPEG4_LEVEL_5 = 0x00000080,
263 HFI_MPEG4_LEVEL_VENDOR_START_UNUSED = 0x7F000000,
264 HFI_MPEG4_LEVEL_6 = 0x7F000001,
265 HFI_MPEG4_LEVEL_7 = 0x7F000002,
266 HFI_MPEG4_LEVEL_8 = 0x7F000003,
267 HFI_MPEG4_LEVEL_9 = 0x7F000004,
268 HFI_MPEG4_LEVEL_3b = 0x7F000005,
269 HFI_UNUSED_MPEG4_LEVEL = 0x10000000,
270};
271
272enum HFI_H264_PROFILE {
273 HFI_H264_PROFILE_BASELINE = 0x00000001,
274 HFI_H264_PROFILE_MAIN = 0x00000002,
275 HFI_H264_PROFILE_EXTENDED = 0x00000004,
276 HFI_H264_PROFILE_HIGH = 0x00000008,
277 HFI_H264_PROFILE_HIGH10 = 0x00000010,
278 HFI_H264_PROFILE_HIGH422 = 0x00000020,
279 HFI_H264_PROFILE_HIGH444 = 0x00000040,
280 HFI_H264_PROFILE_STEREO_HIGH = 0x00000080,
281 HFI_H264_PROFILE_MV_HIGH = 0x00000100,
282 HFI_UNUSED_H264_PROFILE = 0x10000000,
283};
284
285enum HFI_H264_LEVEL {
286 HFI_H264_LEVEL_1 = 0x00000001,
287 HFI_H264_LEVEL_1b = 0x00000002,
288 HFI_H264_LEVEL_11 = 0x00000004,
289 HFI_H264_LEVEL_12 = 0x00000008,
290 HFI_H264_LEVEL_13 = 0x00000010,
291 HFI_H264_LEVEL_2 = 0x00000020,
292 HFI_H264_LEVEL_21 = 0x00000040,
293 HFI_H264_LEVEL_22 = 0x00000080,
294 HFI_H264_LEVEL_3 = 0x00000100,
295 HFI_H264_LEVEL_31 = 0x00000200,
296 HFI_H264_LEVEL_32 = 0x00000400,
297 HFI_H264_LEVEL_4 = 0x00000800,
298 HFI_H264_LEVEL_41 = 0x00001000,
299 HFI_H264_LEVEL_42 = 0x00002000,
300 HFI_H264_LEVEL_5 = 0x00004000,
301 HFI_H264_LEVEL_51 = 0x00008000,
302 HFI_UNUSED_H264_LEVEL = 0x10000000,
303};
304
305enum HFI_VPX_PROFILE {
306 HFI_VPX_PROFILE_SIMPLE = 0x00000001,
307 HFI_VPX_PROFILE_ADVANCED = 0x00000002,
308 HFI_VPX_PROFILE_VERSION_0 = 0x00000004,
309 HFI_VPX_PROFILE_VERSION_1 = 0x00000008,
310 HFI_VPX_PROFILE_VERSION_2 = 0x00000010,
311 HFI_VPX_PROFILE_VERSION_3 = 0x00000020,
312 HFI_VPX_PROFILE_UNUSED = 0x10000000,
313};
314
315enum HFI_VC1_PROFILE {
316 HFI_VC1_PROFILE_SIMPLE = 0x00000001,
317 HFI_VC1_PROFILE_MAIN = 0x00000002,
318 HFI_VC1_PROFILE_ADVANCED = 0x00000004,
319 HFI_UNUSED_VC1_PROFILE = 0x10000000,
320};
321
322enum HFI_VC1_LEVEL {
323 HFI_VC1_LEVEL_LOW = 0x00000001,
324 HFI_VC1_LEVEL_MEDIUM = 0x00000002,
325 HFI_VC1_LEVEL_HIGH = 0x00000004,
326 HFI_VC1_LEVEL_0 = 0x00000008,
327 HFI_VC1_LEVEL_1 = 0x00000010,
328 HFI_VC1_LEVEL_2 = 0x00000020,
329 HFI_VC1_LEVEL_3 = 0x00000040,
330 HFI_VC1_LEVEL_4 = 0x00000080,
331 HFI_UNUSED_VC1_LEVEL = 0x10000000,
332};
333
334enum HFI_DIVX_FORMAT {
335 HFI_DIVX_FORMAT_4,
336 HFI_DIVX_FORMAT_5,
337 HFI_DIVX_FORMAT_6,
338 HFI_UNUSED_DIVX_FORMAT = 0x10000000,
339};
340
341enum HFI_DIVX_PROFILE {
342 HFI_DIVX_PROFILE_QMOBILE = 0x00000001,
343 HFI_DIVX_PROFILE_MOBILE = 0x00000002,
344 HFI_DIVX_PROFILE_MT = 0x00000004,
345 HFI_DIVX_PROFILE_HT = 0x00000008,
346 HFI_DIVX_PROFILE_HD = 0x00000010,
347 HFI_UNUSED_DIVX_PROFILE = 0x10000000,
348};
349
350enum HFI_BUFFER {
351 HFI_BUFFER_INPUT,
352 HFI_BUFFER_OUTPUT,
353 HFI_BUFFER_OUTPUT2,
354 HFI_BUFFER_EXTRADATA_INPUT,
355 HFI_BUFFER_EXTRADATA_OUTPUT,
356 HFI_BUFFER_EXTRADATA_OUTPUT2,
357 HFI_BUFFER_INTERNAL_SCRATCH = 0x7F000001,
358 HFI_BUFFER_INTERNAL_PERSIST = 0x7F000002,
359 HFI_UNUSED_BUFFER = 0x10000000,
360};
361
362enum HFI_BUFFER_MODE {
363 HFI_BUFFER_MODE_STATIC,
364 HFI_BUFFER_MODE_RING,
365 HFI_UNUSED_BUFFER_MODE = 0x10000000,
366};
367
368enum HFI_FLUSH {
369 HFI_FLUSH_INPUT,
370 HFI_FLUSH_OUTPUT,
371 HFI_FLUSH_OUTPUT2,
372 HFI_FLUSH_ALL,
373 HFI_UNUSED_FLUSH = 0x10000000,
374};
375
376enum HFI_EXTRADATA {
377 HFI_EXTRADATA_NONE = 0x00000000,
378 HFI_EXTRADATA_MB_QUANTIZATION = 0x00000001,
379 HFI_EXTRADATA_INTERLACE_VIDEO = 0x00000002,
380 HFI_EXTRADATA_VC1_FRAMEDISP = 0x00000003,
381 HFI_EXTRADATA_VC1_SEQDISP = 0x00000004,
382 HFI_EXTRADATA_TIMESTAMP = 0x00000005,
383 HFI_EXTRADATA_MULTISLICE_INFO = 0x7F100000,
384 HFI_EXTRADATA_NUM_CONCEALED_MB = 0x7F100001,
385 HFI_EXTRADATA_INDEX = 0x7F100002,
386 HFI_EXTRADATA_METADATA_FILLER = 0x7FE00002,
387 HFI_UNUSED_EXTRADATA = 0x10000000,
388};
389
390enum HFI_EXTRADATA_INDEX_TYPE {
391 HFI_INDEX_EXTRADATA_INPUT_CROP = 0x0700000E,
392 HFI_INDEX_EXTRADATA_DIGITAL_ZOOM = 0x07000010,
393 HFI_INDEX_EXTRADATA_ASPECT_RATIO = 0x7F100003,
394};
395
396struct hfi_extradata_header {
397 u32 size;
398 u32 version;
399 u32 port_tndex;
400 enum HFI_EXTRADATA type;
401 u32 data_size;
402 u8 rg_data[1];
403};
404
405enum HFI_INTERLACE_FORMAT {
406 HFI_INTERLACE_FRAME_PROGRESSIVE = 0x01,
407 HFI_INTERLACE_INTERLEAVE_FRAME_TOPFIELDFIRST = 0x02,
408 HFI_INTERLACE_INTERLEAVE_FRAME_BOTTOMFIELDFIRST = 0x04,
409 HFI_INTERLACE_FRAME_TOPFIELDFIRST = 0x08,
410 HFI_INTERLACE_FRAME_BOTTOMFIELDFIRST = 0x10,
411 HFI_UNUSED_INTERLACE = 0x10000000,
412};
413
414enum HFI_PROPERTY {
415 HFI_PROPERTY_SYS_UNUSED = 0x08000000,
416 HFI_PROPERTY_SYS_IDLE_INDICATOR,
417 HFI_PROPERTY_SYS_DEBUG_CONFIG,
418 HFI_PROPERTY_SYS_RESOURCE_OCMEM_REQUIREMENT_INFO,
419 HFI_PROPERTY_PARAM_UNUSED = 0x04000000,
420 HFI_PROPERTY_PARAM_BUFFER_COUNT_ACTUAL,
421 HFI_PROPERTY_PARAM_FRAME_SIZE,
422 HFI_PROPERTY_PARAM_UNCOMPRESSED_FORMAT_SELECT,
423 HFI_PROPERTY_PARAM_UNCOMPRESSED_FORMAT_SUPPORTED,
424 HFI_PROPERTY_PARAM_UNCOMPRESSED_PLANE_ACTUAL_INFO,
425 HFI_PROPERTY_PARAM_UNCOMPRESSED_PLANE_ACTUAL_CONSTRAINTS_INFO,
426 HFI_PROPERTY_PARAM_INTERLACE_FORMAT_SUPPORTED,
427 HFI_PROPERTY_PARAM_CHROMA_SITE,
428 HFI_PROPERTY_PARAM_EXTRA_DATA_HEADER_CONFIG,
429 HFI_PROPERTY_PARAM_PROFILE_LEVEL_CURRENT,
430 HFI_PROPERTY_PARAM_PROFILE_LEVEL_SUPPORTED,
431 HFI_PROPERTY_PARAM_CAPABILITY_SUPPORTED,
432 HFI_PROPERTY_PARAM_NAL_STREAM_FORMAT_SUPPORTED,
433 HFI_PROPERTY_PARAM_NAL_STREAM_FORMAT_SELECT,
434 HFI_PROPERTY_PARAM_MULTI_VIEW_FORMAT,
435 HFI_PROPERTY_PARAM_PROPERTIES_SUPPORTED,
436 HFI_PROPERTY_PARAM_MAX_SEQUENCE_HEADER_SIZE,
437 HFI_PROPERTY_PARAM_CODEC_SUPPORTED,
438 HFI_PROPERTY_PARAM_DIVX_FORMAT,
439
440 HFI_PROPERTY_CONFIG_UNUSED = 0x02000000,
441 HFI_PROPERTY_CONFIG_BUFFER_REQUIREMENTS,
442 HFI_PROPERTY_CONFIG_REALTIME,
443 HFI_PROPERTY_CONFIG_PRIORITY,
444 HFI_PROPERTY_CONFIG_BATCH_INFO,
445 HFI_PROPERTY_CONFIG_FRAME_RATE,
446
447 HFI_PROPERTY_PARAM_VDEC_UNUSED = 0x01000000,
448 HFI_PROPERTY_PARAM_VDEC_CONTINUE_DATA_TRANSFER,
449 HFI_PROPERTY_PARAM_VDEC_DISPLAY_PICTURE_BUFFER_COUNT,
450 HFI_PROPERTY_PARAM_VDEC_MULTI_VIEW_SELECT,
Ashray Kulkarni1ccbc912012-03-23 16:26:52 -0700451 HFI_PROPERTY_PARAM_VDEC_PICTURE_TYPE_DECODE,
Ashray Kulkarni6ab782b2012-01-26 16:58:01 -0800452 HFI_PROPERTY_PARAM_VDEC_MULTI_STREAM,
453 HFI_PROPERTY_PARAM_VDEC_OUTPUT_ORDER,
454 HFI_PROPERTY_PARAM_VDEC_MB_QUANTIZATION,
455 HFI_PROPERTY_PARAM_VDEC_NUM_CONCEALED_MB,
456 HFI_PROPERTY_PARAM_VDEC_H264_ENTROPY_SWITCHING,
457 HFI_PROPERTY_PARAM_VDEC_OUTPUT2_KEEP_ASPECT_RATIO,
458
459 HFI_PROPERTY_CONFIG_VDEC_UNUSED = 0x00800000,
460 HFI_PROPERTY_CONFIG_VDEC_POST_LOOP_DEBLOCKER,
461 HFI_PROPERTY_CONFIG_VDEC_MB_ERROR_MAP_REPORTING,
462 HFI_PROPERTY_CONFIG_VDEC_MB_ERROR_MAP,
463
464 HFI_PROPERTY_PARAM_VENC_UNUSED = 0x00400000,
465 HFI_PROPERTY_PARAM_VENC_SLICE_DELIVERY_MODE,
466 HFI_PROPERTY_PARAM_VENC_H264_ENTROPY_CONTROL,
467 HFI_PROPERTY_PARAM_VENC_H264_DEBLOCK_CONTROL,
468 HFI_PROPERTY_PARAM_VENC_RATE_CONTROL,
469 HFI_PROPERTY_PARAM_VENC_TEMPORAL_SPATIAL_TRADEOFF,
470 HFI_PROPERTY_PARAM_VENC_SESSION_QP,
471 HFI_PROPERTY_PARAM_VENC_MPEG4_AC_PREDICTION,
472 HFI_PROPERTY_PARAM_VENC_MPEG4_DATA_PARTITIONING,
473 HFI_PROPERTY_PARAM_VENC_MPEG4_TIME_RESOLUTION,
474 HFI_PROPERTY_PARAM_VENC_MPEG4_SHORT_HEADER,
475 HFI_PROPERTY_PARAM_VENC_MPEG4_HEADER_EXTENSION,
476 HFI_PROPERTY_PARAM_VENC_MULTI_SLICE_INFO,
477 HFI_PROPERTY_PARAM_VENC_INTRA_REFRESH,
478 HFI_PROPERTY_PARAM_VENC_MULTI_SLICE_CONTROL,
479
480 HFI_PROPERTY_CONFIG_VENC_UNUSED = 0x00200000,
481 HFI_PROPERTY_CONFIG_VENC_TARGET_BITRATE,
482 HFI_PROPERTY_CONFIG_VENC_IDR_PERIOD,
483 HFI_PROPERTY_CONFIG_VENC_INTRA_PERIOD,
484 HFI_PROPERTY_CONFIG_VENC_REQUEST_IFRAME,
485 HFI_PROPERTY_CONFIG_VENC_TIMESTAMP_SCALE,
486 HFI_PROPERTY_PARAM_VENC_MPEG4_QPEL,
487 HFI_PROPERTY_PARAM_VENC_ADVANCED,
488
489 HFI_PROPERTY_PARAM_VPE_UNUSED = 0x00100000,
490
491 HFI_PROPERTY_CONFIG_VPE_UNUSED = 0x00080000,
492 HFI_PROPERTY_CONFIG_VPE_DEINTERLACE,
493 HFI_PROPERTY_CONFIG_VPE_OPERATIONS,
494 HFI_PROPERTY_UNUSED = 0x10000000,
495};
496
497struct hfi_batch_info {
498 u32 input_batch_count;
499 u32 output_batch_count;
500};
501
502struct hfi_bitrate {
503 u32 bit_rate;
504};
505
506struct hfi_buffer_count_actual {
507 enum HFI_BUFFER buffer;
508 u32 buffer_count_actual;
509};
510
511struct hfi_buffer_requirements {
512 enum HFI_BUFFER buffer;
513 u32 buffer_size;
514 u32 buffer_region_size;
515 u32 buffer_hold_count;
516 u32 buffer_count_min;
517 u32 buffer_count_actual;
518 u32 contiguous;
519 u32 buffer_alignment;
520};
521
522enum HFI_CAPABILITY {
523 HFI_CAPABILITY_FRAME_WIDTH,
524 HFI_CAPABILITY_FRAME_HEIGHT,
525 HFI_CAPABILITY_MBS_PER_FRAME,
526 HFI_CAPABILITY_MBS_PER_SECOND,
527 HFI_CAPABILITY_FRAMERATE,
528 HFI_CAPABILITY_SCALE_X,
529 HFI_CAPABILITY_SCALE_Y,
530 HFI_CAPABILITY_BITRATE,
531 HFI_UNUSED_CAPABILITY = 0x10000000,
532};
533
534struct hfi_capability_supported {
535 enum HFI_CAPABILITY eCapabilityType;
536 u32 min;
537 u32 max;
538 u32 step_size;
539};
540
541struct hfi_capability_supported_INFO {
542 u32 num_capabilities;
543 struct hfi_capability_supported rg_data[1];
544};
545
546enum HFI_CHROMA_SITE {
547 HFI_CHROMA_SITE_0,
548 HFI_CHROMA_SITE_1,
549 HFI_UNUSED_CHROMA = 0x10000000,
550};
551
552struct hfi_data_payload {
553 u32 size;
554 u8 rg_data[1];
555};
556
557struct hfi_seq_header_info {
558 u32 max_header_len;
559};
560
561struct hfi_enable_picture {
562 u32 picture_type;
563};
564
565struct hfi_display_picture_buffer_count {
566 int enable;
567 u32 count;
568};
569
570struct hfi_enable {
571 int enable;
572};
573
574enum HFI_H264_DB_MODE {
575 HFI_H264_DB_MODE_DISABLE,
576 HFI_H264_DB_MODE_SKIP_SLICE_BOUNDARY,
577 HFI_H264_DB_MODE_ALL_BOUNDARY,
578 HFI_UNUSED_H264_DB = 0x10000000,
579};
580
581struct hfi_h264_db_control {
582 enum HFI_H264_DB_MODE mode;
583 int slice_alpha_offset;
584 int slice_beta_offset;
585};
586
587enum HFI_H264_ENTROPY {
588 HFI_H264_ENTROPY_CAVLC,
589 HFI_H264_ENTROPY_CABAC,
590 HFI_UNUSED_ENTROPY = 0x10000000,
591};
592
593enum HFI_H264_CABAC_MODEL {
594 HFI_H264_CABAC_MODEL_0,
595 HFI_H264_CABAC_MODEL_1,
596 HFI_H264_CABAC_MODEL_2,
597 HFI_UNUSED_CABAC = 0x10000000,
598};
599
600struct hfi_h264_entropy_control {
601 enum HFI_H264_ENTROPY entropy_mode;
602 enum HFI_H264_CABAC_MODEL cabac_model;
603};
604
605struct hfi_extra_data_header_config {
606 u32 type;
607 enum HFI_BUFFER buffer_type;
608 u32 version;
609 u32 port_index;
610 u32 client_extradata_id;
611};
612
613struct hfi_frame_rate {
614 enum HFI_BUFFER buffer_type;
615 u32 frame_rate;
616};
617
618struct hfi_interlace_format_supported {
619 enum HFI_BUFFER buffer;
620 enum HFI_INTERLACE_FORMAT format;
621};
622
623enum hfi_intra_refresh_mode {
624 HFI_INTRA_REFRESH_NONE,
625 HFI_INTRA_REFRESH_CYCLIC,
626 HFI_INTRA_REFRESH_ADAPTIVE,
627 HFI_INTRA_REFRESH_CYCLIC_ADAPTIVE,
628 HFI_INTRA_REFRESH_RANDOM,
629 HFI_UNUSED_INTRA = 0x10000000,
630};
631
632struct hfi_intra_refresh {
633 enum hfi_intra_refresh_mode mode;
634 u32 air_mbs;
635 u32 air_ref;
636 u32 cir_mbs;
637};
638
639struct hfi_idr_period {
640 u32 idr_period;
641};
642
643struct hfi_intra_period {
644 u32 pframes;
645 u32 bframes;
646};
647
648struct hfi_timestamp_scale {
649 u32 time_stamp_scale;
650};
651
652struct hfi_mb_error_map {
653 u32 error_map_size;
654 u8 rg_error_map[1];
655};
656
657struct hfi_metadata_pass_through {
658 int enable;
659 u32 size;
660};
661
662struct hfi_mpeg4_header_extension {
663 u32 header_extension;
664};
665
666struct hfi_mpeg4_time_resolution {
667 u32 time_increment_resolution;
668};
669
670enum HFI_MULTI_SLICE {
671 HFI_MULTI_SLICE_OFF,
672 HFI_MULTI_SLICE_BY_MB_COUNT,
673 HFI_MULTI_SLICE_BY_BYTE_COUNT,
674 HFI_MULTI_SLICE_GOB,
675 HFI_UNUSED_SLICE = 0x10000000,
676};
677
678struct hfi_multi_slice_control {
679 enum HFI_MULTI_SLICE multi_slice;
680 u32 slice_size;
681};
682
683struct hfi_multi_stream {
684 enum HFI_BUFFER buffer;
685 u32 enable;
686 u32 width;
687 u32 height;
688};
689
690struct hfi_multi_view_format {
691 u32 views;
692 u32 rg_view_order[1];
693};
694
695struct hfi_multi_view_select {
696 u32 view_index;
697};
698
699enum HFI_NAL_STREAM_FORMAT {
700 HFI_NAL_FORMAT_STARTCODES = 0x00000001,
701 HFI_NAL_FORMAT_ONE_NAL_PER_BUFFER = 0x00000002,
702 HFI_NAL_FORMAT_ONE_BYTE_LENGTH = 0x00000004,
703 HFI_NAL_FORMAT_TWO_BYTE_LENGTH = 0x00000008,
704 HFI_NAL_FORMAT_FOUR_BYTE_LENGTH = 0x00000010,
705 HFI_UNUSED_NAL = 0x10000000,
706};
707
708struct hfi_nal_stream_format_supported {
709 u32 nal_stream_format_supported;
710};
711
712enum HFI_PICTURE {
713 HFI_PICTURE_I = 0x01,
714 HFI_PICTURE_P = 0x02,
715 HFI_PICTURE_B = 0x04,
716 HFI_PICTURE_IDR = 0x7F001000,
717 HFI_UNUSED_PICT = 0x10000000,
718};
719
720enum HFI_PRIORITY {
721 HFI_PRIORITY_LOW = 10,
722 HFI_PRIOIRTY_MEDIUM = 20,
723 HFI_PRIORITY_HIGH = 30,
724 HFI_UNUSED_PRIORITY = 0x10000000,
725};
726
727struct hfi_profile_level {
728 u32 profile;
729 u32 level;
730};
731
732struct hfi_profile_level_supported {
733 u32 profile_count;
734 struct hfi_profile_level rg_profile_level[1];
735};
736
737enum HFI_ROTATE {
738 HFI_ROTATE_NONE,
739 HFI_ROTATE_90,
740 HFI_ROTATE_180,
741 HFI_ROTATE_270,
742 HFI_UNUSED_ROTATE = 0x10000000,
743};
744
745enum HFI_FLIP {
746 HFI_FLIP_NONE,
747 HFI_FLIP_HORIZONTAL,
748 HFI_FLIP_VERTICAL,
749 HFI_UNUSED_FLIP = 0x10000000,
750};
751
752struct hfi_operations {
753 enum HFI_ROTATE rotate;
754 enum HFI_FLIP flip;
755};
756
757enum HFI_OUTPUT_ORDER {
758 HFI_OUTPUT_ORDER_DISPLAY,
759 HFI_OUTPUT_ORDER_DECODE,
760 HFI_UNUSED_OUTPUT = 0x10000000,
761};
762
763struct hfi_quantization {
764 u32 qp_i;
765 u32 qp_p;
766 u32 qp_b;
767};
768
769enum HFI_RATE_CONTROL {
770 HFI_RATE_CONTROL_OFF,
771 HFI_RATE_CONTROL_VBR_VFR,
772 HFI_RATE_CONTROL_VBR_CFR,
773 HFI_RATE_CONTROL_CBR_VFR,
774 HFI_RATE_CONTROL_CBR_CFR,
775 HFI_UNUSED_RC = 0x10000000,
776};
777
778struct hfi_slice_delivery_mode {
779 int enable;
780};
781
782struct hfi_temporal_spatial_tradeoff {
783 u32 ts_factor;
784};
785
786struct hfi_frame_size {
787 enum HFI_BUFFER buffer;
788 u32 width;
789 u32 height;
790};
791
792enum HFI_UNCOMPRESSED_FORMAT {
793 HFI_COLOR_FORMAT_MONOCHROME,
794 HFI_COLOR_FORMAT_NV12,
795 HFI_COLOR_FORMAT_NV21,
796 HFI_COLOR_FORMAT_NV12_4x4TILE,
797 HFI_COLOR_FORMAT_NV21_4x4TILE,
798 HFI_COLOR_FORMAT_YUYV,
799 HFI_COLOR_FORMAT_YVYU,
800 HFI_COLOR_FORMAT_UYVY,
801 HFI_COLOR_FORMAT_VYUY,
802 HFI_COLOR_FORMAT_RGB565,
803 HFI_COLOR_FORMAT_BGR565,
804 HFI_COLOR_FORMAT_RGB888,
805 HFI_COLOR_FORMAT_BGR888,
806 HFI_UNUSED_COLOR = 0x10000000,
807};
808
809struct hfi_uncompressed_format_select {
810 enum HFI_BUFFER buffer;
811 enum HFI_UNCOMPRESSED_FORMAT format;
812};
813
814struct hfi_uncompressed_format_supported {
815 enum HFI_BUFFER buffer;
816 u32 format_entries;
817 u32 rg_format_info[1];
818};
819
820struct hfi_uncompressed_plane_actual {
821 int actual_stride;
822 u32 actual_plane_buffer_height;
823};
824
825struct hfi_uncompressed_plane_actual_info {
826 enum HFI_BUFFER buffer;
827 u32 num_planes;
828 struct hfi_uncompressed_plane_actual rg_plane_format[1];
829};
830
831struct hfi_uncompressed_plane_constraints {
832 u32 stride_multiples;
833 u32 max_stride;
834 u32 min_plane_buffer_height_multiple;
835 u32 buffer_alignment;
836};
837
838struct hfi_uncompressed_plane_info {
839 enum HFI_UNCOMPRESSED_FORMAT format;
840 u32 num_planes;
841 struct hfi_uncompressed_plane_constraints rg_plane_format[1];
842};
843
844struct hfi_uncompressed_plane_actual_constraints_info {
845 enum HFI_BUFFER buffer;
846 u32 num_planes;
847 struct hfi_uncompressed_plane_constraints rg_plane_format[1];
848};
849
850struct hfi_codec_supported {
851 u32 decoder_codec_supported;
852 u32 encoder_codec_supported;
853};
854
855enum HFI_DEBUG_MSG {
856 HFI_DEBUG_MSG_LOW = 0x00000001,
857 HFI_DEBUG_MSG_MEDIUM = 0x00000002,
858 HFI_DEBUG_MSG_HIGH = 0x00000004,
859 HFI_DEBUG_MSG_ERROR = 0x00000008,
860 HFI_DEBUG_MSG_FATAL = 0x00000010,
861 HFI_UNUSED_DEBUG_MSG = 0x10000000,
862};
863
864struct hfi_debug_config {
865 u32 debug_config;
866};
867
868struct hfi_properties_supported {
869 u32 num_properties;
870 u32 rg_properties[1];
871};
872
873enum HFI_RESOURCE {
874 HFI_RESOURCE_OCMEM = 0x00000001,
875 HFI_UNUSED_RESOURCE = 0x10000000,
876};
877
878struct hfi_resource_ocmem_type {
879 u32 size;
880 u8 *mem;
881};
882
883struct hfi_resource_ocmem_requirement {
884 enum HFI_DOMAIN session_domain;
885 u32 width;
886 u32 height;
887 u32 size;
888};
889
890struct hfi_resource_ocmem_requirement_info {
891 u32 num_entries;
892 struct hfi_resource_ocmem_requirement rg_requirements[1];
893};
894
895struct hfi_venc_config_advanced {
896 u8 pipe2d;
897 u8 hw_mode;
898 u8 low_delay_enforce;
899 int h264_constrain_intra_pred;
900 int h264_transform_8x8_flag;
901 int mpeg4_qpel_enable;
902 int multi_refP_en;
903 int qmatrix_en;
904 u8 vpp_info_packet_mode;
905 u8 ref_tile_mode;
906 u8 bitstream_flush_mode;
907 u32 ds_display_frame_width;
908 u32 ds_display_frame_height;
909 u32 perf_tune_param_ptr;
910};
911
912enum HFI_COMMAND {
913 HFI_CMD_SYS_UNUSED = 0x01000000,
914 HFI_CMD_SYS_INIT,
915 HFI_CMD_SYS_SESSION_INIT,
916 HFI_CMD_SYS_SESSION_END,
917 HFI_CMD_SYS_SESSION_ABORT,
918 HFI_CMD_SYS_SET_RESOURCE,
919 HFI_CMD_SYS_RELEASE_RESOURCE,
920 HFI_CMD_SYS_PING,
921 HFI_CMD_SYS_PC_PREP,
922 HFI_CMD_SYS_SET_PROPERTY,
923 HFI_CMD_SYS_GET_PROPERTY,
924
925 HFI_CMD_SESSION_UNUSED = 0x02000000,
926 HFI_CMD_SESSION_LOAD_RESOURCES,
927 HFI_CMD_SESSION_START,
928 HFI_CMD_SESSION_STOP,
929 HFI_CMD_SESSION_EMPTY_BUFFER,
930 HFI_CMD_SESSION_FILL_BUFFER,
931 HFI_CMD_SESSION_FLUSH,
932 HFI_CMD_SESSION_SUSPEND,
933 HFI_CMD_SESSION_RESUME,
934 HFI_CMD_SESSION_SET_PROPERTY,
935 HFI_CMD_SESSION_GET_PROPERTY,
936 HFI_CMD_SESSION_PARSE_SEQUENCE_HEADER,
937 HFI_CMD_SESSION_GET_SEQUENCE_HEADER,
938 HFI_CMD_SESSION_SET_BUFFERS,
939 HFI_CMD_SESSION_RELEASE_BUFFERS,
940 HFI_CMD_SESSION_RELEASE_RESOURCES,
941
942 HFI_CMD_UNUSED = 0x10000000,
943};
944
945enum HFI_MESSAGE {
946 HFI_MSG_SYS_UNUSED = 0x01000000,
947 HFI_MSG_SYS_IDLE,
948 HFI_MSG_SYS_PC_PREP_DONE,
949 HFI_MSG_SYS_RELEASE_RESOURCE,
950 HFI_MSG_SYS_PING_ACK,
951 HFI_MSG_SYS_DEBUG,
952 HFI_MSG_SYS_INIT_DONE,
953 HFI_MSG_SYS_PROPERTY_INFO,
954 HFI_MSG_SESSION_UNUSED = 0x02000000,
955 HFI_MSG_EVENT_NOTIFY,
956 HFI_MSG_SYS_SESSION_INIT_DONE,
957 HFI_MSG_SYS_SESSION_END_DONE,
958 HFI_MSG_SYS_SESSION_ABORT_DONE,
959 HFI_MSG_SESSION_LOAD_RESOURCES_DONE,
960 HFI_MSG_SESSION_START_DONE,
961 HFI_MSG_SESSION_STOP_DONE,
962 HFI_MSG_SESSION_SUSPEND_DONE,
963 HFI_MSG_SESSION_RESUME_DONE,
964 HFI_MSG_SESSION_EMPTY_BUFFER_DONE,
965 HFI_MSG_SESSION_FILL_BUFFER_DONE,
966 HFI_MSG_SESSION_FLUSH_DONE,
967 HFI_MSG_SESSION_PROPERTY_INFO,
968 HFI_MSG_SESSION_RELEASE_RESOURCES_DONE,
969 HFI_MSG_SESSION_PARSE_SEQUENCE_HEADER_DONE,
970 HFI_MSG_SESSION_GET_SEQUENCE_HEADER_DONE,
971 HFI_MSG_UNUSED = 0x10000000,
972};
973
974struct vidc_hal_msg_pkt_hdr {
975 u32 size;
976 enum HFI_MESSAGE packet;
977};
978
979struct vidc_hal_session_cmd_pkt {
980 u32 size;
981 enum HFI_COMMAND packet_type;
982 u32 session_id;
983};
984
985enum HFI_STATUS {
986 HFI_FAIL = 0,
987 HFI_SUCCESS,
988 HFI_UNUSED_STATUS = 0x10000000,
989};
990
991struct hfi_cmd_sys_init_packet {
992 u32 size;
993 enum HFI_COMMAND packet;
994};
995
996struct hfi_cmd_sys_session_init_packet {
997 u32 size;
998 enum HFI_COMMAND packet;
999 u32 session_id;
1000 enum HFI_DOMAIN session_domain;
1001 enum HFI_VIDEO_CODEC session_codec;
1002};
1003
1004struct hfi_cmd_sys_session_end_packet {
1005 u32 size;
1006 enum HFI_COMMAND packet_type;
1007 u32 session_id;
1008};
1009
1010struct hfi_cmd_sys_session_abort_packet {
1011 u32 size;
1012 enum HFI_COMMAND packet_type;
1013 u32 session_id;
1014};
1015
1016struct hfi_cmd_sys_pc_prep_packet {
1017 u32 size;
1018 enum HFI_COMMAND packet_type;
1019};
1020
1021struct hfi_cmd_sys_set_resource_packet {
1022 u32 size;
1023 enum HFI_COMMAND packet_type;
1024 u32 resource_handle;
1025 enum HFI_RESOURCE resource_type;
1026 u32 rg_resource_data[1];
1027};
1028
1029struct hfi_cmd_sys_release_resource_packet {
1030 u32 size;
1031 enum HFI_COMMAND packet_type;
1032 enum HFI_RESOURCE resource_type;
1033 u32 resource_handle;
1034};
1035
1036struct hfi_cmd_sys_ping_packet {
1037 u32 size;
1038 enum HFI_COMMAND packet_type;
1039 u32 client_data;
1040};
1041
1042struct hfi_cmd_sys_set_property_packet {
1043 u32 size;
1044 enum HFI_COMMAND packet_type;
1045 u32 num_properties;
1046 u32 rg_property_data[1];
1047};
1048
1049struct hfi_cmd_sys_get_property_packet {
1050 u32 size;
1051 enum HFI_COMMAND packet_type;
1052 u32 num_properties;
1053 enum HFI_PROPERTY rg_property_data[1];
1054};
1055
1056struct hfi_cmd_session_load_resources_packet {
1057 u32 size;
1058 enum HFI_COMMAND packet_type;
1059 u32 session_id;
1060};
1061
1062struct hfi_cmd_session_start_packet {
1063 u32 size;
1064 enum HFI_COMMAND packet_type;
1065 u32 session_id;
1066};
1067
1068struct hfi_cmd_session_stop_packet {
1069 u32 size;
1070 enum HFI_COMMAND packet_type;
1071 u32 session_id;
1072};
1073
1074struct hfi_cmd_session_empty_buffer_compressed_packet {
1075 u32 size;
1076 enum HFI_COMMAND packet_type;
1077 u32 session_id;
1078 u32 timestamp_hi;
1079 u32 timestamp_lo;
1080 u32 flags;
1081 u32 mark_target;
1082 u32 mark_data;
1083 u32 offset;
1084 u32 alloc_len;
1085 u32 filled_len;
1086 u32 input_tag;
1087 u8 *packet_buffer;
1088};
1089
1090struct hfi_cmd_session_empty_buffer_uncompressed_plane0_packet {
1091 u32 size;
1092 enum HFI_COMMAND packet;
1093 u32 session_id;
1094 u32 view_id;
1095 u32 timestamp_hi;
1096 u32 timestamp_lo;
1097 u32 flags;
1098 u32 mark_target;
1099 u32 mark_data;
1100 u32 alloc_len;
1101 u32 filled_len;
1102 u32 offset;
1103 u32 input_tag;
1104 u8 *packet_buffer;
1105};
1106
1107struct hfi_cmd_session_empty_buffer_uncompressed_plane1_packet {
1108 u32 flags;
1109 u32 alloc_len;
1110 u32 filled_len;
1111 u32 offset;
1112 u8 *packet_buffer2;
1113};
1114
1115struct hfi_cmd_session_empty_buffer_uncompressed_plane2_packet {
1116 u32 flags;
1117 u32 alloc_len;
1118 u32 filled_len;
1119 u32 offset;
1120 u8 *packet_buffer3;
1121};
1122
1123struct hfi_cmd_session_fill_buffer_packet {
1124 u32 size;
1125 enum HFI_COMMAND packet_type;
1126 u32 session_id;
1127 u32 stream_id;
1128 u8 *packet_buffer;
1129 u8 *extra_data_buffer;
1130};
1131
1132struct hfi_cmd_session_flush_packet {
1133 u32 size;
1134 enum HFI_COMMAND packet_type;
1135 u32 session_id;
1136 enum HFI_FLUSH flush_type;
1137};
1138
1139struct hfi_cmd_session_suspend_packet {
1140 u32 size;
1141 enum HFI_COMMAND packet;
1142 u32 session_id;
1143};
1144
1145struct hfi_cmd_session_resume_packet {
1146 u32 size;
1147 enum HFI_COMMAND packet_type;
1148 u32 session_id;
1149};
1150
1151struct hfi_cmd_session_set_property_packet {
1152 u32 size;
1153 enum HFI_COMMAND packet_type;
1154 u32 session_id;
1155 u32 num_properties;
Ashray Kulkarni1c72b392012-06-20 10:50:00 -07001156 u32 rg_property_data[0];
Ashray Kulkarni6ab782b2012-01-26 16:58:01 -08001157};
1158
1159struct hfi_cmd_session_get_property_packet {
1160 u32 size;
1161 enum HFI_COMMAND packet_type;
1162 u32 session_id;
1163 u32 num_properties;
1164 enum HFI_PROPERTY rg_property_data[1];
1165};
1166
1167struct hfi_buffer_info {
1168 u32 buffer_addr;
1169 u32 extradata_addr;
1170};
1171
1172struct hfi_cmd_session_set_buffers_packet {
1173 u32 size;
1174 enum HFI_COMMAND packet_type;
1175 u32 session_id;
1176 enum HFI_BUFFER buffer_type;
1177 enum HFI_BUFFER_MODE buffer_mode;
1178 u32 buffer_size;
1179 u32 extradata_size;
1180 u32 min_buffer_size;
1181 u32 num_buffers;
1182 u32 rg_buffer_info[1];
1183};
1184
1185struct hfi_cmd_session_release_buffer_packet {
1186 u32 size;
1187 enum HFI_COMMAND packet_type;
1188 u32 session_id;
1189 enum HFI_BUFFER buffer_type;
1190 u32 buffer_size;
1191 u32 extradata_size;
1192 u32 num_buffers;
1193 u32 rg_buffer_info[1];
1194};
1195
1196struct hfi_cmd_session_release_resources_packet {
1197 u32 size;
1198 enum HFI_COMMAND packet_type;
1199 u32 session_id;
1200};
1201
1202struct hfi_cmd_session_parse_sequence_header_packet {
1203 u32 size;
1204 enum HFI_COMMAND packet_type;
1205 u32 session_id;
1206 u32 header_len;
1207 u8 *packet_buffer;
1208};
1209
1210struct hfi_cmd_session_get_sequence_header_packet {
1211 u32 size;
1212 enum HFI_COMMAND packet_type;
1213 u32 session_id;
1214 u32 buffer_len;
1215 u8 *packet_buffer;
1216};
1217
1218struct hfi_msg_event_notify_packet {
1219 u32 size;
1220 enum HFI_MESSAGE packet_type;
1221 u32 session_id;
1222 enum HFI_EVENT event_id;
1223 u32 event_data1;
1224 u32 event_data2;
1225 u32 rg_ext_event_data[1];
1226};
1227
1228struct hfi_msg_sys_init_done_packet {
1229 u32 size;
1230 enum HFI_MESSAGE packet_type;
1231 enum HFI_ERROR error_type;
1232 u32 num_properties;
1233 u32 rg_property_data[1];
1234};
1235
1236struct hfi_msg_sys_session_init_done_packet {
1237 u32 size;
1238 enum HFI_MESSAGE packet_type;
1239 u32 session_id;
1240 enum HFI_ERROR error_type;
1241 u32 num_properties;
1242 u32 rg_property_data[1];
1243};
1244
1245struct hfi_msg_sys_session_end_done_packet {
1246 u32 size;
1247 enum HFI_MESSAGE packet_type;
1248 u32 session_id;
1249 enum HFI_ERROR error_type;
1250};
1251
1252struct hfi_msg_sys_session_abort_done_packet {
1253 u32 size;
1254 enum HFI_MESSAGE packet_type;
1255 u32 session_id;
1256 enum HFI_ERROR error_type;
1257};
1258
1259struct hfi_msg_sys_idle_packet {
1260 u32 size;
1261 enum HFI_MESSAGE packet_type;
1262};
1263
1264struct hfi_msg_sys_pc_prep_done_packet {
1265 u32 size;
1266 enum HFI_MESSAGE packet_type;
1267 enum HFI_ERROR error_type;
1268};
1269
1270struct hfi_msg_sys_release_resource_done_packet {
1271 u32 size;
1272 enum HFI_MESSAGE packet_type;
1273 u32 resource_handle;
1274 enum HFI_ERROR error_type;
1275};
1276
1277struct hfi_msg_sys_ping_ack_packet {
1278 u32 size;
1279 enum HFI_MESSAGE packet_type;
1280 u32 client_data;
1281};
1282
1283struct hfi_msg_sys_debug_packet {
1284 u32 size;
1285 enum HFI_MESSAGE packet_type;
1286 enum HFI_DEBUG_MSG msg_type;
1287 u32 msg_size;
1288 u32 timestamp_hi;
1289 u32 timestamp_lo;
1290 u8 rg_msg_data[1];
1291};
1292
1293struct hfi_msg_sys_property_info_packet {
1294 u32 nsize;
1295 enum HFI_MESSAGE packet_type;
1296 u32 num_properties;
1297 u32 rg_property_data[1];
1298};
1299
1300struct hfi_msg_session_load_resources_done_packet {
1301 u32 size;
1302 enum HFI_MESSAGE packet_type;
1303 u32 session_id;
1304 enum HFI_ERROR error_type;
1305};
1306
1307struct hfi_msg_session_start_done_packet {
1308 u32 size;
1309 enum HFI_MESSAGE packet_type;
1310 u32 session_id;
1311 enum HFI_ERROR error_type;
1312};
1313
1314struct hfi_msg_session_stop_done_packet {
1315 u32 size;
1316 enum HFI_MESSAGE packet_type;
1317 u32 session_id;
1318 enum HFI_ERROR error_type;
1319};
1320
1321struct hfi_msg_session_suspend_done_packet {
1322 u32 size;
1323 enum HFI_MESSAGE packet_type;
1324 u32 session_id;
1325 enum HFI_ERROR error_type;
1326};
1327
1328struct hfi_msg_session_resume_done_packet {
1329 u32 size;
1330 enum HFI_MESSAGE packet_type;
1331 u32 session_id;
1332 enum HFI_ERROR error_type;
1333};
1334
1335struct hfi_msg_session_empty_buffer_done_packet {
1336 u32 size;
1337 enum HFI_MESSAGE packet_type;
1338 u32 session_id;
1339 enum HFI_ERROR error_type;
1340 u32 offset;
1341 u32 filled_len;
1342 u32 input_tag;
1343 u8 *packet_buffer;
1344};
1345
1346struct hfi_msg_session_fill_buffer_done_compressed_packet {
1347 u32 size;
1348 enum HFI_MESSAGE packet_type;
1349 u32 session_id;
1350 u32 timestamp_hi;
1351 u32 timestamp_lo;
1352 enum HFI_ERROR error_type;
1353 u32 flags;
1354 u32 mark_target;
1355 u32 mark_data;
1356 u32 stats;
1357 u32 offset;
1358 u32 alloc_len;
1359 u32 filled_len;
1360 u32 input_tag;
1361 enum HFI_PICTURE picture_type;
1362 u8 *packet_buffer;
1363 u8 *extra_data_buffer;
1364};
1365
1366struct hfi_msg_session_fbd_uncompressed_plane0_packet {
1367 u32 size;
1368 enum HFI_MESSAGE packet_type;
1369 u32 session_id;
1370 u32 stream_id;
1371 u32 view_id;
1372 enum HFI_ERROR error_type;
1373 u32 timestamp_hi;
1374 u32 timestamp_lo;
1375 u32 flags;
1376 u32 mark_target;
1377 u32 mark_data;
1378 u32 stats;
1379 u32 alloc_len;
1380 u32 filled_len;
1381 u32 oofset;
1382 u32 frame_width;
1383 u32 frame_height;
1384 u32 start_xCoord;
1385 u32 start_yCoord;
1386 u32 input_tag;
1387 u32 input_tag1;
1388 enum HFI_PICTURE picture_type;
1389 u8 *packet_buffer;
1390 u8 *extra_data_buffer;
1391};
1392
1393struct hfi_msg_session_fill_buffer_done_uncompressed_plane1_packet {
1394 u32 flags;
1395 u32 alloc_len;
1396 u32 filled_len;
1397 u32 offset;
1398 u8 *packet_buffer;
1399};
1400
1401struct hfi_msg_session_fill_buffer_done_uncompressed_plane2_packet {
1402 u32 flags;
1403 u32 alloc_len;
1404 u32 filled_len;
1405 u32 offset;
1406 u8 *packet_buffer;
1407};
1408
1409struct hfi_msg_session_flush_done_packet {
1410 u32 size;
1411 enum HFI_MESSAGE packet_type;
1412 u32 session_id;
1413 enum HFI_ERROR error_type;
1414 enum HFI_FLUSH flush_type;
1415};
1416
1417struct hfi_msg_session_parse_sequence_header_done_packet {
1418 u32 size;
1419 enum HFI_MESSAGE packet_type;
1420 u32 session_id;
1421 enum HFI_ERROR error_type;
1422 u32 num_properties;
1423 u32 rg_property_data[1];
1424};
1425
1426struct hfi_msg_session_get_sequence_header_done_packet {
1427 u32 size;
1428 enum HFI_MESSAGE packet_type;
1429 u32 session_id;
1430 enum HFI_ERROR error_type;
1431 u32 header_len;
1432 u8 *sequence_header;
1433};
1434
1435struct hfi_msg_session_property_info_packet {
1436 u32 size;
1437 enum HFI_MESSAGE packet_type;
1438 u32 session_id;
1439 u32 num_properties;
1440 u32 rg_property_data[1];
1441};
1442
1443struct hfi_msg_session_release_resources_done_packet {
1444 u32 size;
1445 enum HFI_MESSAGE packet_type;
1446 u32 session_id;
1447 enum HFI_ERROR error_type;
1448};
1449
1450struct hfi_extradata_mb_quantization_payload {
1451 u8 rg_mb_qp[1];
1452};
1453
1454struct hfi_extradata_vc1_pswnd {
1455 u32 ps_wnd_h_offset;
1456 u32 ps_wndv_offset;
1457 u32 ps_wnd_width;
1458 u32 ps_wnd_height;
1459};
1460
1461struct hfi_extradata_vc1_framedisp_payload {
1462 u32 res_pic;
1463 u32 ref;
1464 u32 range_map_present;
1465 u32 range_map_y;
1466 u32 range_map_uv;
1467 u32 num_pan_scan_wnds;
1468 struct hfi_extradata_vc1_pswnd rg_ps_wnd[1];
1469};
1470
1471struct hfi_extradata_vc1_seqdisp_payload {
1472 u32 prog_seg_frm;
1473 u32 uv_sampling_fmt;
1474 u32 color_fmt_flag;
1475 u32 color_primaries;
1476 u32 transfer_char;
1477 u32 mat_coeff;
1478 u32 aspect_ratio;
1479 u32 aspect_horiz;
1480 u32 aspect_vert;
1481};
1482
1483struct hfi_extradata_timestamp_payload {
1484 u32 timestamp_low;
1485 u32 timestamp_high;
1486};
1487
1488struct hfi_extradata_interlace_video_payload {
1489 enum HFI_INTERLACE_FORMAT format;
1490};
1491
1492enum HFI_S3D_FP_LAYOUT {
1493 HFI_S3D_FP_LAYOUT_NONE,
1494 HFI_S3D_FP_LAYOUT_INTRLV_CHECKERBOARD,
1495 HFI_S3D_FP_LAYOUT_INTRLV_COLUMN,
1496 HFI_S3D_FP_LAYOUT_INTRLV_ROW,
1497 HFI_S3D_FP_LAYOUT_SIDEBYSIDE,
1498 HFI_S3D_FP_LAYOUT_TOPBOTTOM,
1499 HFI_S3D_FP_LAYOUT_UNUSED = 0x10000000,
1500};
1501
1502enum HFI_S3D_FP_VIEW_ORDER {
1503 HFI_S3D_FP_LEFTVIEW_FIRST,
1504 HFI_S3D_FP_RIGHTVIEW_FIRST,
1505 HFI_S3D_FP_UNKNOWN,
1506 HFI_S3D_FP_VIEWORDER_UNUSED = 0x10000000,
1507};
1508
1509enum HFI_S3D_FP_FLIP {
1510 HFI_S3D_FP_FLIP_NONE,
1511 HFI_S3D_FP_FLIP_LEFT_HORIZ,
1512 HFI_S3D_FP_FLIP_LEFT_VERT,
1513 HFI_S3D_FP_FLIP_RIGHT_HORIZ,
1514 HFI_S3D_FP_FLIP_RIGHT_VERT,
1515 HFI_S3D_FP_FLIP_UNUSED = 0x10000000,
1516};
1517
1518struct hfi_extradata_s3d_frame_packing_payload {
1519 enum HFI_S3D_FP_LAYOUT eLayout;
1520 enum HFI_S3D_FP_VIEW_ORDER eOrder;
1521 enum HFI_S3D_FP_FLIP eFlip;
1522 int bQuinCunx;
1523 u32 nLeftViewLumaSiteX;
1524 u32 nLeftViewLumaSiteY;
1525 u32 nRightViewLumaSiteX;
1526 u32 nRightViewLumaSiteY;
1527};
1528
1529struct hfi_extradata_num_concealed_mb_payload {
1530 u32 num_mb_concealed;
1531};
1532
1533struct hfi_extradata_sliceinfo {
1534 u32 offset_in_stream;
1535 u32 slice_length;
1536};
1537
1538struct hfi_extradata_multislice_info_payload {
1539 u32 num_slices;
1540 struct hfi_extradata_sliceinfo rg_slice_info[1];
1541};
1542
1543struct hfi_index_extradata_input_crop_payload {
1544 u32 size;
1545 u32 version;
1546 u32 port_index;
1547 u32 left;
1548 u32 top;
1549 u32 width;
1550 u32 height;
1551};
1552
1553struct hfi_index_extradata_digital_zoom_payload {
1554 u32 size;
1555 u32 version;
1556 u32 port_index;
1557 int width;
1558 int height;
1559};
1560
1561struct vidc_mem_addr {
1562 u8 *align_device_addr;
1563 u8 *align_virtual_addr;
1564 u32 mem_size;
1565 struct msm_smem *mem_data;
1566};
1567
1568struct vidc_iface_q_info {
1569 void *q_hdr;
1570 struct vidc_mem_addr q_array;
1571};
1572
1573/* Internal data used in vidc_hal not exposed to msm_vidc*/
1574
1575struct hal_data {
1576 u32 irq;
1577 u8 *device_base_addr;
1578 u8 *register_base_addr;
1579};
1580
1581struct hal_device {
1582 struct list_head list;
1583 struct list_head sess_head;
1584 u32 intr_status;
1585 u32 device_id;
1586 spinlock_t read_lock;
1587 spinlock_t write_lock;
1588 void (*callback) (u32 response, void *callback);
1589 struct vidc_mem_addr iface_q_table;
1590 struct vidc_iface_q_info iface_queues[VIDC_IFACEQ_NUMQ];
1591 struct smem_client *hal_client;
1592 struct hal_data *hal_data;
1593 struct workqueue_struct *vidc_workq;
1594 int spur_count;
1595 int reg_count;
1596};
1597
1598struct hal_session {
1599 struct list_head list;
1600 u32 session_id;
1601 u32 is_decoder;
1602 struct hal_device *device;
1603};
1604
1605struct hal_device_data {
1606 struct list_head dev_head;
1607 int dev_count;
1608};
1609
1610extern struct hal_device_data hal_ctxt;
1611
1612int vidc_hal_iface_msgq_read(struct hal_device *device, void *pkt);
1613int vidc_hal_iface_dbgq_read(struct hal_device *device, void *pkt);
1614
1615/* Interrupt Processing:*/
1616void vidc_hal_response_handler(struct hal_device *device);
1617
1618#endif /*__VIDC_HAL_H__ */