aboutsummaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/amd/display/dc/inc/hw/dwb.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/display/dc/inc/hw/dwb.h')
-rw-r--r--drivers/gpu/drm/amd/display/dc/inc/hw/dwb.h193
1 files changed, 193 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/display/dc/inc/hw/dwb.h b/drivers/gpu/drm/amd/display/dc/inc/hw/dwb.h
new file mode 100644
index 000000000000..82347ba480fe
--- /dev/null
+++ b/drivers/gpu/drm/amd/display/dc/inc/hw/dwb.h
@@ -0,0 +1,193 @@
+/* Copyright 2012-17 Advanced Micro Devices, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Authors: AMD
+ *
+ */
+
+#ifndef __DC_DWBC_H__
+#define __DC_DWBC_H__
+
+#include "dc_hw_types.h"
+
+#define MAX_DWB_PIPES 3
+
+enum dce_version;
+
+enum dwb_sw_version {
+ dwb_ver_1_0 = 1,
+};
+
+enum dwb_source {
+ dwb_src_scl = 0, /* for DCE7x/9x, DCN won't support. */
+ dwb_src_blnd, /* for DCE7x/9x */
+ dwb_src_fmt, /* for DCE7x/9x */
+#if defined(CONFIG_DRM_AMD_DC_DCN1_0)
+ dwb_src_otg0 = 0x100, /* for DCN1.x, register: mmDWB_SOURCE_SELECT */
+ dwb_src_otg1, /* for DCN1.x */
+ dwb_src_otg2, /* for DCN1.x */
+ dwb_src_otg3, /* for DCN1.x */
+#endif
+};
+
+#if defined(CONFIG_DRM_AMD_DC_DCN1_0)
+/* DCN1.x supports 2 pipes */
+#endif
+enum dwb_pipe {
+ dwb_pipe0 = 0,
+#if defined(CONFIG_DRM_AMD_DC_DCN1_0)
+ dwb_pipe1,
+#endif
+ dwb_pipe_max_num,
+};
+
+enum setting_flags {
+ sf_pipe = 0x00000001,
+ sf_output_format = 0x00000002,
+ sf_capture_rate = 0x00000004,
+ sf_all = 0xffffffff,
+};
+
+enum dwb_capture_rate {
+
+ dwb_capture_rate_0 = 0, /* Every frame is captured. */
+ dwb_capture_rate_1 = 1, /* Every other frame is captured. */
+ dwb_capture_rate_2 = 2, /* Every 3rd frame is captured. */
+ dwb_capture_rate_3 = 3, /* Every 4th frame is captured. */
+};
+
+enum dwb_scaler_mode {
+ dwb_scaler_mode_bypass444 = 0,
+ dwb_scaler_mode_rgb444 = 1,
+ dwb_scaler_mode_yuv444 = 2,
+ dwb_scaler_mode_yuv420 = 3
+};
+
+struct dwb_caps {
+ enum dce_version hw_version; /* DCN engine version. */
+ enum dwb_sw_version sw_version; /* DWB sw implementation version. */
+ unsigned int reserved[6]; /* Reserved for future use, MUST BE 0. */
+ unsigned int adapter_id;
+ unsigned int num_pipes; /* number of DWB pipes */
+ struct {
+ unsigned int support_dwb :1;
+ unsigned int support_ogam :1;
+ unsigned int support_wbscl :1;
+ unsigned int support_ocsc :1;
+ } caps;
+ unsigned int reserved2[10]; /* Reserved for future use, MUST BE 0. */
+};
+
+struct dwb_status {
+ bool enabled;
+ /* Reserved ========================================================================= */
+ unsigned int reserved[8]; /* Reserved fields */
+};
+
+struct dwb_basic_settings {
+ /* General DWB related input parameters ============================================= */
+ enum dwb_source input_src_select; /* Select input source: (DCE) 0: SCL; 1: BLND; 2: FMT; (DCN) OTG* or MPC* */
+ enum dwb_pipe input_pipe_select; /* Select input pipe: 0: PIPE0; 1: PIPE1; 2: PIPE2 */
+
+ /* CNV: WND Related parameters ====================================================== */
+ unsigned int capture_rate; /* Captures once every (capture_rate+1) frames */
+
+ /* CNV: CSC Related parameters ====================================================== */
+ unsigned int start_x; /* Horizontal window start position */
+ unsigned int start_y; /* Vertical window start position */
+ unsigned int src_width; /* Width of window captured within source window */
+ unsigned int src_height; /* Height of window captured within source window */
+
+ /* SISCL Related parameters ========================================================= */
+ unsigned int dest_width; /* Destination width */
+ unsigned int dest_height; /* Destination height */
+
+ /* MCIF bufer parameters ========================================================= */
+ unsigned long long luma_address[4];
+ unsigned long long chroma_address[4];
+ unsigned int luma_pitch;
+ unsigned int chroma_pitch;
+ unsigned int slice_lines;
+
+ /* Reserved ========================================================================= */
+ unsigned int reserved[8]; /* Reserved fields */
+
+};
+
+struct dwb_advanced_settings {
+ enum setting_flags uFlag;
+ enum dwb_pipe pipe; /* default = DWB_PIPE_ALL */
+ enum dwb_scaler_mode out_format; /* default = DWBScalerMode_YUV420 */
+ enum dwb_capture_rate capture_rate; /* default = Every frame is captured */
+ unsigned int reserved[64]; /* reserved for future use, must be 0 */
+};
+
+/* / - dwb_frame_info is the info of the dumping data */
+struct dwb_frame_info {
+ unsigned int size;
+ unsigned int width;
+ unsigned int height;
+ unsigned int luma_pitch;
+ unsigned int chroma_pitch;
+ enum dwb_scaler_mode format;
+};
+
+struct dwbc_cfg {
+ struct dwb_basic_settings basic_settings;
+ struct dwb_advanced_settings advanced_settings;
+};
+
+struct dwbc {
+ const struct dwbc_funcs *funcs;
+ struct dc_context *ctx;
+ struct dwbc_cfg config;
+ struct dwb_status status;
+ int inst;
+};
+
+struct dwbc_funcs {
+ bool (*get_caps)(struct dwbc *dwbc, struct dwb_caps *caps);
+
+ bool (*enable)(struct dwbc *dwbc);
+
+ bool (*disable)(struct dwbc *dwbc);
+
+ bool (*get_status)(struct dwbc *dwbc, struct dwb_status *status);
+
+ bool (*dump_frame)(struct dwbc *dwbc, struct dwb_frame_info *frame_info,
+ unsigned char *luma_buffer, unsigned char *chroma_buffer,
+ unsigned char *dest_luma_buffer, unsigned char *dest_chroma_buffer);
+
+ bool (*set_basic_settings)(struct dwbc *dwbc,
+ const struct dwb_basic_settings *basic_settings);
+
+ bool (*get_basic_settings)(struct dwbc *dwbc,
+ struct dwb_basic_settings *basic_settings);
+
+ bool (*set_advanced_settings)(struct dwbc *dwbc,
+ const struct dwb_advanced_settings *advanced_settings);
+
+ bool (*get_advanced_settings)(struct dwbc *dwbc,
+ struct dwb_advanced_settings *advanced_settings);
+
+ bool (*reset_advanced_settings)(struct dwbc *dwbc);
+};
+
+#endif