12ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/*
22ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* Copyright (c) 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 __HWC_DISPLAY_NULL_H__
262ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#define __HWC_DISPLAY_NULL_H__
272ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
282ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#include <qdMetaData.h>
292ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#include <gralloc_priv.h>
302ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#include "hwc_display.h"
312ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
322ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudelnamespace sdm {
332ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
342ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudelclass HWCDisplayNull : public HWCDisplay {
352ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel public:
362ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  static int Create(CoreInterface *core_intf, hwc_procs_t const **hwc_procs,
372ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel                    HWCDisplay **hwc_display);
382ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  static void Destroy(HWCDisplay *hwc_display);
392ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  virtual int Init();
402ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  virtual int Deinit();
412ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  virtual int Prepare(hwc_display_contents_1_t *content_list);
422ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  virtual int Commit(hwc_display_contents_1_t *content_list);
432ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  virtual int EventControl(int event, int enable) { return 0; }
442ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  virtual int SetPowerMode(int mode) { return 0; }
452ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
462ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  // Framebuffer configurations
472ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  virtual int GetDisplayConfigs(uint32_t *configs, size_t *num_configs) {
482ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel    return HWCDisplay::GetDisplayConfigs(configs, num_configs);
492ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  }
502ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
512ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  virtual int GetDisplayAttributes(uint32_t config, const uint32_t *display_attributes,
522ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel                                   int32_t *values);
532ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  virtual int GetActiveConfig() { return 0; }
542ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  virtual int SetActiveConfig(int index) { return -1; }
552ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
562ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  virtual void SetIdleTimeoutMs(uint32_t timeout_ms) { return; }
572ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  virtual void SetFrameDumpConfig(uint32_t count, uint32_t bit_mask_layer_type) { return; }
582ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  virtual DisplayError SetMaxMixerStages(uint32_t max_mixer_stages) { return kErrorNone; }
592ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  virtual DisplayError ControlPartialUpdate(bool enable, uint32_t *pending) { return kErrorNone; }
602ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  virtual uint32_t GetLastPowerMode() { return 0; }
612ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  virtual int SetFrameBufferResolution(uint32_t x_pixels, uint32_t y_pixels) { return 0; }
622ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
632ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  virtual void GetFrameBufferResolution(uint32_t *x_pixels, uint32_t *y_pixels) {
642ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel    *x_pixels = x_res_;
652ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel    *y_pixels = y_res_;
662ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  }
672ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
682ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  virtual void GetPanelResolution(uint32_t *x_pixels, uint32_t *y_pixels) {
692ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel    *x_pixels = x_res_;
702ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel    *y_pixels = y_res_;
712ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  }
722ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
732ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  virtual int SetDisplayStatus(uint32_t display_status) { return 0; }
742ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  virtual int OnMinHdcpEncryptionLevelChange(uint32_t min_enc_level) { return 0; }
752ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  virtual int Perform(uint32_t operation, ...) { return 0; }
762ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  virtual int SetCursorPosition(int x, int y) { return 0; }
7772adb432f6bdb99433ebb261d8e55395d10783deThierry Strudel  virtual void SetSecureDisplay(bool secure_display_active, bool force_flush) { return; }
782ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
792ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  // Display Configurations
802ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  virtual int SetActiveDisplayConfig(int config) { return 0; }
812ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  virtual int GetActiveDisplayConfig(uint32_t *config) { return -1; }
822ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  virtual int GetDisplayConfigCount(uint32_t *count) { return -1; }
832ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  virtual int GetDisplayAttributesForConfig(int config,
842ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel                                            DisplayConfigVariableInfo *display_attributes) {
852ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel    return -1;
862ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  }
872ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  virtual bool IsValidContentList(hwc_display_contents_1_t *content_list) {
882ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel    return true;
892ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  }
902ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
912ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  void SetResolution(uint32_t x_res, uint32_t y_res) {
922ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel    x_res_ = x_res;
932ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel    y_res_ = y_res;
942ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  }
952ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
962ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
972ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel private:
982ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  HWCDisplayNull(CoreInterface *core_intf, hwc_procs_t const **hwc_procs);
992ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  uint32_t x_res_ = 1920;
1002ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  uint32_t y_res_ = 1080;
1012ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel};
1022ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
1032ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel}  // namespace sdm
1042ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
1052ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#endif  // __HWC_DISPLAY_NULL_H__
1062ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
107