blob: a901b8d9ad9eb1aa2aa964636b2d080e0aae7387 [file] [log] [blame]
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001/* Copyright (c) 2012-2017, The Linux Foundation. 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_HFI_API_H__
15#define __VIDC_HFI_API_H__
16
17#include <linux/log2.h>
18#include <linux/platform_device.h>
19#include <linux/types.h>
20#include <media/msm_vidc.h>
21#include "msm_vidc_resources.h"
22
Chinmay Sawarkarcbd3f592017-04-10 15:42:30 -070023#define CONTAINS(__a, __sz, __t) (\
24 (__t >= __a) && \
25 (__t < __a + __sz) \
26)
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -080027
Chinmay Sawarkarcbd3f592017-04-10 15:42:30 -070028#define OVERLAPS(__t, __tsz, __a, __asz) (\
29 (__t <= __a) && \
30 (__t + __tsz >= __a + __asz) \
31)
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -080032
33#define HAL_BUFFERFLAG_EOS 0x00000001
34#define HAL_BUFFERFLAG_STARTTIME 0x00000002
35#define HAL_BUFFERFLAG_DECODEONLY 0x00000004
36#define HAL_BUFFERFLAG_DATACORRUPT 0x00000008
37#define HAL_BUFFERFLAG_ENDOFFRAME 0x00000010
38#define HAL_BUFFERFLAG_SYNCFRAME 0x00000020
39#define HAL_BUFFERFLAG_EXTRADATA 0x00000040
40#define HAL_BUFFERFLAG_CODECCONFIG 0x00000080
41#define HAL_BUFFERFLAG_TIMESTAMPINVALID 0x00000100
42#define HAL_BUFFERFLAG_READONLY 0x00000200
43#define HAL_BUFFERFLAG_ENDOFSUBFRAME 0x00000400
44#define HAL_BUFFERFLAG_EOSEQ 0x00200000
45#define HAL_BUFFERFLAG_MBAFF 0x08000000
46#define HAL_BUFFERFLAG_YUV_601_709_CSC_CLAMP 0x10000000
47#define HAL_BUFFERFLAG_DROP_FRAME 0x20000000
48#define HAL_BUFFERFLAG_TS_DISCONTINUITY 0x40000000
49#define HAL_BUFFERFLAG_TS_ERROR 0x80000000
50
51
52
53#define HAL_DEBUG_MSG_LOW 0x00000001
54#define HAL_DEBUG_MSG_MEDIUM 0x00000002
55#define HAL_DEBUG_MSG_HIGH 0x00000004
56#define HAL_DEBUG_MSG_ERROR 0x00000008
57#define HAL_DEBUG_MSG_FATAL 0x00000010
58#define MAX_PROFILE_COUNT 16
59
60#define HAL_MAX_MATRIX_COEFFS 9
61#define HAL_MAX_BIAS_COEFFS 3
62#define HAL_MAX_LIMIT_COEFFS 6
63#define VENUS_VERSION_LENGTH 128
64
65/* 16 encoder and 16 decoder sessions */
66#define VIDC_MAX_SESSIONS 32
67
68enum vidc_status {
69 VIDC_ERR_NONE = 0x0,
70 VIDC_ERR_FAIL = 0x80000000,
71 VIDC_ERR_ALLOC_FAIL,
72 VIDC_ERR_ILLEGAL_OP,
73 VIDC_ERR_BAD_PARAM,
74 VIDC_ERR_BAD_HANDLE,
75 VIDC_ERR_NOT_SUPPORTED,
76 VIDC_ERR_BAD_STATE,
77 VIDC_ERR_MAX_CLIENTS,
78 VIDC_ERR_IFRAME_EXPECTED,
79 VIDC_ERR_HW_FATAL,
80 VIDC_ERR_BITSTREAM_ERR,
81 VIDC_ERR_INDEX_NOMORE,
82 VIDC_ERR_SEQHDR_PARSE_FAIL,
83 VIDC_ERR_INSUFFICIENT_BUFFER,
84 VIDC_ERR_BAD_POWER_STATE,
85 VIDC_ERR_NO_VALID_SESSION,
86 VIDC_ERR_TIMEOUT,
87 VIDC_ERR_CMDQFULL,
88 VIDC_ERR_START_CODE_NOT_FOUND,
89 VIDC_ERR_CLIENT_PRESENT = 0x90000001,
90 VIDC_ERR_CLIENT_FATAL,
91 VIDC_ERR_CMD_QUEUE_FULL,
92 VIDC_ERR_UNUSED = 0x10000000
93};
94
95enum hal_extradata_id {
96 HAL_EXTRADATA_NONE,
97 HAL_EXTRADATA_MB_QUANTIZATION,
98 HAL_EXTRADATA_INTERLACE_VIDEO,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -080099 HAL_EXTRADATA_TIMESTAMP,
100 HAL_EXTRADATA_S3D_FRAME_PACKING,
101 HAL_EXTRADATA_FRAME_RATE,
102 HAL_EXTRADATA_PANSCAN_WINDOW,
103 HAL_EXTRADATA_RECOVERY_POINT_SEI,
104 HAL_EXTRADATA_MULTISLICE_INFO,
105 HAL_EXTRADATA_INDEX,
106 HAL_EXTRADATA_NUM_CONCEALED_MB,
107 HAL_EXTRADATA_METADATA_FILLER,
108 HAL_EXTRADATA_ASPECT_RATIO,
109 HAL_EXTRADATA_MPEG2_SEQDISP,
110 HAL_EXTRADATA_STREAM_USERDATA,
111 HAL_EXTRADATA_FRAME_QP,
112 HAL_EXTRADATA_FRAME_BITS_INFO,
113 HAL_EXTRADATA_INPUT_CROP,
114 HAL_EXTRADATA_DIGITAL_ZOOM,
115 HAL_EXTRADATA_LTR_INFO,
116 HAL_EXTRADATA_METADATA_MBI,
117 HAL_EXTRADATA_VQZIP_SEI,
118 HAL_EXTRADATA_YUV_STATS,
119 HAL_EXTRADATA_ROI_QP,
120 HAL_EXTRADATA_OUTPUT_CROP,
121 HAL_EXTRADATA_MASTERING_DISPLAY_COLOUR_SEI,
122 HAL_EXTRADATA_CONTENT_LIGHT_LEVEL_SEI,
123 HAL_EXTRADATA_PQ_INFO,
124 HAL_EXTRADATA_VUI_DISPLAY_INFO,
125 HAL_EXTRADATA_VPX_COLORSPACE,
126};
127
128enum hal_property {
129 HAL_CONFIG_FRAME_RATE = 0x04000001,
130 HAL_PARAM_UNCOMPRESSED_FORMAT_SELECT,
131 HAL_PARAM_UNCOMPRESSED_PLANE_ACTUAL_CONSTRAINTS_INFO,
132 HAL_PARAM_UNCOMPRESSED_PLANE_ACTUAL_INFO,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800133 HAL_PARAM_INDEX_EXTRADATA,
134 HAL_PARAM_FRAME_SIZE,
135 HAL_CONFIG_REALTIME,
136 HAL_PARAM_BUFFER_COUNT_ACTUAL,
137 HAL_PARAM_BUFFER_SIZE_MINIMUM,
138 HAL_PARAM_NAL_STREAM_FORMAT_SELECT,
139 HAL_PARAM_VDEC_OUTPUT_ORDER,
140 HAL_PARAM_VDEC_PICTURE_TYPE_DECODE,
141 HAL_PARAM_VDEC_OUTPUT2_KEEP_ASPECT_RATIO,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800142 HAL_PARAM_VDEC_MULTI_STREAM,
143 HAL_PARAM_VDEC_DISPLAY_PICTURE_BUFFER_COUNT,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800144 HAL_CONFIG_VDEC_MB_ERROR_MAP_REPORTING,
145 HAL_PARAM_VDEC_CONTINUE_DATA_TRANSFER,
146 HAL_CONFIG_VDEC_MB_ERROR_MAP,
147 HAL_CONFIG_VENC_REQUEST_IFRAME,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800148 HAL_CONFIG_VENC_TARGET_BITRATE,
149 HAL_PARAM_PROFILE_LEVEL_CURRENT,
150 HAL_PARAM_VENC_H264_ENTROPY_CONTROL,
151 HAL_PARAM_VENC_RATE_CONTROL,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800152 HAL_PARAM_VENC_H264_DEBLOCK_CONTROL,
153 HAL_PARAM_VENC_TEMPORAL_SPATIAL_TRADEOFF,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800154 HAL_PARAM_VENC_SESSION_QP_RANGE,
155 HAL_CONFIG_VENC_INTRA_PERIOD,
156 HAL_CONFIG_VENC_IDR_PERIOD,
157 HAL_CONFIG_VPE_OPERATIONS,
158 HAL_PARAM_VENC_INTRA_REFRESH,
159 HAL_PARAM_VENC_MULTI_SLICE_CONTROL,
160 HAL_CONFIG_VPE_DEINTERLACE,
161 HAL_SYS_DEBUG_CONFIG,
162 HAL_CONFIG_BUFFER_REQUIREMENTS,
163 HAL_CONFIG_PRIORITY,
164 HAL_CONFIG_BATCH_INFO,
165 HAL_PARAM_METADATA_PASS_THROUGH,
166 HAL_SYS_IDLE_INDICATOR,
167 HAL_PARAM_UNCOMPRESSED_FORMAT_SUPPORTED,
168 HAL_PARAM_INTERLACE_FORMAT_SUPPORTED,
169 HAL_PARAM_CHROMA_SITE,
170 HAL_PARAM_PROPERTIES_SUPPORTED,
171 HAL_PARAM_PROFILE_LEVEL_SUPPORTED,
172 HAL_PARAM_CAPABILITY_SUPPORTED,
173 HAL_PARAM_NAL_STREAM_FORMAT_SUPPORTED,
174 HAL_PARAM_MULTI_VIEW_FORMAT,
175 HAL_PARAM_MAX_SEQUENCE_HEADER_SIZE,
176 HAL_PARAM_CODEC_SUPPORTED,
177 HAL_PARAM_VDEC_MULTI_VIEW_SELECT,
178 HAL_PARAM_VDEC_MB_QUANTIZATION,
179 HAL_PARAM_VDEC_NUM_CONCEALED_MB,
180 HAL_PARAM_VDEC_H264_ENTROPY_SWITCHING,
181 HAL_PARAM_VENC_SLICE_DELIVERY_MODE,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800182 HAL_CONFIG_BUFFER_COUNT_ACTUAL,
183 HAL_CONFIG_VDEC_MULTI_STREAM,
184 HAL_PARAM_VENC_MULTI_SLICE_INFO,
185 HAL_CONFIG_VENC_TIMESTAMP_SCALE,
186 HAL_PARAM_VENC_SYNC_FRAME_SEQUENCE_HEADER,
187 HAL_PARAM_VDEC_SYNC_FRAME_DECODE,
188 HAL_PARAM_VENC_H264_ENTROPY_CABAC_MODEL,
189 HAL_CONFIG_VENC_MAX_BITRATE,
190 HAL_PARAM_VENC_H264_VUI_TIMING_INFO,
Umesh Pandey7fce7ee2017-03-13 17:59:48 -0700191 HAL_PARAM_VENC_GENERATE_AUDNAL,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800192 HAL_PARAM_VENC_MAX_NUM_B_FRAMES,
193 HAL_PARAM_BUFFER_ALLOC_MODE,
194 HAL_PARAM_VDEC_FRAME_ASSEMBLY,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800195 HAL_PARAM_VENC_PRESERVE_TEXT_QUALITY,
196 HAL_PARAM_VDEC_CONCEAL_COLOR,
197 HAL_PARAM_VDEC_SCS_THRESHOLD,
198 HAL_PARAM_GET_BUFFER_REQUIREMENTS,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800199 HAL_PARAM_VENC_LTRMODE,
200 HAL_CONFIG_VENC_MARKLTRFRAME,
201 HAL_CONFIG_VENC_USELTRFRAME,
202 HAL_CONFIG_VENC_LTRPERIOD,
203 HAL_CONFIG_VENC_HIER_P_NUM_FRAMES,
204 HAL_PARAM_VENC_HIER_P_MAX_ENH_LAYERS,
205 HAL_PARAM_VENC_DISABLE_RC_TIMESTAMP,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800206 HAL_PARAM_VENC_SEARCH_RANGE,
207 HAL_PARAM_VPE_COLOR_SPACE_CONVERSION,
208 HAL_PARAM_VENC_VPX_ERROR_RESILIENCE_MODE,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800209 HAL_CONFIG_VENC_PERF_MODE,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800210 HAL_PARAM_VDEC_NON_SECURE_OUTPUT2,
211 HAL_PARAM_VENC_HIER_P_HYBRID_MODE,
212 HAL_PARAM_VENC_MBI_STATISTICS_MODE,
213 HAL_PARAM_SYNC_BASED_INTERRUPT,
214 HAL_CONFIG_VENC_FRAME_QP,
215 HAL_CONFIG_VENC_BASELAYER_PRIORITYID,
216 HAL_PARAM_VENC_VQZIP_SEI,
217 HAL_PROPERTY_PARAM_VENC_ASPECT_RATIO,
218 HAL_CONFIG_VDEC_ENTROPY,
219 HAL_PARAM_VENC_BITRATE_TYPE,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800220 HAL_PARAM_VENC_LOW_LATENCY,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800221 HAL_CONFIG_VENC_BLUR_RESOLUTION,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800222 HAL_PARAM_VENC_H264_TRANSFORM_8x8,
223 HAL_PARAM_VENC_VIDEO_SIGNAL_INFO,
224 HAL_PARAM_VENC_IFRAMESIZE_TYPE,
225};
226
227enum hal_domain {
228 HAL_VIDEO_DOMAIN_VPE,
229 HAL_VIDEO_DOMAIN_ENCODER,
230 HAL_VIDEO_DOMAIN_DECODER,
231 HAL_UNUSED_DOMAIN = 0x10000000,
232};
233
234enum multi_stream {
235 HAL_VIDEO_DECODER_NONE = 0x00000000,
236 HAL_VIDEO_DECODER_PRIMARY = 0x00000001,
237 HAL_VIDEO_DECODER_SECONDARY = 0x00000002,
238 HAL_VIDEO_DECODER_BOTH_OUTPUTS = 0x00000004,
239 HAL_VIDEO_UNUSED_OUTPUTS = 0x10000000,
240};
241
242enum hal_core_capabilities {
243 HAL_VIDEO_ENCODER_ROTATION_CAPABILITY = 0x00000001,
244 HAL_VIDEO_ENCODER_SCALING_CAPABILITY = 0x00000002,
245 HAL_VIDEO_ENCODER_DEINTERLACE_CAPABILITY = 0x00000004,
246 HAL_VIDEO_DECODER_MULTI_STREAM_CAPABILITY = 0x00000008,
247 HAL_VIDEO_UNUSED_CAPABILITY = 0x10000000,
248};
249
250enum hal_default_properties {
251 HAL_VIDEO_DYNAMIC_BUF_MODE = 0x00000001,
252 HAL_VIDEO_CONTINUE_DATA_TRANSFER = 0x00000002,
253};
254
255enum hal_video_codec {
256 HAL_VIDEO_CODEC_UNKNOWN = 0x00000000,
257 HAL_VIDEO_CODEC_MVC = 0x00000001,
258 HAL_VIDEO_CODEC_H264 = 0x00000002,
259 HAL_VIDEO_CODEC_H263 = 0x00000004,
260 HAL_VIDEO_CODEC_MPEG1 = 0x00000008,
261 HAL_VIDEO_CODEC_MPEG2 = 0x00000010,
262 HAL_VIDEO_CODEC_MPEG4 = 0x00000020,
263 HAL_VIDEO_CODEC_DIVX_311 = 0x00000040,
264 HAL_VIDEO_CODEC_DIVX = 0x00000080,
265 HAL_VIDEO_CODEC_VC1 = 0x00000100,
266 HAL_VIDEO_CODEC_SPARK = 0x00000200,
267 HAL_VIDEO_CODEC_VP6 = 0x00000400,
268 HAL_VIDEO_CODEC_VP7 = 0x00000800,
269 HAL_VIDEO_CODEC_VP8 = 0x00001000,
270 HAL_VIDEO_CODEC_HEVC = 0x00002000,
271 HAL_VIDEO_CODEC_VP9 = 0x00004000,
272 HAL_VIDEO_CODEC_HEVC_HYBRID = 0x80000000,
273 HAL_UNUSED_CODEC = 0x10000000,
274};
275
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800276enum hal_mpeg2_profile {
277 HAL_MPEG2_PROFILE_SIMPLE = 0x00000001,
278 HAL_MPEG2_PROFILE_MAIN = 0x00000002,
279 HAL_MPEG2_PROFILE_422 = 0x00000004,
280 HAL_MPEG2_PROFILE_SNR = 0x00000008,
281 HAL_MPEG2_PROFILE_SPATIAL = 0x00000010,
282 HAL_MPEG2_PROFILE_HIGH = 0x00000020,
283 HAL_UNUSED_MPEG2_PROFILE = 0x10000000,
284};
285
286enum hal_mpeg2_level {
287 HAL_MPEG2_LEVEL_LL = 0x00000001,
288 HAL_MPEG2_LEVEL_ML = 0x00000002,
289 HAL_MPEG2_LEVEL_H14 = 0x00000004,
290 HAL_MPEG2_LEVEL_HL = 0x00000008,
291 HAL_UNUSED_MEPG2_LEVEL = 0x10000000,
292};
293
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800294enum hal_h264_profile {
295 HAL_H264_PROFILE_BASELINE = 0x00000001,
296 HAL_H264_PROFILE_MAIN = 0x00000002,
297 HAL_H264_PROFILE_HIGH = 0x00000004,
298 HAL_H264_PROFILE_EXTENDED = 0x00000008,
299 HAL_H264_PROFILE_HIGH10 = 0x00000010,
300 HAL_H264_PROFILE_HIGH422 = 0x00000020,
301 HAL_H264_PROFILE_HIGH444 = 0x00000040,
302 HAL_H264_PROFILE_CONSTRAINED_BASE = 0x00000080,
303 HAL_H264_PROFILE_CONSTRAINED_HIGH = 0x00000100,
304 HAL_UNUSED_H264_PROFILE = 0x10000000,
305};
306
307enum hal_h264_level {
Vaibhav Deshu Venkatesh234b4dc2017-03-21 16:54:28 -0700308 HAL_H264_LEVEL_UNKNOWN = 0x00000000,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800309 HAL_H264_LEVEL_1 = 0x00000001,
310 HAL_H264_LEVEL_1b = 0x00000002,
311 HAL_H264_LEVEL_11 = 0x00000004,
312 HAL_H264_LEVEL_12 = 0x00000008,
313 HAL_H264_LEVEL_13 = 0x00000010,
314 HAL_H264_LEVEL_2 = 0x00000020,
315 HAL_H264_LEVEL_21 = 0x00000040,
316 HAL_H264_LEVEL_22 = 0x00000080,
317 HAL_H264_LEVEL_3 = 0x00000100,
318 HAL_H264_LEVEL_31 = 0x00000200,
319 HAL_H264_LEVEL_32 = 0x00000400,
320 HAL_H264_LEVEL_4 = 0x00000800,
321 HAL_H264_LEVEL_41 = 0x00001000,
322 HAL_H264_LEVEL_42 = 0x00002000,
323 HAL_H264_LEVEL_5 = 0x00004000,
324 HAL_H264_LEVEL_51 = 0x00008000,
325 HAL_H264_LEVEL_52 = 0x00010000,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800326};
327
328enum hal_hevc_profile {
329 HAL_HEVC_PROFILE_MAIN = 0x00000001,
330 HAL_HEVC_PROFILE_MAIN10 = 0x00000002,
331 HAL_HEVC_PROFILE_MAIN_STILL_PIC = 0x00000004,
332 HAL_UNUSED_HEVC_PROFILE = 0x10000000,
333};
334
335enum hal_hevc_level {
Vaibhav Deshu Venkatesh234b4dc2017-03-21 16:54:28 -0700336 HAL_HEVC_TIER_LEVEL_UNKNOWN = 0x00000000,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800337 HAL_HEVC_MAIN_TIER_LEVEL_1 = 0x10000001,
338 HAL_HEVC_MAIN_TIER_LEVEL_2 = 0x10000002,
339 HAL_HEVC_MAIN_TIER_LEVEL_2_1 = 0x10000004,
340 HAL_HEVC_MAIN_TIER_LEVEL_3 = 0x10000008,
341 HAL_HEVC_MAIN_TIER_LEVEL_3_1 = 0x10000010,
342 HAL_HEVC_MAIN_TIER_LEVEL_4 = 0x10000020,
343 HAL_HEVC_MAIN_TIER_LEVEL_4_1 = 0x10000040,
344 HAL_HEVC_MAIN_TIER_LEVEL_5 = 0x10000080,
345 HAL_HEVC_MAIN_TIER_LEVEL_5_1 = 0x10000100,
346 HAL_HEVC_MAIN_TIER_LEVEL_5_2 = 0x10000200,
347 HAL_HEVC_MAIN_TIER_LEVEL_6 = 0x10000400,
348 HAL_HEVC_MAIN_TIER_LEVEL_6_1 = 0x10000800,
349 HAL_HEVC_MAIN_TIER_LEVEL_6_2 = 0x10001000,
350 HAL_HEVC_HIGH_TIER_LEVEL_1 = 0x20000001,
351 HAL_HEVC_HIGH_TIER_LEVEL_2 = 0x20000002,
352 HAL_HEVC_HIGH_TIER_LEVEL_2_1 = 0x20000004,
353 HAL_HEVC_HIGH_TIER_LEVEL_3 = 0x20000008,
354 HAL_HEVC_HIGH_TIER_LEVEL_3_1 = 0x20000010,
355 HAL_HEVC_HIGH_TIER_LEVEL_4 = 0x20000020,
356 HAL_HEVC_HIGH_TIER_LEVEL_4_1 = 0x20000040,
357 HAL_HEVC_HIGH_TIER_LEVEL_5 = 0x20000080,
358 HAL_HEVC_HIGH_TIER_LEVEL_5_1 = 0x20000100,
359 HAL_HEVC_HIGH_TIER_LEVEL_5_2 = 0x20000200,
360 HAL_HEVC_HIGH_TIER_LEVEL_6 = 0x20000400,
361 HAL_HEVC_HIGH_TIER_LEVEL_6_1 = 0x20000800,
362 HAL_HEVC_HIGH_TIER_LEVEL_6_2 = 0x20001000,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800363};
364
365enum hal_hevc_tier {
366 HAL_HEVC_TIER_MAIN = 0x00000001,
367 HAL_HEVC_TIER_HIGH = 0x00000002,
368 HAL_UNUSED_HEVC_TIER = 0x10000000,
369};
370
371enum hal_vpx_profile {
372 HAL_VPX_PROFILE_SIMPLE = 0x00000001,
373 HAL_VPX_PROFILE_ADVANCED = 0x00000002,
374 HAL_VPX_PROFILE_VERSION_0 = 0x00000004,
375 HAL_VPX_PROFILE_VERSION_1 = 0x00000008,
376 HAL_VPX_PROFILE_VERSION_2 = 0x00000010,
377 HAL_VPX_PROFILE_VERSION_3 = 0x00000020,
378 HAL_VPX_PROFILE_UNUSED = 0x10000000,
379};
380
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800381struct hal_frame_rate {
382 enum hal_buffer buffer_type;
383 u32 frame_rate;
384};
385
386enum hal_uncompressed_format {
387 HAL_COLOR_FORMAT_MONOCHROME = 0x00000001,
388 HAL_COLOR_FORMAT_NV12 = 0x00000002,
389 HAL_COLOR_FORMAT_NV21 = 0x00000004,
390 HAL_COLOR_FORMAT_NV12_4x4TILE = 0x00000008,
391 HAL_COLOR_FORMAT_NV21_4x4TILE = 0x00000010,
392 HAL_COLOR_FORMAT_YUYV = 0x00000020,
393 HAL_COLOR_FORMAT_YVYU = 0x00000040,
394 HAL_COLOR_FORMAT_UYVY = 0x00000080,
395 HAL_COLOR_FORMAT_VYUY = 0x00000100,
396 HAL_COLOR_FORMAT_RGB565 = 0x00000200,
397 HAL_COLOR_FORMAT_BGR565 = 0x00000400,
398 HAL_COLOR_FORMAT_RGB888 = 0x00000800,
399 HAL_COLOR_FORMAT_BGR888 = 0x00001000,
400 HAL_COLOR_FORMAT_NV12_UBWC = 0x00002000,
401 HAL_COLOR_FORMAT_NV12_TP10_UBWC = 0x00004000,
402 HAL_COLOR_FORMAT_RGBA8888 = 0x00008000,
403 HAL_COLOR_FORMAT_RGBA8888_UBWC = 0x00010000,
404 HAL_UNUSED_COLOR = 0x10000000,
405};
406
407enum hal_statistics_mode_type {
408 HAL_STATISTICS_MODE_DEFAULT = 0x00000001,
409 HAL_STATISTICS_MODE_1 = 0x00000002,
410 HAL_STATISTICS_MODE_2 = 0x00000004,
411 HAL_STATISTICS_MODE_3 = 0x00000008,
412};
413
414enum hal_ssr_trigger_type {
415 SSR_ERR_FATAL = 1,
416 SSR_SW_DIV_BY_ZERO,
417 SSR_HW_WDOG_IRQ,
418};
419
420struct hal_uncompressed_format_select {
421 enum hal_buffer buffer_type;
422 enum hal_uncompressed_format format;
423};
424
425struct hal_uncompressed_plane_actual {
426 int actual_stride;
427 u32 actual_plane_buffer_height;
428};
429
430struct hal_uncompressed_plane_actual_info {
431 enum hal_buffer buffer_type;
432 u32 num_planes;
433 struct hal_uncompressed_plane_actual rg_plane_format[1];
434};
435
436struct hal_uncompressed_plane_constraints {
437 u32 stride_multiples;
438 u32 max_stride;
439 u32 min_plane_buffer_height_multiple;
440 u32 buffer_alignment;
441};
442
443struct hal_uncompressed_plane_actual_constraints_info {
444 enum hal_buffer buffer_type;
445 u32 num_planes;
446 struct hal_uncompressed_plane_constraints rg_plane_format[1];
447};
448
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800449struct hal_frame_size {
450 enum hal_buffer buffer_type;
451 u32 width;
452 u32 height;
453};
454
455struct hal_enable {
456 bool enable;
457};
458
459struct hal_buffer_count_actual {
460 enum hal_buffer buffer_type;
461 u32 buffer_count_actual;
Praneeth Paladugudefea4e2017-02-09 23:44:08 -0800462 u32 buffer_count_min_host;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800463};
464
465struct hal_buffer_size_minimum {
466 enum hal_buffer buffer_type;
467 u32 buffer_size;
468};
469
470struct hal_buffer_display_hold_count_actual {
471 enum hal_buffer buffer_type;
472 u32 hold_count;
473};
474
475enum hal_nal_stream_format {
476 HAL_NAL_FORMAT_STARTCODES = 0x00000001,
477 HAL_NAL_FORMAT_ONE_NAL_PER_BUFFER = 0x00000002,
478 HAL_NAL_FORMAT_ONE_BYTE_LENGTH = 0x00000004,
479 HAL_NAL_FORMAT_TWO_BYTE_LENGTH = 0x00000008,
480 HAL_NAL_FORMAT_FOUR_BYTE_LENGTH = 0x00000010,
481};
482
483enum hal_output_order {
484 HAL_OUTPUT_ORDER_DISPLAY,
485 HAL_OUTPUT_ORDER_DECODE,
486 HAL_UNUSED_OUTPUT = 0x10000000,
487};
488
489enum hal_picture {
490 HAL_PICTURE_I = 0x01,
491 HAL_PICTURE_P = 0x02,
492 HAL_PICTURE_B = 0x04,
493 HAL_PICTURE_IDR = 0x08,
494 HAL_PICTURE_CRA = 0x10,
495 HAL_FRAME_NOTCODED = 0x7F002000,
496 HAL_FRAME_YUV = 0x7F004000,
497 HAL_UNUSED_PICT = 0x10000000,
498};
499
500struct hal_extradata_enable {
501 u32 enable;
502 enum hal_extradata_id index;
503};
504
505struct hal_enable_picture {
506 u32 picture_type;
507};
508
509struct hal_multi_stream {
510 enum hal_buffer buffer_type;
511 u32 enable;
512 u32 width;
513 u32 height;
514};
515
516struct hal_display_picture_buffer_count {
517 u32 enable;
518 u32 count;
519};
520
521struct hal_mb_error_map {
522 u32 error_map_size;
523 u8 rg_error_map[1];
524};
525
526struct hal_request_iframe {
527 u32 enable;
528};
529
530struct hal_bitrate {
531 u32 bit_rate;
532 u32 layer_id;
533};
534
535struct hal_profile_level {
536 u32 profile;
537 u32 level;
538};
539
540struct hal_profile_level_supported {
541 u32 profile_count;
542 struct hal_profile_level profile_level[MAX_PROFILE_COUNT];
543};
544
545enum hal_h264_entropy {
546 HAL_H264_ENTROPY_CAVLC = 1,
547 HAL_H264_ENTROPY_CABAC = 2,
548 HAL_UNUSED_ENTROPY = 0x10000000,
549};
550
551enum hal_h264_cabac_model {
552 HAL_H264_CABAC_MODEL_0 = 1,
553 HAL_H264_CABAC_MODEL_1 = 2,
554 HAL_H264_CABAC_MODEL_2 = 4,
555 HAL_UNUSED_CABAC = 0x10000000,
556};
557
558struct hal_h264_entropy_control {
559 enum hal_h264_entropy entropy_mode;
560 enum hal_h264_cabac_model cabac_model;
561};
562
563enum hal_rate_control {
564 HAL_RATE_CONTROL_OFF,
565 HAL_RATE_CONTROL_VBR_VFR,
566 HAL_RATE_CONTROL_VBR_CFR,
567 HAL_RATE_CONTROL_CBR_VFR,
568 HAL_RATE_CONTROL_CBR_CFR,
569 HAL_RATE_CONTROL_MBR_CFR,
570 HAL_RATE_CONTROL_MBR_VFR,
571 HAL_UNUSED_RC = 0x10000000,
572};
573
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800574enum hal_h264_db_mode {
575 HAL_H264_DB_MODE_DISABLE,
576 HAL_H264_DB_MODE_SKIP_SLICE_BOUNDARY,
577 HAL_H264_DB_MODE_ALL_BOUNDARY,
578 HAL_UNUSED_H264_DB = 0x10000000,
579};
580
581struct hal_h264_db_control {
582 enum hal_h264_db_mode mode;
583 int slice_alpha_offset;
584 int slice_beta_offset;
585};
586
587struct hal_temporal_spatial_tradeoff {
588 u32 ts_factor;
589};
590
591struct hal_quantization {
592 u32 qpi;
593 u32 qpp;
594 u32 qpb;
595 u32 layer_id;
596};
597
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800598struct hal_quantization_range {
Praneeth Paladugu7fbd2792017-01-27 13:39:03 -0800599 u32 qpi_min;
600 u32 qpp_min;
601 u32 qpb_min;
602 u32 qpi_max;
603 u32 qpp_max;
604 u32 qpb_max;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800605 u32 layer_id;
606};
607
608struct hal_intra_period {
609 u32 pframes;
610 u32 bframes;
611};
612
613struct hal_idr_period {
614 u32 idr_period;
615};
616
617enum hal_rotate {
618 HAL_ROTATE_NONE,
619 HAL_ROTATE_90,
620 HAL_ROTATE_180,
621 HAL_ROTATE_270,
622 HAL_UNUSED_ROTATE = 0x10000000,
623};
624
625enum hal_flip {
626 HAL_FLIP_NONE,
627 HAL_FLIP_HORIZONTAL,
628 HAL_FLIP_VERTICAL,
629 HAL_UNUSED_FLIP = 0x10000000,
630};
631
632struct hal_operations {
633 enum hal_rotate rotate;
634 enum hal_flip flip;
635};
636
637enum hal_intra_refresh_mode {
638 HAL_INTRA_REFRESH_NONE,
639 HAL_INTRA_REFRESH_CYCLIC,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800640 HAL_INTRA_REFRESH_RANDOM,
641 HAL_UNUSED_INTRA = 0x10000000,
642};
643
644struct hal_intra_refresh {
645 enum hal_intra_refresh_mode mode;
Saurabh Kothawadeabed16c2017-03-22 17:06:40 -0700646 u32 ir_mbs;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800647};
648
649enum hal_multi_slice {
650 HAL_MULTI_SLICE_OFF,
651 HAL_MULTI_SLICE_BY_MB_COUNT,
652 HAL_MULTI_SLICE_BY_BYTE_COUNT,
653 HAL_MULTI_SLICE_GOB,
654 HAL_UNUSED_SLICE = 0x10000000,
655};
656
657struct hal_multi_slice_control {
658 enum hal_multi_slice multi_slice;
659 u32 slice_size;
660};
661
662struct hal_debug_config {
663 u32 debug_config;
664};
665
666struct hal_buffer_requirements {
667 enum hal_buffer buffer_type;
668 u32 buffer_size;
669 u32 buffer_region_size;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800670 u32 buffer_count_min;
Praneeth Paladugudefea4e2017-02-09 23:44:08 -0800671 u32 buffer_count_min_host;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800672 u32 buffer_count_actual;
673 u32 contiguous;
674 u32 buffer_alignment;
675};
676
677enum hal_priority {/* Priority increases with number */
678 HAL_PRIORITY_LOW = 10,
679 HAL_PRIOIRTY_MEDIUM = 20,
680 HAL_PRIORITY_HIGH = 30,
681 HAL_UNUSED_PRIORITY = 0x10000000,
682};
683
684struct hal_batch_info {
685 u32 input_batch_count;
686 u32 output_batch_count;
687};
688
689struct hal_metadata_pass_through {
690 u32 enable;
691 u32 size;
692};
693
694struct hal_uncompressed_format_supported {
695 enum hal_buffer buffer_type;
696 u32 format_entries;
697 u32 rg_format_info[1];
698};
699
700enum hal_interlace_format {
701 HAL_INTERLACE_FRAME_PROGRESSIVE = 0x01,
702 HAL_INTERLACE_INTERLEAVE_FRAME_TOPFIELDFIRST = 0x02,
703 HAL_INTERLACE_INTERLEAVE_FRAME_BOTTOMFIELDFIRST = 0x04,
704 HAL_INTERLACE_FRAME_TOPFIELDFIRST = 0x08,
705 HAL_INTERLACE_FRAME_BOTTOMFIELDFIRST = 0x10,
706 HAL_UNUSED_INTERLACE = 0x10000000,
707};
708
709struct hal_interlace_format_supported {
710 enum hal_buffer buffer_type;
711 enum hal_interlace_format format;
712};
713
714enum hal_chroma_site {
715 HAL_CHROMA_SITE_0,
716 HAL_CHROMA_SITE_1,
717 HAL_UNUSED_CHROMA = 0x10000000,
718};
719
720struct hal_properties_supported {
721 u32 num_properties;
722 u32 rg_properties[1];
723};
724
725enum hal_capability {
726 HAL_CAPABILITY_FRAME_WIDTH = 0x1,
727 HAL_CAPABILITY_FRAME_HEIGHT,
728 HAL_CAPABILITY_MBS_PER_FRAME,
729 HAL_CAPABILITY_MBS_PER_SECOND,
730 HAL_CAPABILITY_FRAMERATE,
731 HAL_CAPABILITY_SCALE_X,
732 HAL_CAPABILITY_SCALE_Y,
733 HAL_CAPABILITY_BITRATE,
734 HAL_CAPABILITY_BFRAME,
735 HAL_CAPABILITY_PEAKBITRATE,
736 HAL_CAPABILITY_HIER_P_NUM_ENH_LAYERS,
737 HAL_CAPABILITY_ENC_LTR_COUNT,
738 HAL_CAPABILITY_SECURE_OUTPUT2_THRESHOLD,
739 HAL_CAPABILITY_HIER_B_NUM_ENH_LAYERS,
740 HAL_CAPABILITY_LCU_SIZE,
741 HAL_CAPABILITY_HIER_P_HYBRID_NUM_ENH_LAYERS,
742 HAL_CAPABILITY_MBS_PER_SECOND_POWER_SAVE,
Praneeth Paladugu520c7592017-01-26 13:53:14 -0800743 HAL_CAPABILITY_EXTRADATA,
744 HAL_CAPABILITY_PROFILE,
745 HAL_CAPABILITY_LEVEL,
746 HAL_CAPABILITY_I_FRAME_QP,
747 HAL_CAPABILITY_P_FRAME_QP,
748 HAL_CAPABILITY_B_FRAME_QP,
749 HAL_CAPABILITY_RATE_CONTROL_MODES,
750 HAL_CAPABILITY_BLUR_WIDTH,
751 HAL_CAPABILITY_BLUR_HEIGHT,
752 HAL_CAPABILITY_SLICE_DELIVERY_MODES,
753 HAL_CAPABILITY_SLICE_BYTE,
754 HAL_CAPABILITY_SLICE_MB,
755 HAL_CAPABILITY_SECURE,
756 HAL_CAPABILITY_MAX_NUM_B_FRAMES,
757 HAL_CAPABILITY_MAX_VIDEOCORES,
758 HAL_CAPABILITY_MAX_WORKMODES,
759 HAL_CAPABILITY_UBWC_CR_STATS,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800760 HAL_UNUSED_CAPABILITY = 0x10000000,
761};
762
763struct hal_capability_supported {
764 enum hal_capability capability_type;
765 u32 min;
766 u32 max;
767 u32 step_size;
768};
769
770struct hal_capability_supported_info {
771 u32 num_capabilities;
772 struct hal_capability_supported rg_data[1];
773};
774
775struct hal_nal_stream_format_supported {
776 u32 nal_stream_format_supported;
777};
778
779struct hal_nal_stream_format_select {
780 u32 nal_stream_format_select;
781};
782
783struct hal_multi_view_format {
784 u32 views;
785 u32 rg_view_order[1];
786};
787
788enum hal_buffer_layout_type {
789 HAL_BUFFER_LAYOUT_TOP_BOTTOM,
790 HAL_BUFFER_LAYOUT_SEQ,
791 HAL_UNUSED_BUFFER_LAYOUT = 0x10000000,
792};
793
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800794struct hal_aspect_ratio {
795 u32 aspect_width;
796 u32 aspect_height;
797};
798
799struct hal_codec_supported {
800 u32 decoder_codec_supported;
801 u32 encoder_codec_supported;
802};
803
804struct hal_multi_view_select {
805 u32 view_index;
806};
807
808struct hal_timestamp_scale {
809 u32 time_stamp_scale;
810};
811
812
813struct hal_h264_vui_timing_info {
814 u32 enable;
815 u32 fixed_frame_rate;
816 u32 time_scale;
817};
818
819struct hal_h264_vui_bitstream_restrc {
820 u32 enable;
821};
822
823struct hal_preserve_text_quality {
824 u32 enable;
825};
826
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800827struct hal_vpe_color_space_conversion {
828 u32 csc_matrix[HAL_MAX_MATRIX_COEFFS];
829 u32 csc_bias[HAL_MAX_BIAS_COEFFS];
830 u32 csc_limit[HAL_MAX_LIMIT_COEFFS];
831};
832
833struct hal_video_signal_info {
834 u32 color_space;
835 u32 transfer_chars;
836 u32 matrix_coeffs;
837 bool full_range;
838};
839
840enum hal_iframesize_type {
841 HAL_IFRAMESIZE_TYPE_DEFAULT,
842 HAL_IFRAMESIZE_TYPE_MEDIUM,
843 HAL_IFRAMESIZE_TYPE_HUGE,
844 HAL_IFRAMESIZE_TYPE_UNLIMITED,
845};
846
847enum vidc_resource_id {
848 VIDC_RESOURCE_NONE,
849 VIDC_RESOURCE_OCMEM,
850 VIDC_RESOURCE_VMEM,
851 VIDC_UNUSED_RESOURCE = 0x10000000,
852};
853
854struct vidc_resource_hdr {
855 enum vidc_resource_id resource_id;
856 void *resource_handle;
857 u32 size;
858};
859
860struct vidc_buffer_addr_info {
861 enum hal_buffer buffer_type;
862 u32 buffer_size;
863 u32 num_buffers;
864 ion_phys_addr_t align_device_addr;
865 ion_phys_addr_t extradata_addr;
866 u32 extradata_size;
867 u32 response_required;
868};
869
870/* Needs to be exactly the same as hfi_buffer_info */
871struct hal_buffer_info {
872 u32 buffer_addr;
873 u32 extra_data_addr;
874};
875
876struct vidc_frame_plane_config {
877 u32 left;
878 u32 top;
879 u32 width;
880 u32 height;
881 u32 stride;
882 u32 scan_lines;
883};
884
885struct vidc_uncompressed_frame_config {
886 struct vidc_frame_plane_config luma_plane;
887 struct vidc_frame_plane_config chroma_plane;
888};
889
890struct vidc_frame_data {
891 enum hal_buffer buffer_type;
892 ion_phys_addr_t device_addr;
893 ion_phys_addr_t extradata_addr;
894 int64_t timestamp;
895 u32 flags;
896 u32 offset;
897 u32 alloc_len;
898 u32 filled_len;
899 u32 mark_target;
900 u32 mark_data;
901 u32 clnt_data;
902 u32 extradata_size;
903};
904
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800905struct hal_fw_info {
906 char version[VENUS_VERSION_LENGTH];
907 phys_addr_t base_addr;
908 int register_base;
909 int register_size;
910 int irq;
911};
912
913enum hal_flush {
914 HAL_FLUSH_INPUT,
915 HAL_FLUSH_OUTPUT,
916 HAL_FLUSH_ALL,
917 HAL_UNUSED_FLUSH = 0x10000000,
918};
919
920enum hal_event_type {
921 HAL_EVENT_SEQ_CHANGED_SUFFICIENT_RESOURCES,
922 HAL_EVENT_SEQ_CHANGED_INSUFFICIENT_RESOURCES,
923 HAL_EVENT_RELEASE_BUFFER_REFERENCE,
924 HAL_UNUSED_SEQCHG = 0x10000000,
925};
926
927enum buffer_mode_type {
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800928 HAL_BUFFER_MODE_DYNAMIC = 0x100,
Chinmay Sawarkar2de3f772017-02-07 12:03:44 -0800929 HAL_BUFFER_MODE_STATIC = 0x001,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800930};
931
932struct hal_buffer_alloc_mode {
933 enum hal_buffer buffer_type;
934 enum buffer_mode_type buffer_mode;
935};
936
937enum ltr_mode {
938 HAL_LTR_MODE_DISABLE,
939 HAL_LTR_MODE_MANUAL,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800940};
941
942struct hal_ltr_mode {
943 enum ltr_mode mode;
944 u32 count;
945 u32 trust_mode;
946};
947
948struct hal_ltr_use {
949 u32 ref_ltr;
950 u32 use_constraint;
951 u32 frames;
952};
953
954struct hal_ltr_mark {
955 u32 mark_frame;
956};
957
958enum hal_perf_mode {
959 HAL_PERF_MODE_POWER_SAVE,
960 HAL_PERF_MODE_POWER_MAX_QUALITY,
961};
962
963struct hal_hybrid_hierp {
964 u32 layers;
965};
966
967struct hal_scs_threshold {
968 u32 threshold_value;
969};
970
971struct buffer_requirements {
972 struct hal_buffer_requirements buffer[HAL_BUFFER_MAX];
973};
974
975union hal_get_property {
976 struct hal_frame_rate frame_rate;
977 struct hal_uncompressed_format_select format_select;
978 struct hal_uncompressed_plane_actual plane_actual;
979 struct hal_uncompressed_plane_actual_info plane_actual_info;
980 struct hal_uncompressed_plane_constraints plane_constraints;
981 struct hal_uncompressed_plane_actual_constraints_info
982 plane_constraints_info;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800983 struct hal_frame_size frame_size;
984 struct hal_enable enable;
985 struct hal_buffer_count_actual buffer_count_actual;
986 struct hal_extradata_enable extradata_enable;
987 struct hal_enable_picture enable_picture;
988 struct hal_multi_stream multi_stream;
989 struct hal_display_picture_buffer_count display_picture_buffer_count;
990 struct hal_mb_error_map mb_error_map;
991 struct hal_request_iframe request_iframe;
992 struct hal_bitrate bitrate;
993 struct hal_profile_level profile_level;
994 struct hal_profile_level_supported profile_level_supported;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800995 struct hal_h264_db_control h264_db_control;
996 struct hal_temporal_spatial_tradeoff temporal_spatial_tradeoff;
997 struct hal_quantization quantization;
998 struct hal_quantization_range quantization_range;
999 struct hal_intra_period intra_period;
1000 struct hal_idr_period idr_period;
1001 struct hal_operations operations;
1002 struct hal_intra_refresh intra_refresh;
1003 struct hal_multi_slice_control multi_slice_control;
1004 struct hal_debug_config debug_config;
1005 struct hal_batch_info batch_info;
1006 struct hal_metadata_pass_through metadata_pass_through;
1007 struct hal_uncompressed_format_supported uncompressed_format_supported;
1008 struct hal_interlace_format_supported interlace_format_supported;
1009 struct hal_properties_supported properties_supported;
1010 struct hal_capability_supported capability_supported;
1011 struct hal_capability_supported_info capability_supported_info;
1012 struct hal_nal_stream_format_supported nal_stream_format_supported;
1013 struct hal_nal_stream_format_select nal_stream_format_select;
1014 struct hal_multi_view_format multi_view_format;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001015 struct hal_codec_supported codec_supported;
1016 struct hal_multi_view_select multi_view_select;
1017 struct hal_timestamp_scale timestamp_scale;
1018 struct hal_h264_vui_timing_info h264_vui_timing_info;
1019 struct hal_h264_vui_bitstream_restrc h264_vui_bitstream_restrc;
1020 struct hal_preserve_text_quality preserve_text_quality;
1021 struct hal_buffer_info buffer_info;
1022 struct hal_buffer_alloc_mode buffer_alloc_mode;
1023 struct buffer_requirements buf_req;
1024 enum hal_h264_entropy h264_entropy;
1025};
1026
1027/* HAL Response */
1028#define IS_HAL_SYS_CMD(cmd) ((cmd) >= HAL_SYS_INIT_DONE && \
1029 (cmd) <= HAL_SYS_ERROR)
1030#define IS_HAL_SESSION_CMD(cmd) ((cmd) >= HAL_SESSION_EVENT_CHANGE && \
1031 (cmd) <= HAL_SESSION_ERROR)
1032enum hal_command_response {
1033 /* SYSTEM COMMANDS_DONE*/
1034 HAL_SYS_INIT_DONE,
1035 HAL_SYS_SET_RESOURCE_DONE,
1036 HAL_SYS_RELEASE_RESOURCE_DONE,
1037 HAL_SYS_PING_ACK_DONE,
1038 HAL_SYS_PC_PREP_DONE,
1039 HAL_SYS_IDLE,
1040 HAL_SYS_DEBUG,
1041 HAL_SYS_WATCHDOG_TIMEOUT,
1042 HAL_SYS_ERROR,
1043 /* SESSION COMMANDS_DONE */
1044 HAL_SESSION_EVENT_CHANGE,
1045 HAL_SESSION_LOAD_RESOURCE_DONE,
1046 HAL_SESSION_INIT_DONE,
1047 HAL_SESSION_END_DONE,
1048 HAL_SESSION_ABORT_DONE,
1049 HAL_SESSION_START_DONE,
1050 HAL_SESSION_STOP_DONE,
1051 HAL_SESSION_ETB_DONE,
1052 HAL_SESSION_FTB_DONE,
1053 HAL_SESSION_FLUSH_DONE,
1054 HAL_SESSION_SUSPEND_DONE,
1055 HAL_SESSION_RESUME_DONE,
1056 HAL_SESSION_SET_PROP_DONE,
1057 HAL_SESSION_GET_PROP_DONE,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001058 HAL_SESSION_RELEASE_BUFFER_DONE,
1059 HAL_SESSION_RELEASE_RESOURCE_DONE,
1060 HAL_SESSION_PROPERTY_INFO,
1061 HAL_SESSION_ERROR,
1062 HAL_RESPONSE_UNUSED = 0x10000000,
1063};
1064
1065struct vidc_hal_ebd {
1066 u32 timestamp_hi;
1067 u32 timestamp_lo;
1068 u32 flags;
1069 enum vidc_status status;
1070 u32 mark_target;
1071 u32 mark_data;
1072 u32 stats;
1073 u32 offset;
1074 u32 alloc_len;
1075 u32 filled_len;
1076 enum hal_picture picture_type;
1077 ion_phys_addr_t packet_buffer;
1078 ion_phys_addr_t extra_data_buffer;
1079};
1080
1081struct vidc_hal_fbd {
1082 u32 stream_id;
1083 u32 view_id;
1084 u32 timestamp_hi;
1085 u32 timestamp_lo;
1086 u32 flags1;
1087 u32 mark_target;
1088 u32 mark_data;
1089 u32 stats;
1090 u32 alloc_len1;
1091 u32 filled_len1;
1092 u32 offset1;
1093 u32 frame_width;
1094 u32 frame_height;
1095 u32 start_x_coord;
1096 u32 start_y_coord;
1097 u32 input_tag;
1098 u32 input_tag1;
1099 enum hal_picture picture_type;
1100 ion_phys_addr_t packet_buffer1;
1101 ion_phys_addr_t extra_data_buffer;
1102 u32 flags2;
1103 u32 alloc_len2;
1104 u32 filled_len2;
1105 u32 offset2;
1106 ion_phys_addr_t packet_buffer2;
1107 u32 flags3;
1108 u32 alloc_len3;
1109 u32 filled_len3;
1110 u32 offset3;
1111 ion_phys_addr_t packet_buffer3;
1112 enum hal_buffer buffer_type;
1113};
1114
1115struct msm_vidc_capability {
1116 enum hal_domain domain;
1117 enum hal_video_codec codec;
1118 struct hal_capability_supported width;
1119 struct hal_capability_supported height;
1120 struct hal_capability_supported mbs_per_frame;
1121 struct hal_capability_supported mbs_per_sec;
1122 struct hal_capability_supported frame_rate;
1123 struct hal_capability_supported scale_x;
1124 struct hal_capability_supported scale_y;
1125 struct hal_capability_supported bitrate;
1126 struct hal_capability_supported bframe;
1127 struct hal_capability_supported peakbitrate;
1128 struct hal_capability_supported hier_p;
1129 struct hal_capability_supported ltr_count;
1130 struct hal_capability_supported secure_output2_threshold;
1131 struct hal_capability_supported hier_b;
1132 struct hal_capability_supported lcu_size;
1133 struct hal_capability_supported hier_p_hybrid;
1134 struct hal_capability_supported mbs_per_sec_power_save;
Praneeth Paladugu520c7592017-01-26 13:53:14 -08001135 struct hal_capability_supported extradata;
1136 struct hal_capability_supported profile;
1137 struct hal_capability_supported level;
1138 struct hal_capability_supported i_qp;
1139 struct hal_capability_supported p_qp;
1140 struct hal_capability_supported b_qp;
1141 struct hal_capability_supported rc_modes;
1142 struct hal_capability_supported blur_width;
1143 struct hal_capability_supported blur_height;
1144 struct hal_capability_supported slice_delivery_mode;
1145 struct hal_capability_supported slice_bytes;
1146 struct hal_capability_supported slice_mbs;
1147 struct hal_capability_supported secure;
1148 struct hal_capability_supported max_num_b_frames;
1149 struct hal_capability_supported max_video_cores;
1150 struct hal_capability_supported max_work_modes;
1151 struct hal_capability_supported ubwc_cr_stats;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001152 struct hal_profile_level_supported profile_level;
1153 struct hal_uncompressed_format_supported uncomp_format;
1154 struct hal_interlace_format_supported HAL_format;
1155 struct hal_nal_stream_format_supported nal_stream_format;
1156 struct hal_intra_refresh intra_refresh;
1157 enum buffer_mode_type alloc_mode_out;
1158 enum buffer_mode_type alloc_mode_in;
1159 u32 pixelprocess_capabilities;
1160};
1161
1162struct vidc_hal_sys_init_done {
1163 u32 dec_codec_supported;
1164 u32 enc_codec_supported;
1165 u32 codec_count;
1166 struct msm_vidc_capability *capabilities;
1167 u32 max_sessions_supported;
1168};
1169
1170struct vidc_hal_session_init_done {
1171 struct msm_vidc_capability capability;
1172};
1173
1174struct msm_vidc_cb_cmd_done {
1175 u32 device_id;
1176 void *session_id;
1177 enum vidc_status status;
1178 u32 size;
1179 union {
1180 struct vidc_resource_hdr resource_hdr;
1181 struct vidc_buffer_addr_info buffer_addr_info;
1182 struct vidc_frame_plane_config frame_plane_config;
1183 struct vidc_uncompressed_frame_config uncompressed_frame_config;
1184 struct vidc_frame_data frame_data;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001185 struct vidc_hal_ebd ebd;
1186 struct vidc_hal_fbd fbd;
1187 struct vidc_hal_sys_init_done sys_init_done;
1188 struct vidc_hal_session_init_done session_init_done;
1189 struct hal_buffer_info buffer_info;
1190 union hal_get_property property;
1191 enum hal_flush flush_type;
1192 } data;
1193};
1194
1195struct msm_vidc_cb_event {
1196 u32 device_id;
1197 void *session_id;
1198 enum vidc_status status;
1199 u32 height;
1200 u32 width;
1201 enum msm_vidc_pixel_depth bit_depth;
1202 u32 hal_event_type;
1203 ion_phys_addr_t packet_buffer;
1204 ion_phys_addr_t extra_data_buffer;
1205 u32 pic_struct;
1206 u32 colour_space;
Chinmay Sawarkarb3c6ccb2017-02-23 18:01:32 -08001207 u32 profile;
1208 u32 level;
1209 u32 entropy_mode;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001210};
1211
1212struct msm_vidc_cb_data_done {
1213 u32 device_id;
1214 void *session_id;
1215 enum vidc_status status;
1216 u32 size;
1217 u32 clnt_data;
1218 union {
1219 struct vidc_hal_ebd input_done;
1220 struct vidc_hal_fbd output_done;
1221 };
1222};
1223
1224struct msm_vidc_cb_info {
1225 enum hal_command_response response_type;
1226 union {
1227 struct msm_vidc_cb_cmd_done cmd;
1228 struct msm_vidc_cb_event event;
1229 struct msm_vidc_cb_data_done data;
1230 } response;
1231};
1232
1233enum msm_vidc_hfi_type {
1234 VIDC_HFI_VENUS,
1235};
1236
1237enum msm_vidc_thermal_level {
1238 VIDC_THERMAL_NORMAL = 0,
1239 VIDC_THERMAL_LOW,
1240 VIDC_THERMAL_HIGH,
1241 VIDC_THERMAL_CRITICAL
1242};
1243
1244enum vidc_vote_data_session {
1245 VIDC_BUS_VOTE_DATA_SESSION_INVALID = 0,
1246 /*
1247 * No declarations exist. Values generated by VIDC_VOTE_DATA_SESSION_VAL
1248 * describe the enumerations e.g.:
1249 *
1250 * enum vidc_bus_vote_data_session_type h264_decoder_session =
1251 * VIDC_VOTE_DATA_SESSION_VAL(HAL_VIDEO_CODEC_H264,
1252 * HAL_VIDEO_DOMAIN_DECODER);
1253 */
1254};
1255
1256/*
1257 * Careful modifying VIDC_VOTE_DATA_SESSION_VAL().
1258 *
1259 * This macro assigns two bits to each codec: the lower bit denoting the codec
1260 * type, and the higher bit denoting session type.
1261 */
1262static inline enum vidc_vote_data_session VIDC_VOTE_DATA_SESSION_VAL(
1263 enum hal_video_codec c, enum hal_domain d) {
1264 if (d != HAL_VIDEO_DOMAIN_ENCODER && d != HAL_VIDEO_DOMAIN_DECODER)
1265 return VIDC_BUS_VOTE_DATA_SESSION_INVALID;
1266
1267 return (1 << ilog2(c) * 2) | ((d - 1) << (ilog2(c) * 2 + 1));
1268}
1269
1270struct msm_vidc_gov_data {
1271 struct vidc_bus_vote_data *data;
1272 u32 data_count;
1273 int imem_size;
1274};
1275
1276enum msm_vidc_power_mode {
1277 VIDC_POWER_NORMAL = 0,
1278 VIDC_POWER_LOW,
1279 VIDC_POWER_TURBO
1280};
1281
1282struct vidc_bus_vote_data {
1283 enum hal_domain domain;
1284 enum hal_video_codec codec;
1285 enum hal_uncompressed_format color_formats[2];
1286 int num_formats; /* 1 = DPB-OPB unified; 2 = split */
1287 int height, width, fps;
1288 enum msm_vidc_power_mode power_mode;
1289 struct imem_ab_table *imem_ab_tbl;
1290 u32 imem_ab_tbl_size;
1291 unsigned long core_freq;
1292};
1293
1294struct vidc_clk_scale_data {
1295 enum vidc_vote_data_session session[VIDC_MAX_SESSIONS];
1296 enum msm_vidc_power_mode power_mode[VIDC_MAX_SESSIONS];
1297 u32 load[VIDC_MAX_SESSIONS];
1298 int num_sessions;
1299};
1300
1301struct hal_index_extradata_input_crop_payload {
1302 u32 size;
1303 u32 version;
1304 u32 port_index;
1305 u32 left;
1306 u32 top;
1307 u32 width;
1308 u32 height;
1309};
1310
1311struct hal_cmd_sys_get_property_packet {
1312 u32 size;
1313 u32 packet_type;
1314 u32 num_properties;
1315 u32 rg_property_data[1];
1316};
1317
1318#define call_hfi_op(q, op, args...) \
1319 (((q) && (q)->op) ? ((q)->op(args)) : 0)
1320
1321struct hfi_device {
1322 void *hfi_device_data;
1323
1324 /*Add function pointers for all the hfi functions below*/
1325 int (*core_init)(void *device);
1326 int (*core_release)(void *device);
1327 int (*core_ping)(void *device);
1328 int (*core_trigger_ssr)(void *device, enum hal_ssr_trigger_type);
1329 int (*session_init)(void *device, void *session_id,
1330 enum hal_domain session_type, enum hal_video_codec codec_type,
1331 void **new_session);
1332 int (*session_end)(void *session);
1333 int (*session_abort)(void *session);
1334 int (*session_set_buffers)(void *sess,
1335 struct vidc_buffer_addr_info *buffer_info);
1336 int (*session_release_buffers)(void *sess,
1337 struct vidc_buffer_addr_info *buffer_info);
1338 int (*session_load_res)(void *sess);
1339 int (*session_release_res)(void *sess);
1340 int (*session_start)(void *sess);
1341 int (*session_continue)(void *sess);
1342 int (*session_stop)(void *sess);
1343 int (*session_etb)(void *sess, struct vidc_frame_data *input_frame);
1344 int (*session_ftb)(void *sess, struct vidc_frame_data *output_frame);
1345 int (*session_process_batch)(void *sess,
1346 int num_etbs, struct vidc_frame_data etbs[],
1347 int num_ftbs, struct vidc_frame_data ftbs[]);
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001348 int (*session_get_buf_req)(void *sess);
1349 int (*session_flush)(void *sess, enum hal_flush flush_mode);
1350 int (*session_set_property)(void *sess, enum hal_property ptype,
1351 void *pdata);
1352 int (*session_get_property)(void *sess, enum hal_property ptype);
Praneeth Paladugub71968b2015-08-19 20:47:57 -07001353 int (*scale_clocks)(void *dev, u32 freq);
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001354 int (*vote_bus)(void *dev, struct vidc_bus_vote_data *data,
1355 int num_data);
1356 int (*get_fw_info)(void *dev, struct hal_fw_info *fw_info);
1357 int (*session_clean)(void *sess);
1358 int (*get_core_capabilities)(void *dev);
1359 int (*suspend)(void *dev);
1360 int (*flush_debug_queue)(void *dev);
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001361 enum hal_default_properties (*get_default_properties)(void *dev);
1362};
1363
1364typedef void (*hfi_cmd_response_callback) (enum hal_command_response cmd,
1365 void *data);
1366typedef void (*msm_vidc_callback) (u32 response, void *callback);
1367
1368struct hfi_device *vidc_hfi_initialize(enum msm_vidc_hfi_type hfi_type,
1369 u32 device_id, struct msm_vidc_platform_resources *res,
1370 hfi_cmd_response_callback callback);
1371void vidc_hfi_deinitialize(enum msm_vidc_hfi_type hfi_type,
1372 struct hfi_device *hdev);
1373u32 vidc_get_hfi_domain(enum hal_domain hal_domain);
1374u32 vidc_get_hfi_codec(enum hal_video_codec hal_codec);
1375enum hal_domain vidc_get_hal_domain(u32 hfi_domain);
1376enum hal_video_codec vidc_get_hal_codec(u32 hfi_codec);
1377
1378#endif /*__VIDC_HFI_API_H__ */