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