12ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* 22ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* Copyright (c) 2014 - 2016, The Linux Foundation. All rights reserved. 32ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* 42ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* Redistribution and use in source and binary forms, with or without modification, are permitted 52ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* provided that the following conditions are met: 62ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* * Redistributions of source code must retain the above copyright notice, this list of 72ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* conditions and the following disclaimer. 82ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* * Redistributions in binary form must reproduce the above copyright notice, this list of 92ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* conditions and the following disclaimer in the documentation and/or other materials provided 102ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* with the distribution. 112ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* * Neither the name of The Linux Foundation nor the names of its contributors may be used to 122ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* endorse or promote products derived from this software without specific prior written 132ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* permission. 142ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* 152ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 162ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 172ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE 182ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 192ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 202ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 212ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 222ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 232ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel*/ 242ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 252ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#ifndef __STRATEGY_INTERFACE_H__ 262ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#define __STRATEGY_INTERFACE_H__ 272ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 282ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#include <core/sdm_types.h> 292ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#include <core/display_interface.h> 302ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#include "hw_info_types.h" 312ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 322ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudelnamespace sdm { 332ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 342ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudelstruct StrategyConstraints { 352ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel bool safe_mode = false; //!< In this mode, strategy manager chooses the composition strategy 362ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel //!< that requires minimum number of pipe for the current frame. i.e., 372ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel //!< video only composition, secure only composition or GPU composition 382ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 392ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel bool use_cursor = false; //!< If this is set, strategy manager will configure cursor layer in the 402ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel //!< layer stack as hw cursor else it will be treated as a normal layer 412ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 422ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel uint32_t max_layers = kMaxSDELayers; //!< Maximum number of layers that shall be programmed 432ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel //!< on hardware for the given layer stack. 442ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel}; 452ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 462ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudelclass StrategyInterface { 472ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel public: 482ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel virtual DisplayError Start(HWLayersInfo *hw_layers_info, uint32_t *max_attempts) = 0; 492ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel virtual DisplayError GetNextStrategy(StrategyConstraints *constraints) = 0; 502ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel virtual DisplayError Stop() = 0; 51d62c8a289ff6b4838e543e82b655dc436f387574Thierry Strudel virtual DisplayError Reconfigure(const HWPanelInfo &hw_panel_info, 52d62c8a289ff6b4838e543e82b655dc436f387574Thierry Strudel const HWResourceInfo &hw_res_info, 532ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel const HWMixerAttributes &mixer_attributes, 542ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel const DisplayConfigVariableInfo &fb_config) = 0; 55eb58d55cd4aa3010d6e9e5d8f19d36869b369805Thierry Strudel virtual DisplayError SetCompositionState(LayerComposition composition_type, bool enable) = 0; 562ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 572ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel protected: 582ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel virtual ~StrategyInterface() { } 592ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel}; 602ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 612ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel} // namespace sdm 622ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 632ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#endif // __STRATEGY_INTERFACE_H__ 642ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 65