1d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema/* 2d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved. 3d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* 4d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* Redistribution and use in source and binary forms, with or without modification, are permitted 5d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* provided that the following conditions are met: 6d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* * Redistributions of source code must retain the above copyright notice, this list of 7d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* conditions and the following disclaimer. 8d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* * Redistributions in binary form must reproduce the above copyright notice, this list of 9d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* conditions and the following disclaimer in the documentation and/or other materials provided 10d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* with the distribution. 11d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* * Neither the name of The Linux Foundation nor the names of its contributors may be used to 12d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* endorse or promote products derived from this software without specific prior written 13d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* permission. 14d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* 15d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 16d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE 18d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 19d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 20d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 21d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 22d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema*/ 24d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 25d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema#ifndef __HW_INFO_TYPES_H__ 26d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema#define __HW_INFO_TYPES_H__ 27d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 28d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema#include <stdint.h> 29d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema#include <core/display_interface.h> 30d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema#include <core/core_interface.h> 31d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema#include <vector> 32d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema#include <map> 33d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema#include <string> 34d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema#include <bitset> 35d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 36d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemanamespace sdm { 37d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemausing std::string; 38d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 39d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemaconst int kMaxSDELayers = 16; // Maximum number of layers that can be handled by MDP5 hardware 40d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema // in a given layer stack. 41d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema#define MAX_PLANES 4 42d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 43d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema#define MAX_DETAIL_ENHANCE_CURVE 3 44d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 45d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemaenum HWDeviceType { 46d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kDevicePrimary, 47d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kDeviceHDMI, 48d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kDeviceVirtual, 49d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kDeviceRotator, 50d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kDeviceMax, 51d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema}; 52d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 53d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemaenum HWBlockType { 54d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kHWPrimary, 55d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kHWHDMI, 56d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kHWWriteback0, 57d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kHWWriteback1, 58d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kHWWriteback2, 59d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kHWBlockMax 60d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema}; 61d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 62d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemaenum HWDisplayMode { 63d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kModeDefault, 64d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kModeVideo, 65d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kModeCommand, 66d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema}; 67d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 68d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemaenum PipeType { 69d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kPipeTypeUnused, 70d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kPipeTypeVIG, 71d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kPipeTypeRGB, 72d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kPipeTypeDMA, 73d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kPipeTypeCursor, 74d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema}; 75d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 76d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemaenum HWSubBlockType { 77d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kHWVIGPipe, 78d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kHWRGBPipe, 79d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kHWDMAPipe, 80d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kHWCursorPipe, 81d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kHWRotatorInput, 82d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kHWRotatorOutput, 83d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kHWWBIntfOutput, 84d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kHWDestinationScalar, 85d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kHWSubBlockMax, 86d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema}; 87d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 88d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemaenum HWAlphaInterpolation { 89d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kInterpolationPixelRepeat, 90d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kInterpolationBilinear, 91d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kInterpolationMax, 92d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema}; 93d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 94d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemaenum HWBlendingFilter { 95d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kBlendFilterCircular, 96d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kBlendFilterSeparable, 97d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kBlendFilterMax, 98d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema}; 99d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 100d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemaenum HWPipeFlags { 101d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kIGC = 0x01, 102d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kMultiRect = 0x02, 103d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kMultiRectParallelMode = 0x04, 104d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema}; 105d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 106d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemaenum HWAVRModes { 107d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kContinuousMode, // Mode to enable AVR feature for every frame. 108d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kOneShotMode, // Mode to enable AVR feature for particular frame. 109d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema}; 110d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 111d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennematypedef std::map<HWSubBlockType, std::vector<LayerBufferFormat>> FormatsMap; 112d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 113d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemastruct HWDynBwLimitInfo { 114d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t cur_mode = kBwDefault; 115d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t total_bw_limit[kBwModeMax] = { 0 }; 116d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t pipe_bw_limit[kBwModeMax] = { 0 }; 117d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema}; 118d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 119d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemastruct HWPipeCaps { 120d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema PipeType type = kPipeTypeUnused; 121d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t id = 0; 122d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t master_pipe_id = 0; 123d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t max_rects = 1; 124d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema}; 125d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 126d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemastruct HWRotatorInfo { 127d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema enum { ROT_TYPE_MDSS, ROT_TYPE_V4L2 }; 128d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t type = ROT_TYPE_MDSS; 129d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t num_rotator = 0; 130d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool has_downscale = false; 131d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema std::string device_path = ""; 132d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema float min_downscale = 2.0f; 133d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool downscale_compression = false; 134d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 135d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema void Reset() { *this = HWRotatorInfo(); } 136d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema}; 137d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 138d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemastruct HWDestScalarInfo { 139d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t count = 0; 140d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t max_input_width = 0; 141d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t max_output_width = 0; 142d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t max_scale_up = 1; 143d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema}; 144d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 145d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemaenum SmartDMARevision { 146d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema V1, 147d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema V2, 148d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema}; 149d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 150d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemastruct HWResourceInfo { 151d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t hw_version = 0; 152d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t hw_revision = 0; 153d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t num_dma_pipe = 0; 154d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t num_vig_pipe = 0; 155d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t num_rgb_pipe = 0; 156d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t num_cursor_pipe = 0; 157d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t num_blending_stages = 0; 158d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t num_control = 0; 159d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t num_mixer_to_disp = 0; 160d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t smp_total = 0; 161d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t smp_size = 0; 162d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t num_smp_per_pipe = 0; 163d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t max_scale_up = 1; 164d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t max_scale_down = 1; 165d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema float rot_downscale_max = 0.0f; 166d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint64_t max_bandwidth_low = 0; 167d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint64_t max_bandwidth_high = 0; 168d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t max_mixer_width = 2048; 169d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t max_pipe_width = 2048; 170d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t max_cursor_size = 0; 171d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t max_pipe_bw = 0; 172d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t max_sde_clk = 0; 173d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema float clk_fudge_factor = 1.0f; 174d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t macrotile_nv12_factor = 0; 175d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t macrotile_factor = 0; 176d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t linear_factor = 0; 177d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t scale_factor = 0; 178d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t extra_fudge_factor = 0; 179d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t amortizable_threshold = 0; 180d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t system_overhead_lines = 0; 181d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool has_bwc = false; 182d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool has_ubwc = false; 183d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool has_decimation = false; 184d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool has_macrotile = false; 185d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool has_non_scalar_rgb = false; 186d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool is_src_split = false; 187d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool perf_calc = false; 188d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool has_dyn_bw_support = false; 189d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool separate_rotator = false; 190d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool has_qseed3 = false; 191d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool has_concurrent_writeback = false; 192d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool has_ppp = false; 193d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t writeback_index = kHWBlockMax; 194d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema HWDynBwLimitInfo dyn_bw_info; 195d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema std::vector<HWPipeCaps> hw_pipes; 196d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema FormatsMap supported_formats_map; 197d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema HWRotatorInfo hw_rot_info; 198d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema HWDestScalarInfo hw_dest_scalar_info; 199d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool has_avr = false; 200d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool has_hdr = false; 201d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema SmartDMARevision smart_dma_rev = SmartDMARevision::V1; 202d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema void Reset() { *this = HWResourceInfo(); } 203d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema}; 204d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 205d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemastruct HWSplitInfo { 206d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t left_split = 0; 207d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t right_split = 0; 208d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 209d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool operator !=(const HWSplitInfo &split_info) { 210d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema return ((left_split != split_info.left_split) || (right_split != split_info.right_split)); 211d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema } 212d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 213d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool operator ==(const HWSplitInfo &split_info) { 214d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema return !(operator !=(split_info)); 215d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema } 216d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema}; 217d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 218d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemaenum HWS3DMode { 219d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kS3DModeNone, 220d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kS3DModeLR, 221d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kS3DModeRL, 222d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kS3DModeTB, 223d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kS3DModeFP, 224d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kS3DModeMax, 225d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema}; 226d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 227d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemastruct HWColorPrimaries { 228d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t white_point[2] = {}; // White point 229d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t red[2] = {}; // Red color primary 230d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t green[2] = {}; // Green color primary 231d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t blue[2] = {}; // Blue color primary 232d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema}; 233d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 234d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemastruct HWPanelOrientation { 235d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool rotation = false; 236d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool flip_horizontal = false; 237d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool flip_vertical = false; 238d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema}; 239d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 240d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemastruct HWPanelInfo { 241d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema DisplayPort port = kPortDefault; // Display port 242d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema HWDisplayMode mode = kModeDefault; // Display mode 243d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool partial_update = false; // Partial update feature 244d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema int left_align = 1; // ROI left alignment restriction 245d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema int width_align = 1; // ROI width alignment restriction 246d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema int top_align = 1; // ROI top alignment restriction 247d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema int height_align = 1; // ROI height alignment restriction 248d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema int min_roi_width = 1; // Min width needed for ROI 249d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema int min_roi_height = 1; // Min height needed for ROI 250d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool needs_roi_merge = false; // Merge ROI's of both the DSI's 251d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool dynamic_fps = false; // Panel Supports dynamic fps 252d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool dfps_porch_mode = false; // dynamic fps VFP or HFP mode 253d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool ping_pong_split = false; // Supports Ping pong split 254d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t min_fps = 0; // Min fps supported by panel 255d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t max_fps = 0; // Max fps supported by panel 256d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool is_primary_panel = false; // Panel is primary display 257d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool is_pluggable = false; // Panel is pluggable 258d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema HWSplitInfo split_info; // Panel split configuration 259d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema char panel_name[256] = {0}; // Panel name 260d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema HWS3DMode s3d_mode = kS3DModeNone; // Panel's current s3d mode. 261d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema int panel_max_brightness = 0; // Max panel brightness 262d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t left_roi_count = 1; // Number if ROI supported on left panel 263d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t right_roi_count = 1; // Number if ROI supported on right panel 264d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool hdr_enabled = false; // HDR feature supported 265d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t peak_luminance = 0; // Panel's peak luminance level 266d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t average_luminance = 0; // Panel's average luminance level 267d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t blackness_level = 0; // Panel's blackness level 268d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema HWColorPrimaries primaries = {}; // WRGB color primaries 269d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema HWPanelOrientation panel_orientation = {}; // Panel Orientation 270d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 271d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool operator !=(const HWPanelInfo &panel_info) { 272d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema return ((port != panel_info.port) || (mode != panel_info.mode) || 273d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema (partial_update != panel_info.partial_update) || 274d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema (left_align != panel_info.left_align) || (width_align != panel_info.width_align) || 275d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema (top_align != panel_info.top_align) || (height_align != panel_info.height_align) || 276d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema (min_roi_width != panel_info.min_roi_width) || 277d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema (min_roi_height != panel_info.min_roi_height) || 278d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema (needs_roi_merge != panel_info.needs_roi_merge) || 279d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema (dynamic_fps != panel_info.dynamic_fps) || (min_fps != panel_info.min_fps) || 280d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema (dfps_porch_mode != panel_info.dfps_porch_mode) || 281d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema (ping_pong_split != panel_info.ping_pong_split) || 282d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema (max_fps != panel_info.max_fps) || (is_primary_panel != panel_info.is_primary_panel) || 283d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema (split_info != panel_info.split_info) || (s3d_mode != panel_info.s3d_mode) || 284d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema (left_roi_count != panel_info.left_roi_count) || 285d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema (right_roi_count != panel_info.right_roi_count)); 286d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema } 287d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 288d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool operator ==(const HWPanelInfo &panel_info) { 289d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema return !(operator !=(panel_info)); 290d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema } 291d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema}; 292d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 293d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemastruct HWSessionConfig { 294d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema LayerRect src_rect; 295d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema LayerRect dst_rect; 296d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t buffer_count = 0; 297d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool secure = false; 298d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t frame_rate = 0; 299d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema LayerTransform transform; 300d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool secure_camera = false; 301d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 302d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool operator==(const HWSessionConfig& config) const { 303d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema return (src_rect == config.src_rect && 304d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema dst_rect == config.dst_rect && 305d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema buffer_count == config.buffer_count && 306d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema secure == config.secure && 307d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema frame_rate == config.frame_rate && 308d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema transform == config.transform && 309d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema secure_camera == config.secure_camera); 310d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema } 311d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 312d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool operator!=(const HWSessionConfig& config) const { 313d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema return !operator==(config); 314d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema } 315d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema}; 316d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 317d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemastruct HWRotateInfo { 318d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema int pipe_id = -1; // Not actual pipe id, but the relative DMA id 319d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema int writeback_id = -1; // Writeback block id, but this is the same as DMA id 320d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema LayerRect src_roi; // Source crop of each split 321d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema LayerRect dst_roi; // Destination crop of each split 322d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool valid = false; 323d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema int rotate_id = -1; // Actual rotator session id with driver 324d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 325d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema void Reset() { *this = HWRotateInfo(); } 326d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema}; 327d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 328d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemastruct HWRotatorSession { 329d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema HWRotateInfo hw_rotate_info[kMaxRotatePerLayer]; 330d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t hw_block_count = 0; // number of rotator hw blocks used by rotator session 331d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema int session_id = -1; // A handle with Session Manager 332d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema HWSessionConfig hw_session_config; 333d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema LayerBuffer input_buffer; // Input to rotator 334d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema LayerBuffer output_buffer; // Output of rotator, crop width and stride are same 335d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema float input_compression = 1.0f; 336d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema float output_compression = 1.0f; 337d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool is_buffer_cached = false; 338d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema}; 339d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 340d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemastruct HWScaleLutInfo { 341d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t dir_lut_size = 0; 342d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t cir_lut_size = 0; 343d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t sep_lut_size = 0; 344d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint64_t dir_lut = 0; 345d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint64_t cir_lut = 0; 346d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint64_t sep_lut = 0; 347d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema}; 348d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 349d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemastruct HWDetailEnhanceData : DisplayDetailEnhancerData { 350d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint16_t prec_shift = 0; 351d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema int16_t adjust_a[MAX_DETAIL_ENHANCE_CURVE] = {0}; 352d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema int16_t adjust_b[MAX_DETAIL_ENHANCE_CURVE] = {0}; 353d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema int16_t adjust_c[MAX_DETAIL_ENHANCE_CURVE] = {0}; 354d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema}; 355d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 356d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemastruct HWPixelExtension { 357d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema int32_t extension = 0; // Number of pixels extension in left, right, top and bottom directions 358d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema // for all color components. This pixel value for each color component 359d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema // should be sum of fetch and repeat pixels. 360d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 361d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema int32_t overfetch = 0; // Number of pixels need to be overfetched in left, right, top and bottom 362d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema // directions from source image for scaling. 363d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 364d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema int32_t repeat = 0; // Number of pixels need to be repeated in left, right, top and bottom 365d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema // directions for scaling. 366d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema}; 367d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 368d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemastruct HWPlane { 369d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema int32_t init_phase_x = 0; 370d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema int32_t phase_step_x = 0; 371d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema int32_t init_phase_y = 0; 372d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema int32_t phase_step_y = 0; 373d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema HWPixelExtension left; 374d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema HWPixelExtension top; 375d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema HWPixelExtension right; 376d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema HWPixelExtension bottom; 377d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t roi_width = 0; 378d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema int32_t preload_x = 0; 379d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema int32_t preload_y = 0; 380d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t src_width = 0; 381d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t src_height = 0; 382d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema}; 383d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 384d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemastruct HWScaleData { 385d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema struct enable { 386d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint8_t scale = 0; 387d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint8_t direction_detection = 0; 388d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint8_t detail_enhance = 0; 389d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema } enable; 390d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t dst_width = 0; 391d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t dst_height = 0; 392d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema HWPlane plane[MAX_PLANES]; 393d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema // scale_v2_data fields 394d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema ScalingFilterConfig y_rgb_filter_cfg = kFilterEdgeDirected; 395d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema ScalingFilterConfig uv_filter_cfg = kFilterEdgeDirected; 396d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema HWAlphaInterpolation alpha_filter_cfg = kInterpolationPixelRepeat; 397d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema HWBlendingFilter blend_cfg = kBlendFilterCircular; 398d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 399d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema struct lut_flags { 400d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint8_t lut_swap = 0; 401d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint8_t lut_dir_wr = 0; 402d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint8_t lut_y_cir_wr = 0; 403d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint8_t lut_uv_cir_wr = 0; 404d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint8_t lut_y_sep_wr = 0; 405d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint8_t lut_uv_sep_wr = 0; 406d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema } lut_flag; 407d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 408d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t dir_lut_idx = 0; 409d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema /* for Y(RGB) and UV planes*/ 410d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t y_rgb_cir_lut_idx = 0; 411d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t uv_cir_lut_idx = 0; 412d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t y_rgb_sep_lut_idx = 0; 413d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t uv_sep_lut_idx = 0; 414d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 415d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema HWDetailEnhanceData detail_enhance; 416d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema}; 417d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 418d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemastruct HWDestScaleInfo { 419d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t mixer_width = 0; 420d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t mixer_height = 0; 421d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool scale_update = false; 422d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema HWScaleData scale_data = {}; 423d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema LayerRect panel_roi = {}; 424d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema}; 425d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 426d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennematypedef std::map<uint32_t, HWDestScaleInfo *> DestScaleInfoMap; 427d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 428d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemastruct HWAVRInfo { 429d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool enable = false; // Flag to Enable AVR feature 430d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema HWAVRModes mode = kContinuousMode; // Specifies the AVR mode 431d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema}; 432d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 433d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemastruct HWPipeInfo { 434d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint8_t rect = 255; 435d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t pipe_id = 0; 436d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema HWSubBlockType sub_block_type = kHWSubBlockMax; 437d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema LayerRect src_roi; 438d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema LayerRect dst_roi; 439d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint8_t horizontal_decimation = 0; 440d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint8_t vertical_decimation = 0; 441d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema HWScaleData scale_data; 442d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t z_order = 0; 443d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint8_t flags = 0; 444d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool valid = false; 445d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 446d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema void Reset() { *this = HWPipeInfo(); } 447d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema}; 448d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 449d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemastruct HWLayerConfig { 450d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema HWPipeInfo left_pipe; // pipe for left side of output 451d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema HWPipeInfo right_pipe; // pipe for right side of output 452d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema HWRotatorSession hw_rotator_session; 453d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema float compression = 1.0f; 454d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 455d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema void Reset() { *this = HWLayerConfig(); } 456d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema}; 457d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 458d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemastruct HWHDRLayerInfo { 459d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema enum HDROperation { 460d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kNoOp, // No-op. 461d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kSet, // Sets the HDR MetaData - Start of HDR 462d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema kReset, // resets the previously set HDR Metadata, End of HDR 463d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema }; 464d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 465d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema int32_t layer_index = -1; 466d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema HDROperation operation = kNoOp; 467d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema}; 468d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 469d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemastruct HWLayersInfo { 470d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema LayerStack *stack = NULL; // Input layer stack. Set by the caller. 471d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t app_layer_count = 0; // Total number of app layers. Must not be 0. 472d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t gpu_target_index = 0; // GPU target layer index. 0 if not present. 473d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 474d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema std::vector<Layer> hw_layers = {}; // Layers which need to be programmed on the HW 475d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 476d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t index[kMaxSDELayers] = {}; // Indexes of the layers from the layer stack which need to 477d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema // be programmed on hardware. 478d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t roi_index[kMaxSDELayers] = {0}; // Stores the ROI index where the layers are visible. 479d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 480d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema int sync_handle = -1; // Release fence id for current draw cycle. 481d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema int set_idle_time_ms = -1; // Set idle time to the new specified value. 482d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema // -1 indicates no change in idle time since last set value. 483d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 484d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema std::vector<LayerRect> left_frame_roi = {}; // Left ROI. 485d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema std::vector<LayerRect> right_frame_roi = {}; // Right ROI. 486d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema LayerRect partial_fb_roi = {}; // Damaged area in framebuffer. 487d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 488d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool roi_split = false; // Indicates separated left and right ROI 489d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 490d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool use_hw_cursor = false; // Indicates that HWCursor pipe needs to be used for cursor layer 491d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema DestScaleInfoMap dest_scale_info_map = {}; 492d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema HWHDRLayerInfo hdr_layer_info = {}; 493d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema Handle pvt_data = NULL; // Private data used by sdm extension only. 494d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema}; 495d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 496d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemastruct HWLayers { 497d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema HWLayersInfo info; 498d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema HWLayerConfig config[kMaxSDELayers]; 499d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema float output_compression = 1.0f; 500d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t bandwidth = 0; 501d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t clock = 0; 502d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema HWAVRInfo hw_avr_info = {}; 503d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema}; 504d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 505d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemastruct HWDisplayAttributes : DisplayConfigVariableInfo { 506d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool is_device_split = false; 507d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t v_front_porch = 0; //!< Vertical front porch of panel 508d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t v_back_porch = 0; //!< Vertical back porch of panel 509d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t v_pulse_width = 0; //!< Vertical pulse width of panel 510d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t h_total = 0; //!< Total width of panel (hActive + hFP + hBP + hPulseWidth) 511d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t v_total = 0; //!< Total height of panel (vActive + vFP + vBP + vPulseWidth) 512d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema std::bitset<32> s3d_config; //!< Stores the bit mask of S3D modes 513d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 514d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema void Reset() { *this = HWDisplayAttributes(); } 515d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 516d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool operator !=(const HWDisplayAttributes &display_attributes) { 517d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema return ((is_device_split != display_attributes.is_device_split) || 518d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema (x_pixels != display_attributes.x_pixels) || 519d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema (y_pixels != display_attributes.y_pixels) || 520d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema (x_dpi != display_attributes.x_dpi) || 521d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema (y_dpi != display_attributes.y_dpi) || 522d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema (fps != display_attributes.fps) || 523d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema (vsync_period_ns != display_attributes.vsync_period_ns) || 524d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema (v_front_porch != display_attributes.v_front_porch) || 525d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema (v_back_porch != display_attributes.v_back_porch) || 526d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema (v_pulse_width != display_attributes.v_pulse_width) || 527d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema (h_total != display_attributes.h_total) || 528d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema (is_yuv != display_attributes.is_yuv)); 529d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema } 530d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 531d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool operator ==(const HWDisplayAttributes &display_attributes) { 532d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema return !(operator !=(display_attributes)); 533d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema } 534d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema}; 535d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 536d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemastruct HWMixerAttributes { 537d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t width = 0; // Layer mixer width 538d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t height = 0; // Layer mixer height 539d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema uint32_t split_left = 0; 540d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema LayerBufferFormat output_format = kFormatRGB101010; // Layer mixer output format 541d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 542d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool operator !=(const HWMixerAttributes &mixer_attributes) { 543d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema return ((width != mixer_attributes.width) || 544d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema (height != mixer_attributes.height) || 545d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema (output_format != mixer_attributes.output_format) || 546d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema (split_left != mixer_attributes.split_left)); 547d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema } 548d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 549d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool operator ==(const HWMixerAttributes &mixer_attributes) { 550d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema return !(operator !=(mixer_attributes)); 551d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema } 552d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 553d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema bool IsValid() { 554d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema return (width > 0 && height > 0); 555d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema } 556d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema}; 557d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 558d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema} // namespace sdm 559d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 560d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema#endif // __HW_INFO_TYPES_H__ 561d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 562