blob: 2260b552f8c9f778210a1e23cfad198cc21cea2a [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>
Maheshwar Ajjac6407c02017-06-09 18:53:20 -070020#include <linux/errno.h>
21#include <linux/hash.h>
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -080022#include <media/msm_vidc.h>
23#include "msm_vidc_resources.h"
24
Chinmay Sawarkarcbd3f592017-04-10 15:42:30 -070025#define CONTAINS(__a, __sz, __t) (\
26 (__t >= __a) && \
27 (__t < __a + __sz) \
28)
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -080029
Chinmay Sawarkarcbd3f592017-04-10 15:42:30 -070030#define OVERLAPS(__t, __tsz, __a, __asz) (\
31 (__t <= __a) && \
32 (__t + __tsz >= __a + __asz) \
33)
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -080034
35#define HAL_BUFFERFLAG_EOS 0x00000001
36#define HAL_BUFFERFLAG_STARTTIME 0x00000002
37#define HAL_BUFFERFLAG_DECODEONLY 0x00000004
38#define HAL_BUFFERFLAG_DATACORRUPT 0x00000008
39#define HAL_BUFFERFLAG_ENDOFFRAME 0x00000010
40#define HAL_BUFFERFLAG_SYNCFRAME 0x00000020
41#define HAL_BUFFERFLAG_EXTRADATA 0x00000040
42#define HAL_BUFFERFLAG_CODECCONFIG 0x00000080
43#define HAL_BUFFERFLAG_TIMESTAMPINVALID 0x00000100
44#define HAL_BUFFERFLAG_READONLY 0x00000200
45#define HAL_BUFFERFLAG_ENDOFSUBFRAME 0x00000400
46#define HAL_BUFFERFLAG_EOSEQ 0x00200000
47#define HAL_BUFFERFLAG_MBAFF 0x08000000
48#define HAL_BUFFERFLAG_YUV_601_709_CSC_CLAMP 0x10000000
49#define HAL_BUFFERFLAG_DROP_FRAME 0x20000000
50#define HAL_BUFFERFLAG_TS_DISCONTINUITY 0x40000000
51#define HAL_BUFFERFLAG_TS_ERROR 0x80000000
52
53
54
55#define HAL_DEBUG_MSG_LOW 0x00000001
56#define HAL_DEBUG_MSG_MEDIUM 0x00000002
57#define HAL_DEBUG_MSG_HIGH 0x00000004
58#define HAL_DEBUG_MSG_ERROR 0x00000008
59#define HAL_DEBUG_MSG_FATAL 0x00000010
60#define MAX_PROFILE_COUNT 16
61
62#define HAL_MAX_MATRIX_COEFFS 9
63#define HAL_MAX_BIAS_COEFFS 3
64#define HAL_MAX_LIMIT_COEFFS 6
65#define VENUS_VERSION_LENGTH 128
66
67/* 16 encoder and 16 decoder sessions */
68#define VIDC_MAX_SESSIONS 32
69
70enum vidc_status {
71 VIDC_ERR_NONE = 0x0,
72 VIDC_ERR_FAIL = 0x80000000,
73 VIDC_ERR_ALLOC_FAIL,
74 VIDC_ERR_ILLEGAL_OP,
75 VIDC_ERR_BAD_PARAM,
76 VIDC_ERR_BAD_HANDLE,
77 VIDC_ERR_NOT_SUPPORTED,
78 VIDC_ERR_BAD_STATE,
79 VIDC_ERR_MAX_CLIENTS,
80 VIDC_ERR_IFRAME_EXPECTED,
81 VIDC_ERR_HW_FATAL,
82 VIDC_ERR_BITSTREAM_ERR,
83 VIDC_ERR_INDEX_NOMORE,
84 VIDC_ERR_SEQHDR_PARSE_FAIL,
85 VIDC_ERR_INSUFFICIENT_BUFFER,
86 VIDC_ERR_BAD_POWER_STATE,
87 VIDC_ERR_NO_VALID_SESSION,
88 VIDC_ERR_TIMEOUT,
89 VIDC_ERR_CMDQFULL,
90 VIDC_ERR_START_CODE_NOT_FOUND,
91 VIDC_ERR_CLIENT_PRESENT = 0x90000001,
92 VIDC_ERR_CLIENT_FATAL,
93 VIDC_ERR_CMD_QUEUE_FULL,
94 VIDC_ERR_UNUSED = 0x10000000
95};
96
97enum hal_extradata_id {
98 HAL_EXTRADATA_NONE,
99 HAL_EXTRADATA_MB_QUANTIZATION,
100 HAL_EXTRADATA_INTERLACE_VIDEO,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800101 HAL_EXTRADATA_TIMESTAMP,
102 HAL_EXTRADATA_S3D_FRAME_PACKING,
103 HAL_EXTRADATA_FRAME_RATE,
104 HAL_EXTRADATA_PANSCAN_WINDOW,
105 HAL_EXTRADATA_RECOVERY_POINT_SEI,
106 HAL_EXTRADATA_MULTISLICE_INFO,
107 HAL_EXTRADATA_INDEX,
108 HAL_EXTRADATA_NUM_CONCEALED_MB,
109 HAL_EXTRADATA_METADATA_FILLER,
110 HAL_EXTRADATA_ASPECT_RATIO,
111 HAL_EXTRADATA_MPEG2_SEQDISP,
112 HAL_EXTRADATA_STREAM_USERDATA,
113 HAL_EXTRADATA_FRAME_QP,
114 HAL_EXTRADATA_FRAME_BITS_INFO,
115 HAL_EXTRADATA_INPUT_CROP,
116 HAL_EXTRADATA_DIGITAL_ZOOM,
117 HAL_EXTRADATA_LTR_INFO,
118 HAL_EXTRADATA_METADATA_MBI,
119 HAL_EXTRADATA_VQZIP_SEI,
120 HAL_EXTRADATA_YUV_STATS,
121 HAL_EXTRADATA_ROI_QP,
122 HAL_EXTRADATA_OUTPUT_CROP,
123 HAL_EXTRADATA_MASTERING_DISPLAY_COLOUR_SEI,
124 HAL_EXTRADATA_CONTENT_LIGHT_LEVEL_SEI,
125 HAL_EXTRADATA_PQ_INFO,
126 HAL_EXTRADATA_VUI_DISPLAY_INFO,
127 HAL_EXTRADATA_VPX_COLORSPACE,
Praneeth Paladugua51b2c42017-06-23 12:48:06 -0700128 HAL_EXTRADATA_UBWC_CR_STATS_INFO,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800129};
130
131enum hal_property {
132 HAL_CONFIG_FRAME_RATE = 0x04000001,
133 HAL_PARAM_UNCOMPRESSED_FORMAT_SELECT,
134 HAL_PARAM_UNCOMPRESSED_PLANE_ACTUAL_CONSTRAINTS_INFO,
135 HAL_PARAM_UNCOMPRESSED_PLANE_ACTUAL_INFO,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800136 HAL_PARAM_INDEX_EXTRADATA,
137 HAL_PARAM_FRAME_SIZE,
138 HAL_CONFIG_REALTIME,
139 HAL_PARAM_BUFFER_COUNT_ACTUAL,
140 HAL_PARAM_BUFFER_SIZE_MINIMUM,
141 HAL_PARAM_NAL_STREAM_FORMAT_SELECT,
142 HAL_PARAM_VDEC_OUTPUT_ORDER,
143 HAL_PARAM_VDEC_PICTURE_TYPE_DECODE,
144 HAL_PARAM_VDEC_OUTPUT2_KEEP_ASPECT_RATIO,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800145 HAL_PARAM_VDEC_MULTI_STREAM,
146 HAL_PARAM_VDEC_DISPLAY_PICTURE_BUFFER_COUNT,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800147 HAL_CONFIG_VDEC_MB_ERROR_MAP_REPORTING,
148 HAL_PARAM_VDEC_CONTINUE_DATA_TRANSFER,
149 HAL_CONFIG_VDEC_MB_ERROR_MAP,
150 HAL_CONFIG_VENC_REQUEST_IFRAME,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800151 HAL_CONFIG_VENC_TARGET_BITRATE,
152 HAL_PARAM_PROFILE_LEVEL_CURRENT,
153 HAL_PARAM_VENC_H264_ENTROPY_CONTROL,
154 HAL_PARAM_VENC_RATE_CONTROL,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800155 HAL_PARAM_VENC_H264_DEBLOCK_CONTROL,
156 HAL_PARAM_VENC_TEMPORAL_SPATIAL_TRADEOFF,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800157 HAL_PARAM_VENC_SESSION_QP_RANGE,
158 HAL_CONFIG_VENC_INTRA_PERIOD,
159 HAL_CONFIG_VENC_IDR_PERIOD,
Chinmay Sawarkar582c72a2017-05-24 14:29:12 -0700160 HAL_PARAM_VPE_ROTATION,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800161 HAL_PARAM_VENC_INTRA_REFRESH,
162 HAL_PARAM_VENC_MULTI_SLICE_CONTROL,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800163 HAL_SYS_DEBUG_CONFIG,
164 HAL_CONFIG_BUFFER_REQUIREMENTS,
165 HAL_CONFIG_PRIORITY,
166 HAL_CONFIG_BATCH_INFO,
167 HAL_PARAM_METADATA_PASS_THROUGH,
168 HAL_SYS_IDLE_INDICATOR,
169 HAL_PARAM_UNCOMPRESSED_FORMAT_SUPPORTED,
170 HAL_PARAM_INTERLACE_FORMAT_SUPPORTED,
171 HAL_PARAM_CHROMA_SITE,
172 HAL_PARAM_PROPERTIES_SUPPORTED,
173 HAL_PARAM_PROFILE_LEVEL_SUPPORTED,
174 HAL_PARAM_CAPABILITY_SUPPORTED,
175 HAL_PARAM_NAL_STREAM_FORMAT_SUPPORTED,
176 HAL_PARAM_MULTI_VIEW_FORMAT,
177 HAL_PARAM_MAX_SEQUENCE_HEADER_SIZE,
178 HAL_PARAM_CODEC_SUPPORTED,
179 HAL_PARAM_VDEC_MULTI_VIEW_SELECT,
180 HAL_PARAM_VDEC_MB_QUANTIZATION,
181 HAL_PARAM_VDEC_NUM_CONCEALED_MB,
182 HAL_PARAM_VDEC_H264_ENTROPY_SWITCHING,
183 HAL_PARAM_VENC_SLICE_DELIVERY_MODE,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800184 HAL_CONFIG_BUFFER_COUNT_ACTUAL,
185 HAL_CONFIG_VDEC_MULTI_STREAM,
186 HAL_PARAM_VENC_MULTI_SLICE_INFO,
187 HAL_CONFIG_VENC_TIMESTAMP_SCALE,
188 HAL_PARAM_VENC_SYNC_FRAME_SEQUENCE_HEADER,
189 HAL_PARAM_VDEC_SYNC_FRAME_DECODE,
190 HAL_PARAM_VENC_H264_ENTROPY_CABAC_MODEL,
191 HAL_CONFIG_VENC_MAX_BITRATE,
Chinmay Sawarkard0054622017-05-04 13:50:59 -0700192 HAL_PARAM_VENC_VUI_TIMING_INFO,
Umesh Pandey7fce7ee2017-03-13 17:59:48 -0700193 HAL_PARAM_VENC_GENERATE_AUDNAL,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800194 HAL_PARAM_BUFFER_ALLOC_MODE,
195 HAL_PARAM_VDEC_FRAME_ASSEMBLY,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800196 HAL_PARAM_VENC_PRESERVE_TEXT_QUALITY,
197 HAL_PARAM_VDEC_CONCEAL_COLOR,
198 HAL_PARAM_VDEC_SCS_THRESHOLD,
199 HAL_PARAM_GET_BUFFER_REQUIREMENTS,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800200 HAL_PARAM_VENC_LTRMODE,
201 HAL_CONFIG_VENC_MARKLTRFRAME,
202 HAL_CONFIG_VENC_USELTRFRAME,
203 HAL_CONFIG_VENC_LTRPERIOD,
204 HAL_CONFIG_VENC_HIER_P_NUM_FRAMES,
205 HAL_PARAM_VENC_HIER_P_MAX_ENH_LAYERS,
206 HAL_PARAM_VENC_DISABLE_RC_TIMESTAMP,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800207 HAL_PARAM_VENC_SEARCH_RANGE,
208 HAL_PARAM_VPE_COLOR_SPACE_CONVERSION,
209 HAL_PARAM_VENC_VPX_ERROR_RESILIENCE_MODE,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800210 HAL_CONFIG_VENC_PERF_MODE,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800211 HAL_PARAM_VDEC_NON_SECURE_OUTPUT2,
212 HAL_PARAM_VENC_HIER_P_HYBRID_MODE,
213 HAL_PARAM_VENC_MBI_STATISTICS_MODE,
214 HAL_PARAM_SYNC_BASED_INTERRUPT,
215 HAL_CONFIG_VENC_FRAME_QP,
216 HAL_CONFIG_VENC_BASELAYER_PRIORITYID,
217 HAL_PARAM_VENC_VQZIP_SEI,
218 HAL_PROPERTY_PARAM_VENC_ASPECT_RATIO,
219 HAL_CONFIG_VDEC_ENTROPY,
220 HAL_PARAM_VENC_BITRATE_TYPE,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800221 HAL_PARAM_VENC_LOW_LATENCY,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800222 HAL_CONFIG_VENC_BLUR_RESOLUTION,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800223 HAL_PARAM_VENC_H264_TRANSFORM_8x8,
224 HAL_PARAM_VENC_VIDEO_SIGNAL_INFO,
225 HAL_PARAM_VENC_IFRAMESIZE_TYPE,
Praneeth Paladugu238977b2016-12-06 12:51:26 -0800226 HAL_PARAM_VIDEO_CORES_USAGE,
227 HAL_PARAM_VIDEO_WORK_MODE,
Karthikeyan Periasamya0e4bad2017-04-26 12:51:10 -0700228 HAL_PARAM_SECURE,
Umesh Pandey3224e802017-10-12 20:18:58 -0700229 HAL_PARAM_VENC_HDR10_PQ_SEI,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800230};
231
232enum hal_domain {
233 HAL_VIDEO_DOMAIN_VPE,
234 HAL_VIDEO_DOMAIN_ENCODER,
235 HAL_VIDEO_DOMAIN_DECODER,
236 HAL_UNUSED_DOMAIN = 0x10000000,
237};
238
239enum multi_stream {
240 HAL_VIDEO_DECODER_NONE = 0x00000000,
241 HAL_VIDEO_DECODER_PRIMARY = 0x00000001,
242 HAL_VIDEO_DECODER_SECONDARY = 0x00000002,
243 HAL_VIDEO_DECODER_BOTH_OUTPUTS = 0x00000004,
244 HAL_VIDEO_UNUSED_OUTPUTS = 0x10000000,
245};
246
247enum hal_core_capabilities {
248 HAL_VIDEO_ENCODER_ROTATION_CAPABILITY = 0x00000001,
249 HAL_VIDEO_ENCODER_SCALING_CAPABILITY = 0x00000002,
250 HAL_VIDEO_ENCODER_DEINTERLACE_CAPABILITY = 0x00000004,
251 HAL_VIDEO_DECODER_MULTI_STREAM_CAPABILITY = 0x00000008,
252 HAL_VIDEO_UNUSED_CAPABILITY = 0x10000000,
253};
254
255enum hal_default_properties {
256 HAL_VIDEO_DYNAMIC_BUF_MODE = 0x00000001,
257 HAL_VIDEO_CONTINUE_DATA_TRANSFER = 0x00000002,
258};
259
260enum hal_video_codec {
261 HAL_VIDEO_CODEC_UNKNOWN = 0x00000000,
262 HAL_VIDEO_CODEC_MVC = 0x00000001,
263 HAL_VIDEO_CODEC_H264 = 0x00000002,
264 HAL_VIDEO_CODEC_H263 = 0x00000004,
265 HAL_VIDEO_CODEC_MPEG1 = 0x00000008,
266 HAL_VIDEO_CODEC_MPEG2 = 0x00000010,
267 HAL_VIDEO_CODEC_MPEG4 = 0x00000020,
268 HAL_VIDEO_CODEC_DIVX_311 = 0x00000040,
269 HAL_VIDEO_CODEC_DIVX = 0x00000080,
270 HAL_VIDEO_CODEC_VC1 = 0x00000100,
271 HAL_VIDEO_CODEC_SPARK = 0x00000200,
272 HAL_VIDEO_CODEC_VP6 = 0x00000400,
273 HAL_VIDEO_CODEC_VP7 = 0x00000800,
274 HAL_VIDEO_CODEC_VP8 = 0x00001000,
275 HAL_VIDEO_CODEC_HEVC = 0x00002000,
276 HAL_VIDEO_CODEC_VP9 = 0x00004000,
Surajit Poddere502daa2017-05-30 19:17:45 +0530277 HAL_VIDEO_CODEC_TME = 0x00008000,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800278 HAL_VIDEO_CODEC_HEVC_HYBRID = 0x80000000,
279 HAL_UNUSED_CODEC = 0x10000000,
280};
281
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800282enum hal_mpeg2_profile {
Vaibhav Deshu Venkatesh0ad53f02017-08-07 13:21:47 -0700283 HAL_UNUSED_MPEG2_PROFILE = 0x00000000,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800284 HAL_MPEG2_PROFILE_SIMPLE = 0x00000001,
285 HAL_MPEG2_PROFILE_MAIN = 0x00000002,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800286};
287
288enum hal_mpeg2_level {
Vaibhav Deshu Venkatesh0ad53f02017-08-07 13:21:47 -0700289 HAL_UNUSED_MEPG2_LEVEL = 0x00000000,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800290 HAL_MPEG2_LEVEL_LL = 0x00000001,
291 HAL_MPEG2_LEVEL_ML = 0x00000002,
Vaibhav Deshu Venkatesh0ad53f02017-08-07 13:21:47 -0700292 HAL_MPEG2_LEVEL_HL = 0x00000004,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800293};
294
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800295enum hal_h264_profile {
Vaibhav Deshu Venkatesh0ad53f02017-08-07 13:21:47 -0700296 HAL_UNUSED_H264_PROFILE = 0x00000000,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800297 HAL_H264_PROFILE_BASELINE = 0x00000001,
298 HAL_H264_PROFILE_MAIN = 0x00000002,
299 HAL_H264_PROFILE_HIGH = 0x00000004,
Vaibhav Deshu Venkatesh0ad53f02017-08-07 13:21:47 -0700300 HAL_H264_PROFILE_STEREO_HIGH = 0x00000008,
301 HAL_H264_PROFILE_MULTIVIEW_HIGH = 0x00000010,
302 HAL_H264_PROFILE_CONSTRAINED_BASE = 0x00000020,
303 HAL_H264_PROFILE_CONSTRAINED_HIGH = 0x00000040,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800304};
305
306enum hal_h264_level {
Vaibhav Deshu Venkatesh234b4dc2017-03-21 16:54:28 -0700307 HAL_H264_LEVEL_UNKNOWN = 0x00000000,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800308 HAL_H264_LEVEL_1 = 0x00000001,
309 HAL_H264_LEVEL_1b = 0x00000002,
310 HAL_H264_LEVEL_11 = 0x00000004,
311 HAL_H264_LEVEL_12 = 0x00000008,
312 HAL_H264_LEVEL_13 = 0x00000010,
313 HAL_H264_LEVEL_2 = 0x00000020,
314 HAL_H264_LEVEL_21 = 0x00000040,
315 HAL_H264_LEVEL_22 = 0x00000080,
316 HAL_H264_LEVEL_3 = 0x00000100,
317 HAL_H264_LEVEL_31 = 0x00000200,
318 HAL_H264_LEVEL_32 = 0x00000400,
319 HAL_H264_LEVEL_4 = 0x00000800,
320 HAL_H264_LEVEL_41 = 0x00001000,
321 HAL_H264_LEVEL_42 = 0x00002000,
322 HAL_H264_LEVEL_5 = 0x00004000,
323 HAL_H264_LEVEL_51 = 0x00008000,
324 HAL_H264_LEVEL_52 = 0x00010000,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800325};
326
327enum hal_hevc_profile {
Vaibhav Deshu Venkatesh0ad53f02017-08-07 13:21:47 -0700328 HAL_UNUSED_HEVC_PROFILE = 0x00000000,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800329 HAL_HEVC_PROFILE_MAIN = 0x00000001,
330 HAL_HEVC_PROFILE_MAIN10 = 0x00000002,
331 HAL_HEVC_PROFILE_MAIN_STILL_PIC = 0x00000004,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800332};
333
334enum hal_hevc_level {
Vaibhav Deshu Venkatesh234b4dc2017-03-21 16:54:28 -0700335 HAL_HEVC_TIER_LEVEL_UNKNOWN = 0x00000000,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800336 HAL_HEVC_MAIN_TIER_LEVEL_1 = 0x10000001,
337 HAL_HEVC_MAIN_TIER_LEVEL_2 = 0x10000002,
338 HAL_HEVC_MAIN_TIER_LEVEL_2_1 = 0x10000004,
339 HAL_HEVC_MAIN_TIER_LEVEL_3 = 0x10000008,
340 HAL_HEVC_MAIN_TIER_LEVEL_3_1 = 0x10000010,
341 HAL_HEVC_MAIN_TIER_LEVEL_4 = 0x10000020,
342 HAL_HEVC_MAIN_TIER_LEVEL_4_1 = 0x10000040,
343 HAL_HEVC_MAIN_TIER_LEVEL_5 = 0x10000080,
344 HAL_HEVC_MAIN_TIER_LEVEL_5_1 = 0x10000100,
345 HAL_HEVC_MAIN_TIER_LEVEL_5_2 = 0x10000200,
346 HAL_HEVC_MAIN_TIER_LEVEL_6 = 0x10000400,
347 HAL_HEVC_MAIN_TIER_LEVEL_6_1 = 0x10000800,
348 HAL_HEVC_MAIN_TIER_LEVEL_6_2 = 0x10001000,
349 HAL_HEVC_HIGH_TIER_LEVEL_1 = 0x20000001,
350 HAL_HEVC_HIGH_TIER_LEVEL_2 = 0x20000002,
351 HAL_HEVC_HIGH_TIER_LEVEL_2_1 = 0x20000004,
352 HAL_HEVC_HIGH_TIER_LEVEL_3 = 0x20000008,
353 HAL_HEVC_HIGH_TIER_LEVEL_3_1 = 0x20000010,
354 HAL_HEVC_HIGH_TIER_LEVEL_4 = 0x20000020,
355 HAL_HEVC_HIGH_TIER_LEVEL_4_1 = 0x20000040,
356 HAL_HEVC_HIGH_TIER_LEVEL_5 = 0x20000080,
357 HAL_HEVC_HIGH_TIER_LEVEL_5_1 = 0x20000100,
358 HAL_HEVC_HIGH_TIER_LEVEL_5_2 = 0x20000200,
359 HAL_HEVC_HIGH_TIER_LEVEL_6 = 0x20000400,
360 HAL_HEVC_HIGH_TIER_LEVEL_6_1 = 0x20000800,
361 HAL_HEVC_HIGH_TIER_LEVEL_6_2 = 0x20001000,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800362};
363
364enum hal_hevc_tier {
365 HAL_HEVC_TIER_MAIN = 0x00000001,
366 HAL_HEVC_TIER_HIGH = 0x00000002,
367 HAL_UNUSED_HEVC_TIER = 0x10000000,
368};
369
Vaibhav Deshu Venkatesh0ad53f02017-08-07 13:21:47 -0700370enum hal_vp8_profile {
371 HAL_VP8_PROFILE_UNUSED = 0x00000000,
372 HAL_VP8_PROFILE_MAIN = 0x00000001,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800373};
374
Vaibhav Deshu Venkatesh0ad53f02017-08-07 13:21:47 -0700375enum hal_vp8_level {
376 HAL_VP8_LEVEL_UNUSED = 0x00000000,
377 HAL_VP8_LEVEL_VERSION_0 = 0x00000001,
378 HAL_VP8_LEVEL_VERSION_1 = 0x00000002,
379 HAL_VP8_LEVEL_VERSION_2 = 0x00000004,
380 HAL_VP8_LEVEL_VERSION_3 = 0x00000008,
Chinmay Sawarkar7f1cc152017-05-05 18:16:36 -0700381};
382
Surajit Poddere502daa2017-05-30 19:17:45 +0530383enum hal_tme_profile {
384 HAL_TME_PROFILE_0 = 0x00000001,
385 HAL_TME_PROFILE_1 = 0x00000002,
386 HAL_TME_PROFILE_2 = 0x00000004,
387 HAL_TME_PROFILE_3 = 0x00000008,
388};
389
390enum hal_tme_level {
391 HAL_TME_LEVEL_INTEGER = 0x00000001,
392};
393
Vaibhav Deshu Venkateshb69518e2017-08-21 12:22:49 -0700394enum hal_vp9_profile {
395 HAL_VP9_PROFILE_UNUSED = 0x00000000,
396 HAL_VP9_PROFILE_P0 = 0x00000001,
Vaibhav Deshu Venkatesha76c4352017-08-28 12:39:13 -0700397 HAL_VP9_PROFILE_P2_10 = 0x00000004,
Vaibhav Deshu Venkateshb69518e2017-08-21 12:22:49 -0700398};
399
400enum hal_vp9_level {
401 HAL_VP9_LEVEL_UNUSED = 0x00000000,
402 HAL_VP9_LEVEL_1 = 0x00000001,
403 HAL_VP9_LEVEL_11 = 0x00000002,
404 HAL_VP9_LEVEL_2 = 0x00000004,
405 HAL_VP9_LEVEL_21 = 0x00000008,
406 HAL_VP9_LEVEL_3 = 0x00000010,
407 HAL_VP9_LEVEL_31 = 0x00000020,
408 HAL_VP9_LEVEL_4 = 0x00000040,
409 HAL_VP9_LEVEL_41 = 0x00000080,
410 HAL_VP9_LEVEL_5 = 0x00000100,
411 HAL_VP9_LEVEL_51 = 0x00000200,
412};
413
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800414struct hal_frame_rate {
415 enum hal_buffer buffer_type;
416 u32 frame_rate;
417};
418
419enum hal_uncompressed_format {
420 HAL_COLOR_FORMAT_MONOCHROME = 0x00000001,
421 HAL_COLOR_FORMAT_NV12 = 0x00000002,
422 HAL_COLOR_FORMAT_NV21 = 0x00000004,
423 HAL_COLOR_FORMAT_NV12_4x4TILE = 0x00000008,
424 HAL_COLOR_FORMAT_NV21_4x4TILE = 0x00000010,
425 HAL_COLOR_FORMAT_YUYV = 0x00000020,
426 HAL_COLOR_FORMAT_YVYU = 0x00000040,
427 HAL_COLOR_FORMAT_UYVY = 0x00000080,
428 HAL_COLOR_FORMAT_VYUY = 0x00000100,
429 HAL_COLOR_FORMAT_RGB565 = 0x00000200,
430 HAL_COLOR_FORMAT_BGR565 = 0x00000400,
431 HAL_COLOR_FORMAT_RGB888 = 0x00000800,
432 HAL_COLOR_FORMAT_BGR888 = 0x00001000,
433 HAL_COLOR_FORMAT_NV12_UBWC = 0x00002000,
434 HAL_COLOR_FORMAT_NV12_TP10_UBWC = 0x00004000,
435 HAL_COLOR_FORMAT_RGBA8888 = 0x00008000,
436 HAL_COLOR_FORMAT_RGBA8888_UBWC = 0x00010000,
Zhongbo Shi6bd5f5f2017-08-16 17:20:08 +0800437 HAL_COLOR_FORMAT_P010 = 0x00020000,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800438 HAL_UNUSED_COLOR = 0x10000000,
439};
440
441enum hal_statistics_mode_type {
442 HAL_STATISTICS_MODE_DEFAULT = 0x00000001,
443 HAL_STATISTICS_MODE_1 = 0x00000002,
444 HAL_STATISTICS_MODE_2 = 0x00000004,
445 HAL_STATISTICS_MODE_3 = 0x00000008,
446};
447
448enum hal_ssr_trigger_type {
449 SSR_ERR_FATAL = 1,
450 SSR_SW_DIV_BY_ZERO,
451 SSR_HW_WDOG_IRQ,
452};
453
454struct hal_uncompressed_format_select {
455 enum hal_buffer buffer_type;
456 enum hal_uncompressed_format format;
457};
458
459struct hal_uncompressed_plane_actual {
460 int actual_stride;
461 u32 actual_plane_buffer_height;
462};
463
464struct hal_uncompressed_plane_actual_info {
465 enum hal_buffer buffer_type;
466 u32 num_planes;
467 struct hal_uncompressed_plane_actual rg_plane_format[1];
468};
469
470struct hal_uncompressed_plane_constraints {
471 u32 stride_multiples;
472 u32 max_stride;
473 u32 min_plane_buffer_height_multiple;
474 u32 buffer_alignment;
475};
476
477struct hal_uncompressed_plane_actual_constraints_info {
478 enum hal_buffer buffer_type;
479 u32 num_planes;
480 struct hal_uncompressed_plane_constraints rg_plane_format[1];
481};
482
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800483struct hal_frame_size {
484 enum hal_buffer buffer_type;
485 u32 width;
486 u32 height;
487};
488
489struct hal_enable {
490 bool enable;
491};
492
493struct hal_buffer_count_actual {
494 enum hal_buffer buffer_type;
495 u32 buffer_count_actual;
Praneeth Paladugudefea4e2017-02-09 23:44:08 -0800496 u32 buffer_count_min_host;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800497};
498
499struct hal_buffer_size_minimum {
500 enum hal_buffer buffer_type;
501 u32 buffer_size;
502};
503
504struct hal_buffer_display_hold_count_actual {
505 enum hal_buffer buffer_type;
506 u32 hold_count;
507};
508
509enum hal_nal_stream_format {
510 HAL_NAL_FORMAT_STARTCODES = 0x00000001,
511 HAL_NAL_FORMAT_ONE_NAL_PER_BUFFER = 0x00000002,
512 HAL_NAL_FORMAT_ONE_BYTE_LENGTH = 0x00000004,
513 HAL_NAL_FORMAT_TWO_BYTE_LENGTH = 0x00000008,
514 HAL_NAL_FORMAT_FOUR_BYTE_LENGTH = 0x00000010,
515};
516
517enum hal_output_order {
518 HAL_OUTPUT_ORDER_DISPLAY,
519 HAL_OUTPUT_ORDER_DECODE,
520 HAL_UNUSED_OUTPUT = 0x10000000,
521};
522
523enum hal_picture {
524 HAL_PICTURE_I = 0x01,
525 HAL_PICTURE_P = 0x02,
526 HAL_PICTURE_B = 0x04,
527 HAL_PICTURE_IDR = 0x08,
528 HAL_PICTURE_CRA = 0x10,
529 HAL_FRAME_NOTCODED = 0x7F002000,
530 HAL_FRAME_YUV = 0x7F004000,
531 HAL_UNUSED_PICT = 0x10000000,
532};
533
534struct hal_extradata_enable {
535 u32 enable;
536 enum hal_extradata_id index;
537};
538
539struct hal_enable_picture {
540 u32 picture_type;
541};
542
543struct hal_multi_stream {
544 enum hal_buffer buffer_type;
545 u32 enable;
546 u32 width;
547 u32 height;
548};
549
550struct hal_display_picture_buffer_count {
551 u32 enable;
552 u32 count;
553};
554
555struct hal_mb_error_map {
556 u32 error_map_size;
557 u8 rg_error_map[1];
558};
559
560struct hal_request_iframe {
561 u32 enable;
562};
563
564struct hal_bitrate {
565 u32 bit_rate;
566 u32 layer_id;
567};
568
569struct hal_profile_level {
570 u32 profile;
571 u32 level;
572};
573
574struct hal_profile_level_supported {
575 u32 profile_count;
576 struct hal_profile_level profile_level[MAX_PROFILE_COUNT];
577};
578
579enum hal_h264_entropy {
580 HAL_H264_ENTROPY_CAVLC = 1,
581 HAL_H264_ENTROPY_CABAC = 2,
582 HAL_UNUSED_ENTROPY = 0x10000000,
583};
584
585enum hal_h264_cabac_model {
586 HAL_H264_CABAC_MODEL_0 = 1,
587 HAL_H264_CABAC_MODEL_1 = 2,
588 HAL_H264_CABAC_MODEL_2 = 4,
589 HAL_UNUSED_CABAC = 0x10000000,
590};
591
592struct hal_h264_entropy_control {
593 enum hal_h264_entropy entropy_mode;
594 enum hal_h264_cabac_model cabac_model;
595};
596
597enum hal_rate_control {
598 HAL_RATE_CONTROL_OFF,
599 HAL_RATE_CONTROL_VBR_VFR,
600 HAL_RATE_CONTROL_VBR_CFR,
601 HAL_RATE_CONTROL_CBR_VFR,
602 HAL_RATE_CONTROL_CBR_CFR,
603 HAL_RATE_CONTROL_MBR_CFR,
604 HAL_RATE_CONTROL_MBR_VFR,
605 HAL_UNUSED_RC = 0x10000000,
606};
607
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800608enum hal_h264_db_mode {
609 HAL_H264_DB_MODE_DISABLE,
610 HAL_H264_DB_MODE_SKIP_SLICE_BOUNDARY,
611 HAL_H264_DB_MODE_ALL_BOUNDARY,
612 HAL_UNUSED_H264_DB = 0x10000000,
613};
614
615struct hal_h264_db_control {
616 enum hal_h264_db_mode mode;
617 int slice_alpha_offset;
618 int slice_beta_offset;
619};
620
621struct hal_temporal_spatial_tradeoff {
622 u32 ts_factor;
623};
624
625struct hal_quantization {
626 u32 qpi;
627 u32 qpp;
628 u32 qpb;
629 u32 layer_id;
Vaibhav Deshu Venkatesh3a147162017-04-27 16:21:12 -0700630 u32 enable;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800631};
632
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800633struct hal_quantization_range {
Praneeth Paladugu7fbd2792017-01-27 13:39:03 -0800634 u32 qpi_min;
635 u32 qpp_min;
636 u32 qpb_min;
637 u32 qpi_max;
638 u32 qpp_max;
639 u32 qpb_max;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800640 u32 layer_id;
641};
642
643struct hal_intra_period {
644 u32 pframes;
645 u32 bframes;
646};
647
648struct hal_idr_period {
649 u32 idr_period;
650};
651
652enum hal_rotate {
653 HAL_ROTATE_NONE,
654 HAL_ROTATE_90,
655 HAL_ROTATE_180,
656 HAL_ROTATE_270,
657 HAL_UNUSED_ROTATE = 0x10000000,
658};
659
660enum hal_flip {
661 HAL_FLIP_NONE,
662 HAL_FLIP_HORIZONTAL,
663 HAL_FLIP_VERTICAL,
Chinmay Sawarkar87754272017-09-01 14:50:10 -0700664 HAL_FLIP_BOTH,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800665 HAL_UNUSED_FLIP = 0x10000000,
666};
667
Chinmay Sawarkar582c72a2017-05-24 14:29:12 -0700668struct hal_vpe_rotation {
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800669 enum hal_rotate rotate;
670 enum hal_flip flip;
671};
672
673enum hal_intra_refresh_mode {
674 HAL_INTRA_REFRESH_NONE,
675 HAL_INTRA_REFRESH_CYCLIC,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800676 HAL_INTRA_REFRESH_RANDOM,
677 HAL_UNUSED_INTRA = 0x10000000,
678};
679
680struct hal_intra_refresh {
681 enum hal_intra_refresh_mode mode;
Saurabh Kothawadeabed16c2017-03-22 17:06:40 -0700682 u32 ir_mbs;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800683};
684
685enum hal_multi_slice {
686 HAL_MULTI_SLICE_OFF,
687 HAL_MULTI_SLICE_BY_MB_COUNT,
688 HAL_MULTI_SLICE_BY_BYTE_COUNT,
689 HAL_MULTI_SLICE_GOB,
690 HAL_UNUSED_SLICE = 0x10000000,
691};
692
693struct hal_multi_slice_control {
694 enum hal_multi_slice multi_slice;
695 u32 slice_size;
696};
697
698struct hal_debug_config {
699 u32 debug_config;
700};
701
702struct hal_buffer_requirements {
703 enum hal_buffer buffer_type;
704 u32 buffer_size;
705 u32 buffer_region_size;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800706 u32 buffer_count_min;
Praneeth Paladugudefea4e2017-02-09 23:44:08 -0800707 u32 buffer_count_min_host;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800708 u32 buffer_count_actual;
709 u32 contiguous;
710 u32 buffer_alignment;
711};
712
713enum hal_priority {/* Priority increases with number */
714 HAL_PRIORITY_LOW = 10,
715 HAL_PRIOIRTY_MEDIUM = 20,
716 HAL_PRIORITY_HIGH = 30,
717 HAL_UNUSED_PRIORITY = 0x10000000,
718};
719
720struct hal_batch_info {
721 u32 input_batch_count;
722 u32 output_batch_count;
723};
724
725struct hal_metadata_pass_through {
726 u32 enable;
727 u32 size;
728};
729
730struct hal_uncompressed_format_supported {
731 enum hal_buffer buffer_type;
732 u32 format_entries;
733 u32 rg_format_info[1];
734};
735
736enum hal_interlace_format {
737 HAL_INTERLACE_FRAME_PROGRESSIVE = 0x01,
738 HAL_INTERLACE_INTERLEAVE_FRAME_TOPFIELDFIRST = 0x02,
739 HAL_INTERLACE_INTERLEAVE_FRAME_BOTTOMFIELDFIRST = 0x04,
740 HAL_INTERLACE_FRAME_TOPFIELDFIRST = 0x08,
741 HAL_INTERLACE_FRAME_BOTTOMFIELDFIRST = 0x10,
742 HAL_UNUSED_INTERLACE = 0x10000000,
743};
744
745struct hal_interlace_format_supported {
746 enum hal_buffer buffer_type;
747 enum hal_interlace_format format;
748};
749
750enum hal_chroma_site {
751 HAL_CHROMA_SITE_0,
752 HAL_CHROMA_SITE_1,
753 HAL_UNUSED_CHROMA = 0x10000000,
754};
755
756struct hal_properties_supported {
757 u32 num_properties;
758 u32 rg_properties[1];
759};
760
761enum hal_capability {
762 HAL_CAPABILITY_FRAME_WIDTH = 0x1,
763 HAL_CAPABILITY_FRAME_HEIGHT,
764 HAL_CAPABILITY_MBS_PER_FRAME,
765 HAL_CAPABILITY_MBS_PER_SECOND,
766 HAL_CAPABILITY_FRAMERATE,
767 HAL_CAPABILITY_SCALE_X,
768 HAL_CAPABILITY_SCALE_Y,
769 HAL_CAPABILITY_BITRATE,
770 HAL_CAPABILITY_BFRAME,
771 HAL_CAPABILITY_PEAKBITRATE,
772 HAL_CAPABILITY_HIER_P_NUM_ENH_LAYERS,
773 HAL_CAPABILITY_ENC_LTR_COUNT,
774 HAL_CAPABILITY_SECURE_OUTPUT2_THRESHOLD,
775 HAL_CAPABILITY_HIER_B_NUM_ENH_LAYERS,
776 HAL_CAPABILITY_LCU_SIZE,
777 HAL_CAPABILITY_HIER_P_HYBRID_NUM_ENH_LAYERS,
778 HAL_CAPABILITY_MBS_PER_SECOND_POWER_SAVE,
Praneeth Paladugu520c7592017-01-26 13:53:14 -0800779 HAL_CAPABILITY_EXTRADATA,
780 HAL_CAPABILITY_PROFILE,
781 HAL_CAPABILITY_LEVEL,
782 HAL_CAPABILITY_I_FRAME_QP,
783 HAL_CAPABILITY_P_FRAME_QP,
784 HAL_CAPABILITY_B_FRAME_QP,
785 HAL_CAPABILITY_RATE_CONTROL_MODES,
786 HAL_CAPABILITY_BLUR_WIDTH,
787 HAL_CAPABILITY_BLUR_HEIGHT,
788 HAL_CAPABILITY_SLICE_DELIVERY_MODES,
789 HAL_CAPABILITY_SLICE_BYTE,
790 HAL_CAPABILITY_SLICE_MB,
791 HAL_CAPABILITY_SECURE,
792 HAL_CAPABILITY_MAX_NUM_B_FRAMES,
793 HAL_CAPABILITY_MAX_VIDEOCORES,
794 HAL_CAPABILITY_MAX_WORKMODES,
795 HAL_CAPABILITY_UBWC_CR_STATS,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800796 HAL_UNUSED_CAPABILITY = 0x10000000,
797};
798
799struct hal_capability_supported {
800 enum hal_capability capability_type;
801 u32 min;
802 u32 max;
803 u32 step_size;
804};
805
806struct hal_capability_supported_info {
807 u32 num_capabilities;
808 struct hal_capability_supported rg_data[1];
809};
810
811struct hal_nal_stream_format_supported {
812 u32 nal_stream_format_supported;
813};
814
815struct hal_nal_stream_format_select {
816 u32 nal_stream_format_select;
817};
818
819struct hal_multi_view_format {
820 u32 views;
821 u32 rg_view_order[1];
822};
823
824enum hal_buffer_layout_type {
825 HAL_BUFFER_LAYOUT_TOP_BOTTOM,
826 HAL_BUFFER_LAYOUT_SEQ,
827 HAL_UNUSED_BUFFER_LAYOUT = 0x10000000,
828};
829
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800830struct hal_aspect_ratio {
831 u32 aspect_width;
832 u32 aspect_height;
833};
834
835struct hal_codec_supported {
836 u32 decoder_codec_supported;
837 u32 encoder_codec_supported;
838};
839
840struct hal_multi_view_select {
841 u32 view_index;
842};
843
844struct hal_timestamp_scale {
845 u32 time_stamp_scale;
846};
847
848
Chinmay Sawarkard0054622017-05-04 13:50:59 -0700849struct hal_vui_timing_info {
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800850 u32 enable;
851 u32 fixed_frame_rate;
852 u32 time_scale;
853};
854
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800855struct hal_preserve_text_quality {
856 u32 enable;
857};
858
Praneeth Paladugu238977b2016-12-06 12:51:26 -0800859enum hal_core_id {
860 VIDC_CORE_ID_DEFAULT = 0,
861 VIDC_CORE_ID_1 = 1, /* 0b01 */
862 VIDC_CORE_ID_2 = 2, /* 0b10 */
863 VIDC_CORE_ID_3 = 3, /* 0b11 */
864 VIDC_CORE_ID_UNUSED = 0x10000000,
865};
866
867struct hal_videocores_usage_info {
868 u32 video_core_enable_mask;
869};
870
871enum hal_work_mode {
Surajit Podder15fba912017-06-28 17:46:51 +0530872 VIDC_WORK_MODE_1 = 1,
873 VIDC_WORK_MODE_2 = 2,
Praneeth Paladugu238977b2016-12-06 12:51:26 -0800874 VIDC_WORK_MODE_UNUSED = 0x10000000,
875};
876
877struct hal_video_work_mode {
878 u32 video_work_mode;
879};
880
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800881struct hal_vpe_color_space_conversion {
Chinmay Sawarkarddd1d972017-08-15 10:10:06 -0700882 u32 input_color_primaries;
883 u32 custom_matrix_enabled;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800884 u32 csc_matrix[HAL_MAX_MATRIX_COEFFS];
885 u32 csc_bias[HAL_MAX_BIAS_COEFFS];
886 u32 csc_limit[HAL_MAX_LIMIT_COEFFS];
887};
888
889struct hal_video_signal_info {
890 u32 color_space;
891 u32 transfer_chars;
892 u32 matrix_coeffs;
893 bool full_range;
894};
895
896enum hal_iframesize_type {
897 HAL_IFRAMESIZE_TYPE_DEFAULT,
898 HAL_IFRAMESIZE_TYPE_MEDIUM,
899 HAL_IFRAMESIZE_TYPE_HUGE,
900 HAL_IFRAMESIZE_TYPE_UNLIMITED,
901};
902
903enum vidc_resource_id {
904 VIDC_RESOURCE_NONE,
Shivendra Kakraniac1f60e02017-04-13 00:07:26 -0700905 VIDC_RESOURCE_SYSCACHE,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800906 VIDC_UNUSED_RESOURCE = 0x10000000,
907};
908
909struct vidc_resource_hdr {
910 enum vidc_resource_id resource_id;
911 void *resource_handle;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800912};
913
914struct vidc_buffer_addr_info {
915 enum hal_buffer buffer_type;
916 u32 buffer_size;
917 u32 num_buffers;
Maheshwar Ajjac6407c02017-06-09 18:53:20 -0700918 u32 align_device_addr;
919 u32 extradata_addr;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800920 u32 extradata_size;
921 u32 response_required;
922};
923
924/* Needs to be exactly the same as hfi_buffer_info */
925struct hal_buffer_info {
926 u32 buffer_addr;
927 u32 extra_data_addr;
928};
929
930struct vidc_frame_plane_config {
931 u32 left;
932 u32 top;
933 u32 width;
934 u32 height;
935 u32 stride;
936 u32 scan_lines;
937};
938
939struct vidc_uncompressed_frame_config {
940 struct vidc_frame_plane_config luma_plane;
941 struct vidc_frame_plane_config chroma_plane;
942};
943
944struct vidc_frame_data {
945 enum hal_buffer buffer_type;
Maheshwar Ajjac6407c02017-06-09 18:53:20 -0700946 u32 device_addr;
947 u32 extradata_addr;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800948 int64_t timestamp;
949 u32 flags;
950 u32 offset;
951 u32 alloc_len;
952 u32 filled_len;
953 u32 mark_target;
954 u32 mark_data;
955 u32 clnt_data;
956 u32 extradata_size;
957};
958
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800959struct hal_fw_info {
960 char version[VENUS_VERSION_LENGTH];
961 phys_addr_t base_addr;
962 int register_base;
963 int register_size;
964 int irq;
965};
966
967enum hal_flush {
968 HAL_FLUSH_INPUT,
969 HAL_FLUSH_OUTPUT,
970 HAL_FLUSH_ALL,
971 HAL_UNUSED_FLUSH = 0x10000000,
972};
973
974enum hal_event_type {
975 HAL_EVENT_SEQ_CHANGED_SUFFICIENT_RESOURCES,
976 HAL_EVENT_SEQ_CHANGED_INSUFFICIENT_RESOURCES,
977 HAL_EVENT_RELEASE_BUFFER_REFERENCE,
978 HAL_UNUSED_SEQCHG = 0x10000000,
979};
980
981enum buffer_mode_type {
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800982 HAL_BUFFER_MODE_DYNAMIC = 0x100,
Chinmay Sawarkar2de3f772017-02-07 12:03:44 -0800983 HAL_BUFFER_MODE_STATIC = 0x001,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800984};
985
986struct hal_buffer_alloc_mode {
987 enum hal_buffer buffer_type;
988 enum buffer_mode_type buffer_mode;
989};
990
991enum ltr_mode {
992 HAL_LTR_MODE_DISABLE,
993 HAL_LTR_MODE_MANUAL,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800994};
995
996struct hal_ltr_mode {
997 enum ltr_mode mode;
998 u32 count;
999 u32 trust_mode;
1000};
1001
1002struct hal_ltr_use {
1003 u32 ref_ltr;
1004 u32 use_constraint;
1005 u32 frames;
1006};
1007
1008struct hal_ltr_mark {
1009 u32 mark_frame;
1010};
1011
1012enum hal_perf_mode {
1013 HAL_PERF_MODE_POWER_SAVE,
1014 HAL_PERF_MODE_POWER_MAX_QUALITY,
1015};
1016
1017struct hal_hybrid_hierp {
1018 u32 layers;
1019};
1020
1021struct hal_scs_threshold {
1022 u32 threshold_value;
1023};
1024
1025struct buffer_requirements {
1026 struct hal_buffer_requirements buffer[HAL_BUFFER_MAX];
1027};
1028
Umesh Pandey42313a72017-07-05 18:20:06 -07001029struct hal_conceal_color {
1030 u32 conceal_color_8bit;
1031 u32 conceal_color_10bit;
1032};
1033
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001034union hal_get_property {
1035 struct hal_frame_rate frame_rate;
1036 struct hal_uncompressed_format_select format_select;
1037 struct hal_uncompressed_plane_actual plane_actual;
1038 struct hal_uncompressed_plane_actual_info plane_actual_info;
1039 struct hal_uncompressed_plane_constraints plane_constraints;
1040 struct hal_uncompressed_plane_actual_constraints_info
1041 plane_constraints_info;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001042 struct hal_frame_size frame_size;
1043 struct hal_enable enable;
1044 struct hal_buffer_count_actual buffer_count_actual;
1045 struct hal_extradata_enable extradata_enable;
1046 struct hal_enable_picture enable_picture;
1047 struct hal_multi_stream multi_stream;
1048 struct hal_display_picture_buffer_count display_picture_buffer_count;
1049 struct hal_mb_error_map mb_error_map;
1050 struct hal_request_iframe request_iframe;
1051 struct hal_bitrate bitrate;
1052 struct hal_profile_level profile_level;
1053 struct hal_profile_level_supported profile_level_supported;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001054 struct hal_h264_db_control h264_db_control;
1055 struct hal_temporal_spatial_tradeoff temporal_spatial_tradeoff;
1056 struct hal_quantization quantization;
1057 struct hal_quantization_range quantization_range;
1058 struct hal_intra_period intra_period;
1059 struct hal_idr_period idr_period;
Chinmay Sawarkar582c72a2017-05-24 14:29:12 -07001060 struct hal_vpe_rotation vpe_rotation;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001061 struct hal_intra_refresh intra_refresh;
1062 struct hal_multi_slice_control multi_slice_control;
1063 struct hal_debug_config debug_config;
1064 struct hal_batch_info batch_info;
1065 struct hal_metadata_pass_through metadata_pass_through;
1066 struct hal_uncompressed_format_supported uncompressed_format_supported;
1067 struct hal_interlace_format_supported interlace_format_supported;
1068 struct hal_properties_supported properties_supported;
1069 struct hal_capability_supported capability_supported;
1070 struct hal_capability_supported_info capability_supported_info;
1071 struct hal_nal_stream_format_supported nal_stream_format_supported;
1072 struct hal_nal_stream_format_select nal_stream_format_select;
1073 struct hal_multi_view_format multi_view_format;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001074 struct hal_codec_supported codec_supported;
1075 struct hal_multi_view_select multi_view_select;
1076 struct hal_timestamp_scale timestamp_scale;
Chinmay Sawarkard0054622017-05-04 13:50:59 -07001077 struct hal_vui_timing_info vui_timing_info;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001078 struct hal_preserve_text_quality preserve_text_quality;
1079 struct hal_buffer_info buffer_info;
1080 struct hal_buffer_alloc_mode buffer_alloc_mode;
1081 struct buffer_requirements buf_req;
1082 enum hal_h264_entropy h264_entropy;
Umesh Pandey42313a72017-07-05 18:20:06 -07001083 struct hal_conceal_color conceal_color;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001084};
1085
1086/* HAL Response */
1087#define IS_HAL_SYS_CMD(cmd) ((cmd) >= HAL_SYS_INIT_DONE && \
1088 (cmd) <= HAL_SYS_ERROR)
1089#define IS_HAL_SESSION_CMD(cmd) ((cmd) >= HAL_SESSION_EVENT_CHANGE && \
1090 (cmd) <= HAL_SESSION_ERROR)
1091enum hal_command_response {
1092 /* SYSTEM COMMANDS_DONE*/
1093 HAL_SYS_INIT_DONE,
1094 HAL_SYS_SET_RESOURCE_DONE,
1095 HAL_SYS_RELEASE_RESOURCE_DONE,
1096 HAL_SYS_PING_ACK_DONE,
1097 HAL_SYS_PC_PREP_DONE,
1098 HAL_SYS_IDLE,
1099 HAL_SYS_DEBUG,
1100 HAL_SYS_WATCHDOG_TIMEOUT,
1101 HAL_SYS_ERROR,
1102 /* SESSION COMMANDS_DONE */
1103 HAL_SESSION_EVENT_CHANGE,
1104 HAL_SESSION_LOAD_RESOURCE_DONE,
1105 HAL_SESSION_INIT_DONE,
1106 HAL_SESSION_END_DONE,
1107 HAL_SESSION_ABORT_DONE,
1108 HAL_SESSION_START_DONE,
1109 HAL_SESSION_STOP_DONE,
1110 HAL_SESSION_ETB_DONE,
1111 HAL_SESSION_FTB_DONE,
1112 HAL_SESSION_FLUSH_DONE,
1113 HAL_SESSION_SUSPEND_DONE,
1114 HAL_SESSION_RESUME_DONE,
1115 HAL_SESSION_SET_PROP_DONE,
1116 HAL_SESSION_GET_PROP_DONE,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001117 HAL_SESSION_RELEASE_BUFFER_DONE,
1118 HAL_SESSION_RELEASE_RESOURCE_DONE,
1119 HAL_SESSION_PROPERTY_INFO,
1120 HAL_SESSION_ERROR,
1121 HAL_RESPONSE_UNUSED = 0x10000000,
1122};
1123
Praneeth Paladugu319e7922017-03-16 11:09:06 -07001124struct ubwc_cr_stats_info_type {
1125 u32 cr_stats_info0;
1126 u32 cr_stats_info1;
1127 u32 cr_stats_info2;
1128 u32 cr_stats_info3;
1129 u32 cr_stats_info4;
1130 u32 cr_stats_info5;
1131 u32 cr_stats_info6;
1132};
1133
1134struct recon_stats_type {
1135 u32 buffer_index;
1136 u32 complexity_number;
1137 struct ubwc_cr_stats_info_type ubwc_stats_info;
1138};
1139
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001140struct vidc_hal_ebd {
1141 u32 timestamp_hi;
1142 u32 timestamp_lo;
1143 u32 flags;
1144 enum vidc_status status;
1145 u32 mark_target;
1146 u32 mark_data;
1147 u32 stats;
1148 u32 offset;
1149 u32 alloc_len;
1150 u32 filled_len;
1151 enum hal_picture picture_type;
Praneeth Paladugu319e7922017-03-16 11:09:06 -07001152 struct recon_stats_type recon_stats;
Maheshwar Ajjac6407c02017-06-09 18:53:20 -07001153 u32 packet_buffer;
1154 u32 extra_data_buffer;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001155};
1156
1157struct vidc_hal_fbd {
1158 u32 stream_id;
1159 u32 view_id;
1160 u32 timestamp_hi;
1161 u32 timestamp_lo;
1162 u32 flags1;
1163 u32 mark_target;
1164 u32 mark_data;
1165 u32 stats;
1166 u32 alloc_len1;
1167 u32 filled_len1;
1168 u32 offset1;
1169 u32 frame_width;
1170 u32 frame_height;
1171 u32 start_x_coord;
1172 u32 start_y_coord;
1173 u32 input_tag;
1174 u32 input_tag1;
1175 enum hal_picture picture_type;
Maheshwar Ajjac6407c02017-06-09 18:53:20 -07001176 u32 packet_buffer1;
1177 u32 extra_data_buffer;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001178 u32 flags2;
1179 u32 alloc_len2;
1180 u32 filled_len2;
1181 u32 offset2;
Maheshwar Ajjac6407c02017-06-09 18:53:20 -07001182 u32 packet_buffer2;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001183 u32 flags3;
1184 u32 alloc_len3;
1185 u32 filled_len3;
1186 u32 offset3;
Maheshwar Ajjac6407c02017-06-09 18:53:20 -07001187 u32 packet_buffer3;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001188 enum hal_buffer buffer_type;
1189};
1190
1191struct msm_vidc_capability {
1192 enum hal_domain domain;
1193 enum hal_video_codec codec;
1194 struct hal_capability_supported width;
1195 struct hal_capability_supported height;
1196 struct hal_capability_supported mbs_per_frame;
1197 struct hal_capability_supported mbs_per_sec;
1198 struct hal_capability_supported frame_rate;
1199 struct hal_capability_supported scale_x;
1200 struct hal_capability_supported scale_y;
1201 struct hal_capability_supported bitrate;
1202 struct hal_capability_supported bframe;
1203 struct hal_capability_supported peakbitrate;
1204 struct hal_capability_supported hier_p;
1205 struct hal_capability_supported ltr_count;
1206 struct hal_capability_supported secure_output2_threshold;
1207 struct hal_capability_supported hier_b;
1208 struct hal_capability_supported lcu_size;
1209 struct hal_capability_supported hier_p_hybrid;
1210 struct hal_capability_supported mbs_per_sec_power_save;
Praneeth Paladugu520c7592017-01-26 13:53:14 -08001211 struct hal_capability_supported extradata;
1212 struct hal_capability_supported profile;
1213 struct hal_capability_supported level;
1214 struct hal_capability_supported i_qp;
1215 struct hal_capability_supported p_qp;
1216 struct hal_capability_supported b_qp;
1217 struct hal_capability_supported rc_modes;
1218 struct hal_capability_supported blur_width;
1219 struct hal_capability_supported blur_height;
1220 struct hal_capability_supported slice_delivery_mode;
1221 struct hal_capability_supported slice_bytes;
1222 struct hal_capability_supported slice_mbs;
1223 struct hal_capability_supported secure;
1224 struct hal_capability_supported max_num_b_frames;
1225 struct hal_capability_supported max_video_cores;
1226 struct hal_capability_supported max_work_modes;
1227 struct hal_capability_supported ubwc_cr_stats;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001228 struct hal_profile_level_supported profile_level;
1229 struct hal_uncompressed_format_supported uncomp_format;
1230 struct hal_interlace_format_supported HAL_format;
1231 struct hal_nal_stream_format_supported nal_stream_format;
1232 struct hal_intra_refresh intra_refresh;
1233 enum buffer_mode_type alloc_mode_out;
1234 enum buffer_mode_type alloc_mode_in;
1235 u32 pixelprocess_capabilities;
Surajit Poddere502daa2017-05-30 19:17:45 +05301236 u32 tme_version;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001237};
1238
1239struct vidc_hal_sys_init_done {
1240 u32 dec_codec_supported;
1241 u32 enc_codec_supported;
1242 u32 codec_count;
1243 struct msm_vidc_capability *capabilities;
1244 u32 max_sessions_supported;
1245};
1246
1247struct vidc_hal_session_init_done {
1248 struct msm_vidc_capability capability;
1249};
1250
1251struct msm_vidc_cb_cmd_done {
1252 u32 device_id;
1253 void *session_id;
1254 enum vidc_status status;
1255 u32 size;
1256 union {
1257 struct vidc_resource_hdr resource_hdr;
1258 struct vidc_buffer_addr_info buffer_addr_info;
1259 struct vidc_frame_plane_config frame_plane_config;
1260 struct vidc_uncompressed_frame_config uncompressed_frame_config;
1261 struct vidc_frame_data frame_data;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001262 struct vidc_hal_ebd ebd;
1263 struct vidc_hal_fbd fbd;
1264 struct vidc_hal_sys_init_done sys_init_done;
1265 struct vidc_hal_session_init_done session_init_done;
1266 struct hal_buffer_info buffer_info;
1267 union hal_get_property property;
1268 enum hal_flush flush_type;
1269 } data;
1270};
1271
Praneeth Paladugu520e9b22017-05-31 13:25:18 -07001272struct hal_index_extradata_input_crop_payload {
1273 u32 size;
1274 u32 version;
1275 u32 port_index;
1276 u32 left;
1277 u32 top;
1278 u32 width;
1279 u32 height;
1280};
1281
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001282struct msm_vidc_cb_event {
1283 u32 device_id;
1284 void *session_id;
1285 enum vidc_status status;
1286 u32 height;
1287 u32 width;
1288 enum msm_vidc_pixel_depth bit_depth;
1289 u32 hal_event_type;
Maheshwar Ajjac6407c02017-06-09 18:53:20 -07001290 u32 packet_buffer;
1291 u32 extra_data_buffer;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001292 u32 pic_struct;
1293 u32 colour_space;
Chinmay Sawarkarb3c6ccb2017-02-23 18:01:32 -08001294 u32 profile;
1295 u32 level;
1296 u32 entropy_mode;
Praneeth Paladugu520e9b22017-05-31 13:25:18 -07001297 u32 capture_buf_count;
1298 struct hal_index_extradata_input_crop_payload crop_data;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001299};
1300
1301struct msm_vidc_cb_data_done {
1302 u32 device_id;
1303 void *session_id;
1304 enum vidc_status status;
1305 u32 size;
1306 u32 clnt_data;
1307 union {
1308 struct vidc_hal_ebd input_done;
1309 struct vidc_hal_fbd output_done;
1310 };
1311};
1312
1313struct msm_vidc_cb_info {
1314 enum hal_command_response response_type;
1315 union {
1316 struct msm_vidc_cb_cmd_done cmd;
1317 struct msm_vidc_cb_event event;
1318 struct msm_vidc_cb_data_done data;
1319 } response;
1320};
1321
1322enum msm_vidc_hfi_type {
1323 VIDC_HFI_VENUS,
1324};
1325
1326enum msm_vidc_thermal_level {
1327 VIDC_THERMAL_NORMAL = 0,
1328 VIDC_THERMAL_LOW,
1329 VIDC_THERMAL_HIGH,
1330 VIDC_THERMAL_CRITICAL
1331};
1332
1333enum vidc_vote_data_session {
1334 VIDC_BUS_VOTE_DATA_SESSION_INVALID = 0,
1335 /*
1336 * No declarations exist. Values generated by VIDC_VOTE_DATA_SESSION_VAL
1337 * describe the enumerations e.g.:
1338 *
1339 * enum vidc_bus_vote_data_session_type h264_decoder_session =
1340 * VIDC_VOTE_DATA_SESSION_VAL(HAL_VIDEO_CODEC_H264,
1341 * HAL_VIDEO_DOMAIN_DECODER);
1342 */
1343};
1344
1345/*
1346 * Careful modifying VIDC_VOTE_DATA_SESSION_VAL().
1347 *
1348 * This macro assigns two bits to each codec: the lower bit denoting the codec
1349 * type, and the higher bit denoting session type.
1350 */
1351static inline enum vidc_vote_data_session VIDC_VOTE_DATA_SESSION_VAL(
1352 enum hal_video_codec c, enum hal_domain d) {
1353 if (d != HAL_VIDEO_DOMAIN_ENCODER && d != HAL_VIDEO_DOMAIN_DECODER)
1354 return VIDC_BUS_VOTE_DATA_SESSION_INVALID;
1355
1356 return (1 << ilog2(c) * 2) | ((d - 1) << (ilog2(c) * 2 + 1));
1357}
1358
1359struct msm_vidc_gov_data {
1360 struct vidc_bus_vote_data *data;
1361 u32 data_count;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001362};
1363
1364enum msm_vidc_power_mode {
1365 VIDC_POWER_NORMAL = 0,
1366 VIDC_POWER_LOW,
1367 VIDC_POWER_TURBO
1368};
1369
1370struct vidc_bus_vote_data {
1371 enum hal_domain domain;
1372 enum hal_video_codec codec;
1373 enum hal_uncompressed_format color_formats[2];
1374 int num_formats; /* 1 = DPB-OPB unified; 2 = split */
Praneeth Paladugu319e7922017-03-16 11:09:06 -07001375 int input_height, input_width, fps;
1376 int output_height, output_width;
1377 int compression_ratio;
1378 int complexity_factor;
Praneeth Paladugu7722b4e2017-07-07 11:01:56 -07001379 int input_cr;
Praneeth Paladugu04e77722017-06-21 11:38:31 -07001380 bool use_dpb_read;
Praneeth Paladugu319e7922017-03-16 11:09:06 -07001381 unsigned int lcu_size;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001382 enum msm_vidc_power_mode power_mode;
Praneeth Paladugu319e7922017-03-16 11:09:06 -07001383 enum hal_work_mode work_mode;
Shivendra Kakraniaac170f92017-05-22 13:08:09 -07001384 bool use_sys_cache;
Praneeth Paladugu7722b4e2017-07-07 11:01:56 -07001385 bool b_frames_enabled;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001386};
1387
1388struct vidc_clk_scale_data {
1389 enum vidc_vote_data_session session[VIDC_MAX_SESSIONS];
1390 enum msm_vidc_power_mode power_mode[VIDC_MAX_SESSIONS];
1391 u32 load[VIDC_MAX_SESSIONS];
1392 int num_sessions;
1393};
1394
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001395struct hal_cmd_sys_get_property_packet {
1396 u32 size;
1397 u32 packet_type;
1398 u32 num_properties;
1399 u32 rg_property_data[1];
1400};
1401
Umesh Pandey3224e802017-10-12 20:18:58 -07001402struct hal_hdr10_pq_sei {
1403 struct msm_vidc_mastering_display_colour_sei_payload disp_color_sei;
1404 struct msm_vidc_content_light_level_sei_payload cll_sei;
1405};
1406
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001407#define call_hfi_op(q, op, args...) \
1408 (((q) && (q)->op) ? ((q)->op(args)) : 0)
1409
1410struct hfi_device {
1411 void *hfi_device_data;
1412
1413 /*Add function pointers for all the hfi functions below*/
1414 int (*core_init)(void *device);
1415 int (*core_release)(void *device);
1416 int (*core_ping)(void *device);
1417 int (*core_trigger_ssr)(void *device, enum hal_ssr_trigger_type);
1418 int (*session_init)(void *device, void *session_id,
1419 enum hal_domain session_type, enum hal_video_codec codec_type,
1420 void **new_session);
1421 int (*session_end)(void *session);
1422 int (*session_abort)(void *session);
1423 int (*session_set_buffers)(void *sess,
1424 struct vidc_buffer_addr_info *buffer_info);
1425 int (*session_release_buffers)(void *sess,
1426 struct vidc_buffer_addr_info *buffer_info);
1427 int (*session_load_res)(void *sess);
1428 int (*session_release_res)(void *sess);
1429 int (*session_start)(void *sess);
1430 int (*session_continue)(void *sess);
1431 int (*session_stop)(void *sess);
1432 int (*session_etb)(void *sess, struct vidc_frame_data *input_frame);
1433 int (*session_ftb)(void *sess, struct vidc_frame_data *output_frame);
1434 int (*session_process_batch)(void *sess,
1435 int num_etbs, struct vidc_frame_data etbs[],
1436 int num_ftbs, struct vidc_frame_data ftbs[]);
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001437 int (*session_get_buf_req)(void *sess);
1438 int (*session_flush)(void *sess, enum hal_flush flush_mode);
1439 int (*session_set_property)(void *sess, enum hal_property ptype,
1440 void *pdata);
1441 int (*session_get_property)(void *sess, enum hal_property ptype);
Praneeth Paladugub71968b2015-08-19 20:47:57 -07001442 int (*scale_clocks)(void *dev, u32 freq);
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001443 int (*vote_bus)(void *dev, struct vidc_bus_vote_data *data,
1444 int num_data);
1445 int (*get_fw_info)(void *dev, struct hal_fw_info *fw_info);
1446 int (*session_clean)(void *sess);
1447 int (*get_core_capabilities)(void *dev);
1448 int (*suspend)(void *dev);
1449 int (*flush_debug_queue)(void *dev);
Maheshwar Ajja9ff81a22017-08-05 13:25:55 -07001450 int (*noc_error_info)(void *dev);
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001451 enum hal_default_properties (*get_default_properties)(void *dev);
1452};
1453
1454typedef void (*hfi_cmd_response_callback) (enum hal_command_response cmd,
1455 void *data);
1456typedef void (*msm_vidc_callback) (u32 response, void *callback);
1457
1458struct hfi_device *vidc_hfi_initialize(enum msm_vidc_hfi_type hfi_type,
1459 u32 device_id, struct msm_vidc_platform_resources *res,
1460 hfi_cmd_response_callback callback);
1461void vidc_hfi_deinitialize(enum msm_vidc_hfi_type hfi_type,
1462 struct hfi_device *hdev);
1463u32 vidc_get_hfi_domain(enum hal_domain hal_domain);
1464u32 vidc_get_hfi_codec(enum hal_video_codec hal_codec);
1465enum hal_domain vidc_get_hal_domain(u32 hfi_domain);
1466enum hal_video_codec vidc_get_hal_codec(u32 hfi_codec);
1467
1468#endif /*__VIDC_HFI_API_H__ */