1  // SPDX-License-Identifier: MIT
2  //
3  // Copyright 2024 Advanced Micro Devices, Inc.
4  
5  #ifndef __DC_SPL_TYPES_H__
6  #define __DC_SPL_TYPES_H__
7  
8  #include "spl_os_types.h"   // swap
9  #ifndef SPL_ASSERT
10  #define SPL_ASSERT(_bool) ((void *)0)
11  #endif
12  #include "spl_fixpt31_32.h"	// fixed31_32 and related functions
13  #include "spl_custom_float.h" // custom float and related functions
14  
15  struct spl_size {
16  	uint32_t width;
17  	uint32_t height;
18  };
19  struct spl_rect	{
20  	int x;
21  	int y;
22  	int width;
23  	int height;
24  };
25  
26  struct spl_ratios {
27  	struct spl_fixed31_32 horz;
28  	struct spl_fixed31_32 vert;
29  	struct spl_fixed31_32 horz_c;
30  	struct spl_fixed31_32 vert_c;
31  };
32  struct spl_inits {
33  	struct spl_fixed31_32 h;
34  	struct spl_fixed31_32 h_c;
35  	struct spl_fixed31_32 v;
36  	struct spl_fixed31_32 v_c;
37  };
38  
39  struct spl_taps	{
40  	uint32_t v_taps;
41  	uint32_t h_taps;
42  	uint32_t v_taps_c;
43  	uint32_t h_taps_c;
44  	bool integer_scaling;
45  };
46  enum spl_view_3d {
47  	SPL_VIEW_3D_NONE = 0,
48  	SPL_VIEW_3D_FRAME_SEQUENTIAL,
49  	SPL_VIEW_3D_SIDE_BY_SIDE,
50  	SPL_VIEW_3D_TOP_AND_BOTTOM,
51  	SPL_VIEW_3D_COUNT,
52  	SPL_VIEW_3D_FIRST = SPL_VIEW_3D_FRAME_SEQUENTIAL
53  };
54  /* Pixel format */
55  enum spl_pixel_format {
56  	/*graph*/
57  	SPL_PIXEL_FORMAT_UNINITIALIZED,
58  	SPL_PIXEL_FORMAT_INDEX8,
59  	SPL_PIXEL_FORMAT_RGB565,
60  	SPL_PIXEL_FORMAT_ARGB8888,
61  	SPL_PIXEL_FORMAT_ARGB2101010,
62  	SPL_PIXEL_FORMAT_ARGB2101010_XRBIAS,
63  	SPL_PIXEL_FORMAT_FP16,
64  	/*video*/
65  	SPL_PIXEL_FORMAT_420BPP8,
66  	SPL_PIXEL_FORMAT_420BPP10,
67  	/*end of pixel format definition*/
68  	SPL_PIXEL_FORMAT_INVALID,
69  	SPL_PIXEL_FORMAT_422BPP8,
70  	SPL_PIXEL_FORMAT_422BPP10,
71  	SPL_PIXEL_FORMAT_GRPH_BEGIN = SPL_PIXEL_FORMAT_INDEX8,
72  	SPL_PIXEL_FORMAT_GRPH_END = SPL_PIXEL_FORMAT_FP16,
73  	SPL_PIXEL_FORMAT_VIDEO_BEGIN = SPL_PIXEL_FORMAT_420BPP8,
74  	SPL_PIXEL_FORMAT_VIDEO_END = SPL_PIXEL_FORMAT_420BPP10,
75  	SPL_PIXEL_FORMAT_UNKNOWN
76  };
77  
78  enum lb_memory_config {
79  	/* Enable all 3 pieces of memory */
80  	LB_MEMORY_CONFIG_0 = 0,
81  
82  	/* Enable only the first piece of memory */
83  	LB_MEMORY_CONFIG_1 = 1,
84  
85  	/* Enable only the second piece of memory */
86  	LB_MEMORY_CONFIG_2 = 2,
87  
88  	/* Only applicable in 4:2:0 mode, enable all 3 pieces of memory and the
89  	 * last piece of chroma memory used for the luma storage
90  	 */
91  	LB_MEMORY_CONFIG_3 = 3
92  };
93  
94  /* Rotation angle */
95  enum spl_rotation_angle {
96  	SPL_ROTATION_ANGLE_0 = 0,
97  	SPL_ROTATION_ANGLE_90,
98  	SPL_ROTATION_ANGLE_180,
99  	SPL_ROTATION_ANGLE_270,
100  	SPL_ROTATION_ANGLE_COUNT
101  };
102  enum spl_color_space {
103  	SPL_COLOR_SPACE_UNKNOWN,
104  	SPL_COLOR_SPACE_SRGB,
105  	SPL_COLOR_SPACE_XR_RGB,
106  	SPL_COLOR_SPACE_SRGB_LIMITED,
107  	SPL_COLOR_SPACE_MSREF_SCRGB,
108  	SPL_COLOR_SPACE_YCBCR601,
109  	SPL_COLOR_SPACE_YCBCR709,
110  	SPL_COLOR_SPACE_XV_YCC_709,
111  	SPL_COLOR_SPACE_XV_YCC_601,
112  	SPL_COLOR_SPACE_YCBCR601_LIMITED,
113  	SPL_COLOR_SPACE_YCBCR709_LIMITED,
114  	SPL_COLOR_SPACE_2020_RGB_FULLRANGE,
115  	SPL_COLOR_SPACE_2020_RGB_LIMITEDRANGE,
116  	SPL_COLOR_SPACE_2020_YCBCR,
117  	SPL_COLOR_SPACE_ADOBERGB,
118  	SPL_COLOR_SPACE_DCIP3,
119  	SPL_COLOR_SPACE_DISPLAYNATIVE,
120  	SPL_COLOR_SPACE_DOLBYVISION,
121  	SPL_COLOR_SPACE_APPCTRL,
122  	SPL_COLOR_SPACE_CUSTOMPOINTS,
123  	SPL_COLOR_SPACE_YCBCR709_BLACK,
124  };
125  
126  enum chroma_cositing {
127  	CHROMA_COSITING_NONE,
128  	CHROMA_COSITING_LEFT,
129  	CHROMA_COSITING_TOPLEFT,
130  	CHROMA_COSITING_COUNT
131  };
132  
133  // Scratch space for calculating scaler params
134  struct spl_scaler_data {
135  	int h_active;
136  	int v_active;
137  	struct spl_taps taps;
138  	struct spl_rect viewport;
139  	struct spl_rect viewport_c;
140  	struct spl_rect recout;
141  	struct spl_ratios ratios;
142  	struct spl_ratios recip_ratios;
143  	struct spl_inits inits;
144  };
145  
146  enum spl_transfer_func_type {
147  	SPL_TF_TYPE_PREDEFINED,
148  	SPL_TF_TYPE_DISTRIBUTED_POINTS,
149  	SPL_TF_TYPE_BYPASS,
150  	SPL_TF_TYPE_HWPWL
151  };
152  
153  enum spl_transfer_func_predefined {
154  	SPL_TRANSFER_FUNCTION_SRGB,
155  	SPL_TRANSFER_FUNCTION_BT709,
156  	SPL_TRANSFER_FUNCTION_PQ,
157  	SPL_TRANSFER_FUNCTION_LINEAR,
158  	SPL_TRANSFER_FUNCTION_UNITY,
159  	SPL_TRANSFER_FUNCTION_HLG,
160  	SPL_TRANSFER_FUNCTION_HLG12,
161  	SPL_TRANSFER_FUNCTION_GAMMA22,
162  	SPL_TRANSFER_FUNCTION_GAMMA24,
163  	SPL_TRANSFER_FUNCTION_GAMMA26
164  };
165  
166  /*==============================================================*/
167  /* Below structs are defined to hold hw register data */
168  
169  // SPL output is used to set below registers
170  
171  // MPC_SIZE - set based on scl_data h_active and v_active
172  struct mpc_size	{
173  	uint32_t width;
174  	uint32_t height;
175  };
176  // SCL_MODE - set based on scl_data.ratios and always_scale
177  enum scl_mode {
178  	SCL_MODE_SCALING_444_BYPASS = 0,
179  	SCL_MODE_SCALING_444_RGB_ENABLE = 1,
180  	SCL_MODE_SCALING_444_YCBCR_ENABLE = 2,
181  	SCL_MODE_SCALING_420_YCBCR_ENABLE = 3,
182  	SCL_MODE_SCALING_420_LUMA_BYPASS = 4,
183  	SCL_MODE_SCALING_420_CHROMA_BYPASS = 5,
184  	SCL_MODE_DSCL_BYPASS = 6
185  };
186  // SCL_BLACK_COLOR - set based on scl_data.format
187  struct scl_black_color	{
188  	uint32_t offset_rgb_y;
189  	uint32_t offset_rgb_cbcr;
190  };
191  // RATIO - set based on scl_data.ratios
192  struct ratio	{
193  	uint32_t h_scale_ratio;
194  	uint32_t v_scale_ratio;
195  	uint32_t h_scale_ratio_c;
196  	uint32_t v_scale_ratio_c;
197  };
198  
199  // INIT - set based on scl_data.init
200  struct init	{
201  	// SCL_HORZ_FILTER_INIT
202  	uint32_t h_filter_init_frac;	//	SCL_H_INIT_FRAC
203  	uint32_t h_filter_init_int;	//	SCL_H_INIT_INT
204  	// SCL_HORZ_FILTER_INIT_C
205  	uint32_t h_filter_init_frac_c;	//	SCL_H_INIT_FRAC_C
206  	uint32_t h_filter_init_int_c;	//	SCL_H_INIT_INT_C
207  	// SCL_VERT_FILTER_INIT
208  	uint32_t v_filter_init_frac;	//	SCL_V_INIT_FRAC
209  	uint32_t v_filter_init_int;	//	SCL_V_INIT_INT
210  	//	SCL_VERT_FILTER_INIT_C
211  	uint32_t v_filter_init_frac_c;	//	SCL_V_INIT_FRAC_C
212  	uint32_t v_filter_init_int_c;	//	SCL_V_INIT_INT_C
213  	//	SCL_VERT_FILTER_INIT_BOT
214  	uint32_t v_filter_init_bot_frac;	//	SCL_V_INIT_FRAC_BOT
215  	uint32_t v_filter_init_bot_int;	//	SCL_V_INIT_INT_BOT
216  	//	SCL_VERT_FILTER_INIT_BOT_C
217  	uint32_t v_filter_init_bot_frac_c;	//	SCL_V_INIT_FRAC_BOT_C
218  	uint32_t v_filter_init_bot_int_c;	//	SCL_V_INIT_INT_BOT_C
219  };
220  
221  // FILTER - calculated based on scl_data ratios and taps
222  
223  // iSHARP
224  struct isharp_noise_det {
225  	uint32_t enable;	// ISHARP_NOISEDET_EN
226  	uint32_t mode;		// ISHARP_NOISEDET_MODE
227  	uint32_t uthreshold;	// ISHARP_NOISEDET_UTHRE
228  	uint32_t dthreshold;	// ISHARP_NOISEDET_DTHRE
229  	uint32_t pwl_start_in;	// ISHARP_NOISEDET_PWL_START_IN
230  	uint32_t pwl_end_in;	// ISHARP_NOISEDET_PWL_END_IN
231  	uint32_t pwl_slope;	// ISHARP_NOISEDET_PWL_SLOPE
232  };
233  struct isharp_lba	{
234  	uint32_t mode;	// ISHARP_LBA_MODE
235  	uint32_t in_seg[6];
236  	uint32_t base_seg[6];
237  	uint32_t slope_seg[6];
238  };
239  struct isharp_fmt	{
240  	uint32_t mode;	// ISHARP_FMT_MODE
241  	uint32_t norm;	// ISHARP_FMT_NORM
242  };
243  struct isharp_nldelta_sclip	{
244  	uint32_t enable_p;	// ISHARP_NLDELTA_SCLIP_EN_P
245  	uint32_t pivot_p;	// ISHARP_NLDELTA_SCLIP_PIVOT_P
246  	uint32_t slope_p;	// ISHARP_NLDELTA_SCLIP_SLOPE_P
247  	uint32_t enable_n;	// ISHARP_NLDELTA_SCLIP_EN_N
248  	uint32_t pivot_n;	// ISHARP_NLDELTA_SCLIP_PIVOT_N
249  	uint32_t slope_n;	// ISHARP_NLDELTA_SCLIP_SLOPE_N
250  };
251  enum isharp_en	{
252  	ISHARP_DISABLE,
253  	ISHARP_ENABLE
254  };
255  // Below struct holds values that can be directly used to program
256  // hardware registers. No conversion/clamping is required
257  struct dscl_prog_data {
258  	struct spl_rect recout; // RECOUT - set based on scl_data.recout
259  	struct mpc_size mpc_size;
260  	uint32_t dscl_mode;
261  	struct scl_black_color scl_black_color;
262  	struct ratio ratios;
263  	struct init init;
264  	struct spl_taps taps;	// TAPS - set based on scl_data.taps
265  	struct spl_rect viewport;
266  	struct spl_rect viewport_c;
267  	// raw filter
268  	const uint16_t *filter_h;
269  	const uint16_t *filter_v;
270  	const uint16_t *filter_h_c;
271  	const uint16_t *filter_v_c;
272  	// EASF registers
273  	uint32_t easf_matrix_mode;
274  	uint32_t easf_ltonl_en;
275  	uint32_t easf_v_en;
276  	uint32_t easf_v_sharp_factor;
277  	uint32_t easf_v_ring;
278  	uint32_t easf_v_bf1_en;
279  	uint32_t easf_v_bf2_mode;
280  	uint32_t easf_v_bf3_mode;
281  	uint32_t easf_v_bf2_flat1_gain;
282  	uint32_t easf_v_bf2_flat2_gain;
283  	uint32_t easf_v_bf2_roc_gain;
284  	uint32_t easf_v_ringest_3tap_dntilt_uptilt;
285  	uint32_t easf_v_ringest_3tap_uptilt_max;
286  	uint32_t easf_v_ringest_3tap_dntilt_slope;
287  	uint32_t easf_v_ringest_3tap_uptilt1_slope;
288  	uint32_t easf_v_ringest_3tap_uptilt2_slope;
289  	uint32_t easf_v_ringest_3tap_uptilt2_offset;
290  	uint32_t easf_v_ringest_eventap_reduceg1;
291  	uint32_t easf_v_ringest_eventap_reduceg2;
292  	uint32_t easf_v_ringest_eventap_gain1;
293  	uint32_t easf_v_ringest_eventap_gain2;
294  	uint32_t easf_v_bf_maxa;
295  	uint32_t easf_v_bf_maxb;
296  	uint32_t easf_v_bf_mina;
297  	uint32_t easf_v_bf_minb;
298  	uint32_t easf_v_bf1_pwl_in_seg0;
299  	uint32_t easf_v_bf1_pwl_base_seg0;
300  	uint32_t easf_v_bf1_pwl_slope_seg0;
301  	uint32_t easf_v_bf1_pwl_in_seg1;
302  	uint32_t easf_v_bf1_pwl_base_seg1;
303  	uint32_t easf_v_bf1_pwl_slope_seg1;
304  	uint32_t easf_v_bf1_pwl_in_seg2;
305  	uint32_t easf_v_bf1_pwl_base_seg2;
306  	uint32_t easf_v_bf1_pwl_slope_seg2;
307  	uint32_t easf_v_bf1_pwl_in_seg3;
308  	uint32_t easf_v_bf1_pwl_base_seg3;
309  	uint32_t easf_v_bf1_pwl_slope_seg3;
310  	uint32_t easf_v_bf1_pwl_in_seg4;
311  	uint32_t easf_v_bf1_pwl_base_seg4;
312  	uint32_t easf_v_bf1_pwl_slope_seg4;
313  	uint32_t easf_v_bf1_pwl_in_seg5;
314  	uint32_t easf_v_bf1_pwl_base_seg5;
315  	uint32_t easf_v_bf1_pwl_slope_seg5;
316  	uint32_t easf_v_bf1_pwl_in_seg6;
317  	uint32_t easf_v_bf1_pwl_base_seg6;
318  	uint32_t easf_v_bf1_pwl_slope_seg6;
319  	uint32_t easf_v_bf1_pwl_in_seg7;
320  	uint32_t easf_v_bf1_pwl_base_seg7;
321  	uint32_t easf_v_bf3_pwl_in_set0;
322  	uint32_t easf_v_bf3_pwl_base_set0;
323  	uint32_t easf_v_bf3_pwl_slope_set0;
324  	uint32_t easf_v_bf3_pwl_in_set1;
325  	uint32_t easf_v_bf3_pwl_base_set1;
326  	uint32_t easf_v_bf3_pwl_slope_set1;
327  	uint32_t easf_v_bf3_pwl_in_set2;
328  	uint32_t easf_v_bf3_pwl_base_set2;
329  	uint32_t easf_v_bf3_pwl_slope_set2;
330  	uint32_t easf_v_bf3_pwl_in_set3;
331  	uint32_t easf_v_bf3_pwl_base_set3;
332  	uint32_t easf_v_bf3_pwl_slope_set3;
333  	uint32_t easf_v_bf3_pwl_in_set4;
334  	uint32_t easf_v_bf3_pwl_base_set4;
335  	uint32_t easf_v_bf3_pwl_slope_set4;
336  	uint32_t easf_v_bf3_pwl_in_set5;
337  	uint32_t easf_v_bf3_pwl_base_set5;
338  	uint32_t easf_h_en;
339  	uint32_t easf_h_sharp_factor;
340  	uint32_t easf_h_ring;
341  	uint32_t easf_h_bf1_en;
342  	uint32_t easf_h_bf2_mode;
343  	uint32_t easf_h_bf3_mode;
344  	uint32_t easf_h_bf2_flat1_gain;
345  	uint32_t easf_h_bf2_flat2_gain;
346  	uint32_t easf_h_bf2_roc_gain;
347  	uint32_t easf_h_ringest_eventap_reduceg1;
348  	uint32_t easf_h_ringest_eventap_reduceg2;
349  	uint32_t easf_h_ringest_eventap_gain1;
350  	uint32_t easf_h_ringest_eventap_gain2;
351  	uint32_t easf_h_bf_maxa;
352  	uint32_t easf_h_bf_maxb;
353  	uint32_t easf_h_bf_mina;
354  	uint32_t easf_h_bf_minb;
355  	uint32_t easf_h_bf1_pwl_in_seg0;
356  	uint32_t easf_h_bf1_pwl_base_seg0;
357  	uint32_t easf_h_bf1_pwl_slope_seg0;
358  	uint32_t easf_h_bf1_pwl_in_seg1;
359  	uint32_t easf_h_bf1_pwl_base_seg1;
360  	uint32_t easf_h_bf1_pwl_slope_seg1;
361  	uint32_t easf_h_bf1_pwl_in_seg2;
362  	uint32_t easf_h_bf1_pwl_base_seg2;
363  	uint32_t easf_h_bf1_pwl_slope_seg2;
364  	uint32_t easf_h_bf1_pwl_in_seg3;
365  	uint32_t easf_h_bf1_pwl_base_seg3;
366  	uint32_t easf_h_bf1_pwl_slope_seg3;
367  	uint32_t easf_h_bf1_pwl_in_seg4;
368  	uint32_t easf_h_bf1_pwl_base_seg4;
369  	uint32_t easf_h_bf1_pwl_slope_seg4;
370  	uint32_t easf_h_bf1_pwl_in_seg5;
371  	uint32_t easf_h_bf1_pwl_base_seg5;
372  	uint32_t easf_h_bf1_pwl_slope_seg5;
373  	uint32_t easf_h_bf1_pwl_in_seg6;
374  	uint32_t easf_h_bf1_pwl_base_seg6;
375  	uint32_t easf_h_bf1_pwl_slope_seg6;
376  	uint32_t easf_h_bf1_pwl_in_seg7;
377  	uint32_t easf_h_bf1_pwl_base_seg7;
378  	uint32_t easf_h_bf3_pwl_in_set0;
379  	uint32_t easf_h_bf3_pwl_base_set0;
380  	uint32_t easf_h_bf3_pwl_slope_set0;
381  	uint32_t easf_h_bf3_pwl_in_set1;
382  	uint32_t easf_h_bf3_pwl_base_set1;
383  	uint32_t easf_h_bf3_pwl_slope_set1;
384  	uint32_t easf_h_bf3_pwl_in_set2;
385  	uint32_t easf_h_bf3_pwl_base_set2;
386  	uint32_t easf_h_bf3_pwl_slope_set2;
387  	uint32_t easf_h_bf3_pwl_in_set3;
388  	uint32_t easf_h_bf3_pwl_base_set3;
389  	uint32_t easf_h_bf3_pwl_slope_set3;
390  	uint32_t easf_h_bf3_pwl_in_set4;
391  	uint32_t easf_h_bf3_pwl_base_set4;
392  	uint32_t easf_h_bf3_pwl_slope_set4;
393  	uint32_t easf_h_bf3_pwl_in_set5;
394  	uint32_t easf_h_bf3_pwl_base_set5;
395  	uint32_t easf_matrix_c0;
396  	uint32_t easf_matrix_c1;
397  	uint32_t easf_matrix_c2;
398  	uint32_t easf_matrix_c3;
399  	// iSharp
400  	uint32_t isharp_en;     //      ISHARP_EN
401  	struct isharp_noise_det isharp_noise_det;       //      ISHARP_NOISEDET
402  	uint32_t isharp_nl_en;  //      ISHARP_NL_EN ? TODO:check this
403  	struct isharp_lba isharp_lba;   //      ISHARP_LBA
404  	struct isharp_fmt isharp_fmt;   //      ISHARP_FMT
405  	const uint32_t *isharp_delta;
406  	struct isharp_nldelta_sclip isharp_nldelta_sclip;       //      ISHARP_NLDELTA_SCLIP
407  	/* blur and scale filter */
408  	const uint16_t *filter_blur_scale_v;
409  	const uint16_t *filter_blur_scale_h;
410  	int sharpness_level; /* Track sharpness level */
411  };
412  
413  /* SPL input and output definitions */
414  // SPL scratch struct
415  struct spl_scratch {
416  	// Pack all SPL outputs in scl_data
417  	struct spl_scaler_data scl_data;
418  };
419  
420  /* SPL input and output definitions */
421  // SPL outputs struct
422  struct spl_out	{
423  	// Pack all output need to program hw registers
424  	struct dscl_prog_data *dscl_prog_data;
425  };
426  
427  // end of SPL outputs
428  
429  // SPL inputs
430  
431  // Basic input information
432  struct basic_in	{
433  	enum spl_pixel_format format; // Pixel Format
434  	enum chroma_cositing cositing; /* Chroma Subsampling Offset */
435  	struct spl_rect src_rect; // Source rect
436  	struct spl_rect dst_rect; // Destination Rect
437  	struct spl_rect clip_rect; // Clip rect
438  	enum spl_rotation_angle rotation;  // Rotation
439  	bool horizontal_mirror;  // Horizontal mirror
440  	int mpc_combine_h; // MPC Horizontal Combine Factor (split_count)
441  	int mpc_combine_v; // MPC Vertical Combine Factor (split_idx)
442  	// Inputs for adaptive scaler - TODO
443  	enum spl_transfer_func_type tf_type; /* Transfer function type */
444  	enum spl_transfer_func_predefined tf_predefined_type; /* Transfer function predefined type */
445  	// enum dc_transfer_func_predefined tf;
446  	enum spl_color_space color_space;	//	Color Space
447  	unsigned int max_luminance;	//	Max Luminance TODO: Is determined in dc_hw_sequencer.c is_sdr
448  	bool film_grain_applied;	//	Film Grain Applied // TODO: To check from where to get this?
449  };
450  
451  // Basic output information
452  struct basic_out {
453  	struct spl_size output_size; // Output Size
454  	struct spl_rect dst_rect;	// Destination Rect
455  	struct spl_rect src_rect;	// Source rect
456  	int odm_combine_factor;	// deprecated
457  	struct spl_rect odm_slice_rect; // OPP input rect in timing active
458  	enum spl_view_3d view_format;	// TODO: View format Check if it is chroma subsampling
459  	bool always_scale;	// Is always scale enabled? Required for getting SCL_MODE
460  	int max_downscale_src_width; // Required to get optimal no of taps
461  	bool alpha_en;
462  	bool use_two_pixels_per_container;
463  };
464  enum sharpness_setting	{
465  	SHARPNESS_HW_OFF = 0,
466  	SHARPNESS_ZERO,
467  	SHARPNESS_CUSTOM
468  };
469  struct spl_sharpness_range {
470  	int sdr_rgb_min;
471  	int sdr_rgb_max;
472  	int sdr_rgb_mid;
473  	int sdr_yuv_min;
474  	int sdr_yuv_max;
475  	int sdr_yuv_mid;
476  	int hdr_rgb_min;
477  	int hdr_rgb_max;
478  	int hdr_rgb_mid;
479  };
480  struct adaptive_sharpness {
481  	bool enable;
482  	int sharpness_level;
483  	struct spl_sharpness_range sharpness_range;
484  };
485  enum linear_light_scaling	{	// convert it in translation logic
486  	LLS_PREF_DONT_CARE = 0,
487  	LLS_PREF_YES,
488  	LLS_PREF_NO
489  };
490  enum sharpen_policy {
491  	SHARPEN_ALWAYS = 0,
492  	SHARPEN_YUV = 1,
493  	SHARPEN_RGB_FULLSCREEN_YUV = 2,
494  	SHARPEN_FULLSCREEN_ALL = 3
495  };
496  enum scale_to_sharpness_policy {
497  	NO_SCALE_TO_SHARPNESS_ADJ = 0,
498  	SCALE_TO_SHARPNESS_ADJ_YUV = 1,
499  	SCALE_TO_SHARPNESS_ADJ_ALL = 2
500  };
501  struct spl_funcs	{
502  	void (*spl_calc_lb_num_partitions)
503  		(bool alpha_en,
504  		const struct spl_scaler_data *scl_data,
505  		enum lb_memory_config lb_config,
506  		int *num_part_y,
507  		int *num_part_c);
508  };
509  
510  struct spl_debug {
511  	int visual_confirm_base_offset;
512  	int visual_confirm_dpp_offset;
513  	enum sharpen_policy sharpen_policy;
514  	enum scale_to_sharpness_policy scale_to_sharpness_policy;
515  };
516  
517  struct spl_in	{
518  	struct basic_out basic_out;
519  	struct basic_in basic_in;
520  	// Basic slice information
521  	int odm_slice_index;	// ODM Slice Index using get_odm_split_index
522  	struct spl_taps scaling_quality; // Explicit Scaling Quality
523  	struct spl_funcs *funcs;
524  	// Inputs for isharp and EASF
525  	struct adaptive_sharpness adaptive_sharpness;	//	Adaptive Sharpness
526  	enum linear_light_scaling lls_pref;	//	Linear Light Scaling
527  	bool prefer_easf;
528  	bool disable_easf;
529  	struct spl_debug debug;
530  	bool is_fullscreen;
531  	bool is_hdr_on;
532  	int h_active;
533  	int v_active;
534  	int sdr_white_level_nits;
535  };
536  // end of SPL inputs
537  
538  #endif /* __DC_SPL_TYPES_H__ */
539