brintos

brintos / linux-shallow public Read only

0
0
Text · 7.8 KiB · 45262cb Raw
294 lines · c
1/*2 * Copyright 2012-15 Advanced Micro Devices, Inc.3 *4 * Permission is hereby granted, free of charge, to any person obtaining a5 * copy of this software and associated documentation files (the "Software"),6 * to deal in the Software without restriction, including without limitation7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,8 * and/or sell copies of the Software, and to permit persons to whom the9 * Software is furnished to do so, subject to the following conditions:10 *11 * The above copyright notice and this permission notice shall be included in12 * all copies or substantial portions of the Software.13 *14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL17 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR18 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR20 * OTHER DEALINGS IN THE SOFTWARE.21 *22 * Authors: AMD23 *24 */25 26#ifndef __DAL_TRANSFORM_H__27#define __DAL_TRANSFORM_H__28 29#include "hw_shared.h"30#include "dc_hw_types.h"31#include "fixed31_32.h"32#include "spl/dc_spl_types.h"33 34#define CSC_TEMPERATURE_MATRIX_SIZE 1235 36struct bit_depth_reduction_params;37 38struct transform {39	const struct transform_funcs *funcs;40	struct dc_context *ctx;41	int inst;42	struct dpp_caps *caps;43	struct pwl_params regamma_params;44};45 46/* Colorimetry */47enum colorimetry {48	COLORIMETRY_NO_DATA = 0,49	COLORIMETRY_ITU601 = 1,50	COLORIMETRY_ITU709 = 2,51	COLORIMETRY_EXTENDED = 352};53 54enum colorimetry_ext {55	COLORIMETRYEX_XVYCC601 = 0,56	COLORIMETRYEX_XVYCC709 = 1,57	COLORIMETRYEX_SYCC601 = 2,58	COLORIMETRYEX_ADOBEYCC601 = 3,59	COLORIMETRYEX_ADOBERGB = 4,60	COLORIMETRYEX_BT2020YCC = 5,61	COLORIMETRYEX_BT2020RGBYCBCR = 6,62	COLORIMETRYEX_RESERVED = 763};64 65enum active_format_info {66	ACTIVE_FORMAT_NO_DATA = 0,67	ACTIVE_FORMAT_VALID = 168};69 70/* Active format aspect ratio */71enum active_format_aspect_ratio {72	ACTIVE_FORMAT_ASPECT_RATIO_SAME_AS_PICTURE = 8,73	ACTIVE_FORMAT_ASPECT_RATIO_4_3 = 9,74	ACTIVE_FORMAT_ASPECT_RATIO_16_9 = 0XA,75	ACTIVE_FORMAT_ASPECT_RATIO_14_9 = 0XB76};77 78enum bar_info {79	BAR_INFO_NOT_VALID = 0,80	BAR_INFO_VERTICAL_VALID = 1,81	BAR_INFO_HORIZONTAL_VALID = 2,82	BAR_INFO_BOTH_VALID = 383};84 85enum picture_scaling {86	PICTURE_SCALING_UNIFORM = 0,87	PICTURE_SCALING_HORIZONTAL = 1,88	PICTURE_SCALING_VERTICAL = 2,89	PICTURE_SCALING_BOTH = 390};91 92/* RGB quantization range */93enum rgb_quantization_range {94	RGB_QUANTIZATION_DEFAULT_RANGE = 0,95	RGB_QUANTIZATION_LIMITED_RANGE = 1,96	RGB_QUANTIZATION_FULL_RANGE = 2,97	RGB_QUANTIZATION_RESERVED = 398};99 100/* YYC quantization range */101enum yyc_quantization_range {102	YYC_QUANTIZATION_LIMITED_RANGE = 0,103	YYC_QUANTIZATION_FULL_RANGE = 1,104	YYC_QUANTIZATION_RESERVED2 = 2,105	YYC_QUANTIZATION_RESERVED3 = 3106};107 108enum graphics_gamut_adjust_type {109	GRAPHICS_GAMUT_ADJUST_TYPE_BYPASS = 0,110	GRAPHICS_GAMUT_ADJUST_TYPE_HW, /* without adjustments */111	GRAPHICS_GAMUT_ADJUST_TYPE_SW /* use adjustments */112};113 114struct xfm_grph_csc_adjustment {115	struct fixed31_32 temperature_matrix[CSC_TEMPERATURE_MATRIX_SIZE];116	enum graphics_gamut_adjust_type gamut_adjust_type;117};118 119struct overscan_info {120	int left;121	int right;122	int top;123	int bottom;124};125 126struct scaling_ratios {127	struct fixed31_32 horz;128	struct fixed31_32 vert;129	struct fixed31_32 horz_c;130	struct fixed31_32 vert_c;131};132 133struct sharpness_adj {134	int horz;135	int vert;136};137 138struct line_buffer_params {139	bool alpha_en;140	bool pixel_expan_mode;141	bool interleave_en;142	int dynamic_pixel_depth;143	enum lb_pixel_depth depth;144};145 146struct scl_inits {147	struct fixed31_32 h;148	struct fixed31_32 h_c;149	struct fixed31_32 v;150	struct fixed31_32 v_c;151};152 153struct scaler_data {154	int h_active;155	int v_active;156	struct scaling_taps taps;157	struct rect viewport;158	struct rect viewport_c;159	struct rect recout;160	struct scaling_ratios ratios;161	struct scl_inits inits;162	struct sharpness_adj sharpness;163	enum pixel_format format;164	struct line_buffer_params lb_params;165	// Below struct holds the scaler values to program hw registers166	struct dscl_prog_data dscl_prog_data;167};168 169struct transform_funcs {170	void (*transform_reset)(struct transform *xfm);171 172	void (*transform_set_scaler)(struct transform *xfm,173			const struct scaler_data *scl_data);174 175	void (*transform_set_pixel_storage_depth)(176			struct transform *xfm,177			enum lb_pixel_depth depth,178			const struct bit_depth_reduction_params *bit_depth_params);179 180	bool (*transform_get_optimal_number_of_taps)(181			struct transform *xfm,182			struct scaler_data *scl_data,183			const struct scaling_taps *in_taps);184 185	void (*transform_set_gamut_remap)(186			struct transform *xfm,187			const struct xfm_grph_csc_adjustment *adjust);188 189	void (*opp_set_csc_default)(190		struct transform *xfm,191		const struct default_adjustment *default_adjust);192 193	void (*opp_set_csc_adjustment)(194		struct transform *xfm,195		const struct out_csc_color_matrix *tbl_entry);196 197	void (*opp_power_on_regamma_lut)(198		struct transform *xfm,199		bool power_on);200 201	void (*opp_program_regamma_lut)(202			struct transform *xfm,203			const struct pwl_result_data *rgb,204			uint32_t num);205 206	void (*opp_configure_regamma_lut)(207			struct transform *xfm,208			bool is_ram_a);209 210	void (*opp_program_regamma_lutb_settings)(211			struct transform *xfm,212			const struct pwl_params *params);213 214	void (*opp_program_regamma_luta_settings)(215			struct transform *xfm,216			const struct pwl_params *params);217 218	void (*opp_program_regamma_pwl)(219		struct transform *xfm, const struct pwl_params *params);220 221	void (*opp_set_regamma_mode)(222			struct transform *xfm_base,223			enum opp_regamma mode);224 225	void (*ipp_set_degamma)(226			struct transform *xfm_base,227			enum ipp_degamma_mode mode);228 229	void (*ipp_program_input_lut)(230			struct transform *xfm_base,231			const struct dc_gamma *gamma);232 233	void (*ipp_program_degamma_pwl)(struct transform *xfm_base,234									 const struct pwl_params *params);235 236	void (*ipp_setup)(237			struct transform *xfm_base,238			enum surface_pixel_format format,239			enum expansion_mode mode,240			struct dc_csc_transform input_csc_color_matrix,241			enum dc_color_space input_color_space);242 243	void (*ipp_full_bypass)(struct transform *xfm_base);244 245	void (*set_cursor_attributes)(246			struct transform *xfm_base,247			const struct dc_cursor_attributes *attr);248};249 250const uint16_t *get_filter_2tap_16p(void);251const uint16_t *get_filter_2tap_64p(void);252const uint16_t *get_filter_3tap_16p(struct fixed31_32 ratio);253const uint16_t *get_filter_3tap_64p(struct fixed31_32 ratio);254const uint16_t *get_filter_4tap_16p(struct fixed31_32 ratio);255const uint16_t *get_filter_4tap_64p(struct fixed31_32 ratio);256const uint16_t *get_filter_5tap_64p(struct fixed31_32 ratio);257const uint16_t *get_filter_6tap_64p(struct fixed31_32 ratio);258const uint16_t *get_filter_7tap_64p(struct fixed31_32 ratio);259const uint16_t *get_filter_8tap_64p(struct fixed31_32 ratio);260 261 262/* Defines the pixel processing capability of the DSCL */263enum dscl_data_processing_format {264	DSCL_DATA_PRCESSING_FIXED_FORMAT,	/* The DSCL processes pixel data in fixed format */265	DSCL_DATA_PRCESSING_FLOAT_FORMAT,	/* The DSCL processes pixel data in float format */266};267 268/*269 * The DPP capabilities structure contains enumerations to specify the270 * HW processing features and an associated function pointers to271 * provide the function interface that can be overloaded for implementations272 * based on different capabilities273 */274struct dpp_caps {275	/* DSCL processing pixel data in fixed or float format */276	enum dscl_data_processing_format dscl_data_proc_format;277 278	/* max LB partitions */279	unsigned int max_lb_partitions;280 281	/* Calculates the number of partitions in the line buffer.282	 * The implementation of this function is overloaded for283	 * different versions of DSCL LB.284	 */285	void (*dscl_calc_lb_num_partitions)(286			const struct scaler_data *scl_data,287			enum lb_memory_config lb_config,288			int *num_part_y,289			int *num_part_c);290};291 292 293#endif294