1/* $NetBSD: dwb.h,v 1.2 2021/12/18 23:45:05 riastradh Exp $ */ 2 3/* Copyright 2012-17 Advanced Micro Devices, Inc. 4 * 5 * Permission is hereby granted, free of charge, to any person obtaining a 6 * copy of this software and associated documentation files (the "Software"), 7 * to deal in the Software without restriction, including without limitation 8 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 * and/or sell copies of the Software, and to permit persons to whom the 10 * Software is furnished to do so, subject to the following conditions: 11 * 12 * The above copyright notice and this permission notice shall be included in 13 * all copies or substantial portions of the Software. 14 * 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 19 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 20 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 21 * OTHER DEALINGS IN THE SOFTWARE. 22 * 23 * Authors: AMD 24 * 25 */ 26 27#ifndef __DC_DWBC_H__ 28#define __DC_DWBC_H__ 29 30#include "dc_hw_types.h" 31 32 33#define DWB_SW_V2 1 34#define DWB_MCIF_BUF_COUNT 4 35 36/* forward declaration of mcif_wb struct */ 37struct mcif_wb; 38 39enum dce_version; 40 41enum dwb_sw_version { 42 dwb_ver_1_0 = 1, 43 dwb_ver_2_0 = 2, 44}; 45 46enum dwb_source { 47 dwb_src_scl = 0, /* for DCE7x/9x, DCN won't support. */ 48 dwb_src_blnd, /* for DCE7x/9x */ 49 dwb_src_fmt, /* for DCE7x/9x */ 50 dwb_src_otg0 = 0x100, /* for DCN1.x/DCN2.x, register: mmDWB_SOURCE_SELECT */ 51 dwb_src_otg1, /* for DCN1.x/DCN2.x */ 52 dwb_src_otg2, /* for DCN1.x/DCN2.x */ 53 dwb_src_otg3, /* for DCN1.x/DCN2.x */ 54}; 55 56/* DCN1.x, DCN2.x support 2 pipes */ 57enum dwb_pipe { 58 dwb_pipe0 = 0, 59#if defined(CONFIG_DRM_AMD_DC_DCN) 60 dwb_pipe1, 61#endif 62 dwb_pipe_max_num, 63}; 64 65enum dwb_frame_capture_enable { 66 DWB_FRAME_CAPTURE_DISABLE = 0, 67 DWB_FRAME_CAPTURE_ENABLE = 1, 68}; 69 70enum wbscl_coef_filter_type_sel { 71 WBSCL_COEF_LUMA_VERT_FILTER = 0, 72 WBSCL_COEF_CHROMA_VERT_FILTER = 1, 73 WBSCL_COEF_LUMA_HORZ_FILTER = 2, 74 WBSCL_COEF_CHROMA_HORZ_FILTER = 3 75}; 76 77 78struct dwb_warmup_params { 79 bool warmup_en; /* false: normal mode, true: enable pattern generator */ 80 bool warmup_mode; /* false: 420, true: 444 */ 81 bool warmup_depth; /* false: 8bit, true: 10bit */ 82 int warmup_data; /* Data to be sent by pattern generator (same for each pixel component) */ 83 int warmup_width; /* Pattern width (pixels) */ 84 int warmup_height; /* Pattern height (lines) */ 85}; 86 87struct dwb_caps { 88 enum dce_version hw_version; /* DCN engine version. */ 89 enum dwb_sw_version sw_version; /* DWB sw implementation version. */ 90 unsigned int reserved[6]; /* Reserved for future use, MUST BE 0. */ 91 unsigned int adapter_id; 92 unsigned int num_pipes; /* number of DWB pipes */ 93 struct { 94 unsigned int support_dwb :1; 95 unsigned int support_ogam :1; 96 unsigned int support_wbscl :1; 97 unsigned int support_ocsc :1; 98 unsigned int support_stereo :1; 99 } caps; 100 unsigned int reserved2[9]; /* Reserved for future use, MUST BE 0. */ 101}; 102 103struct dwbc { 104 const struct dwbc_funcs *funcs; 105 struct dc_context *ctx; 106 int inst; 107 struct mcif_wb *mcif; 108 bool status; 109 int inputSrcSelect; 110 bool dwb_output_black; 111 enum dc_transfer_func_predefined tf; 112 enum dc_color_space output_color_space; 113 bool dwb_is_efc_transition; 114 bool dwb_is_drc; 115 int wb_src_plane_inst;/*hubp, mpcc, inst*/ 116 bool update_privacymask; 117 uint32_t mask_id; 118 int otg_inst; 119 bool mvc_cfg; 120}; 121 122struct dwbc_funcs { 123 bool (*get_caps)( 124 struct dwbc *dwbc, 125 struct dwb_caps *caps); 126 127 bool (*enable)( 128 struct dwbc *dwbc, 129 struct dc_dwb_params *params); 130 131 bool (*disable)(struct dwbc *dwbc); 132 133 bool (*update)( 134 struct dwbc *dwbc, 135 struct dc_dwb_params *params); 136 137 bool (*is_enabled)( 138 struct dwbc *dwbc); 139 140 void (*set_stereo)( 141 struct dwbc *dwbc, 142 struct dwb_stereo_params *stereo_params); 143 144 void (*set_new_content)( 145 struct dwbc *dwbc, 146 bool is_new_content); 147 148 149 void (*set_warmup)( 150 struct dwbc *dwbc, 151 struct dwb_warmup_params *warmup_params); 152 153 154 bool (*get_dwb_status)( 155 struct dwbc *dwbc); 156 void (*dwb_set_scaler)( 157 struct dwbc *dwbc, 158 struct dc_dwb_params *params); 159}; 160 161#endif 162