12ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/*
2cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel* Copyright (c) 2014 - 2017, The Linux Foundation. All rights reserved.
32ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel*
42ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* Redistribution and use in source and binary forms, with or without
52ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* modification, are permitted provided that the following conditions are
62ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* met:
72ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel*     * Redistributions of source code must retain the above copyright
82ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel*       notice, this list of conditions and the following disclaimer.
92ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel*     * Redistributions in binary form must reproduce the above
102ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel*       copyright notice, this list of conditions and the following
112ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel*       disclaimer in the documentation and/or other materials provided
122ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel*       with the distribution.
132ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel*     * Neither the name of The Linux Foundation nor the names of its
142ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel*       contributors may be used to endorse or promote products derived
152ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel*       from this software without specific prior written permission.
162ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel*
172ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
182ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
192ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
202ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
212ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
222ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
232ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
242ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
252ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
262ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
272ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
282ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel*/
292ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
302ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#ifndef __DEBUG_H__
312ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#define __DEBUG_H__
322ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
332ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#include <stdint.h>
342ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#include <core/sdm_types.h>
352ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#include <core/debug_interface.h>
362ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#include <core/display_interface.h>
372ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
382ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#define DLOG(tag, method, format, ...) Debug::Get()->method(tag, __CLASS__ "::%s: " format, \
392ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel                                                            __FUNCTION__, ##__VA_ARGS__)
402ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
412ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#define DLOGE_IF(tag, format, ...) DLOG(tag, Error, format, ##__VA_ARGS__)
422ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#define DLOGW_IF(tag, format, ...) DLOG(tag, Warning, format, ##__VA_ARGS__)
432ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#define DLOGI_IF(tag, format, ...) DLOG(tag, Info, format, ##__VA_ARGS__)
442ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#define DLOGD_IF(tag, format, ...) DLOG(tag, Debug, format, ##__VA_ARGS__)
452ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#define DLOGV_IF(tag, format, ...) DLOG(tag, Verbose, format, ##__VA_ARGS__)
462ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
472ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#define DLOGE(format, ...) DLOGE_IF(kTagNone, format, ##__VA_ARGS__)
482ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#define DLOGD(format, ...) DLOGD_IF(kTagNone, format, ##__VA_ARGS__)
492ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#define DLOGW(format, ...) DLOGW_IF(kTagNone, format, ##__VA_ARGS__)
502ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#define DLOGI(format, ...) DLOGI_IF(kTagNone, format, ##__VA_ARGS__)
512ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#define DLOGV(format, ...) DLOGV_IF(kTagNone, format, ##__VA_ARGS__)
522ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
532ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#define DTRACE_BEGIN(custom_string) Debug::Get()->BeginTrace(__CLASS__, __FUNCTION__, custom_string)
542ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#define DTRACE_END() Debug::Get()->EndTrace()
552ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#define DTRACE_SCOPED() ScopeTracer <Debug> scope_tracer(__CLASS__, __FUNCTION__)
562ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
572ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudelnamespace sdm {
582ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
592ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudelclass Debug {
602ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel public:
612ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  static inline void SetDebugHandler(DebugHandler *debug_handler) {
622ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel    debug_.debug_handler_ = debug_handler;
632ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  }
642ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  static inline DebugHandler* Get() { return debug_.debug_handler_; }
652ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  static int GetSimulationFlag();
662ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  static int GetHDMIResolution();
67cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel  static void GetIdleTimeoutMs(uint32_t *active_ms, uint32_t *inactive_ms);
682ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  static int GetBootAnimLayerCount();
692ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  static bool IsRotatorDownScaleDisabled();
702ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  static bool IsDecimationDisabled();
712ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  static int GetMaxPipesPerMixer(DisplayType display_type);
72cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel  static int GetMaxUpscale();
732ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  static bool IsVideoModeEnabled();
742ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  static bool IsRotatorUbwcDisabled();
752ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  static bool IsRotatorSplitDisabled();
762ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  static bool IsScalarDisabled();
772ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  static bool IsUbwcTiledFrameBuffer();
789e9ad6589a3244caa2b310b0a7a115210c6ab235Thierry Strudel  static bool IsAVRDisabled();
799e9ad6589a3244caa2b310b0a7a115210c6ab235Thierry Strudel  static bool IsExtAnimDisabled();
80cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel  static bool IsPartialSplitDisabled();
81272267430caca35ed8f93afa4fe52f091f3a83b5Naseer Ahmed  static bool IsSkipValidateDisabled();
8205b2a3cf90e4b2d82e713e5cb13b165215ee42e6Thierry Strudel  static DisplayError GetMixerResolution(uint32_t *width, uint32_t *height);
83d62c8a289ff6b4838e543e82b655dc436f387574Thierry Strudel  static int GetExtMaxlayers();
842ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  static bool GetProperty(const char *property_name, char *value);
852ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  static bool SetProperty(const char *property_name, const char *value);
862ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
872ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel private:
882ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  Debug();
892ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
902ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  // By default, drop any log messages/traces coming from Display manager. It will be overriden by
912ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  // Display manager client when core is successfully initialized.
922ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  class DefaultDebugHandler : public DebugHandler {
932ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel   public:
942ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel    virtual void Error(DebugTag /*tag*/, const char */*format*/, ...) { }
952ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel    virtual void Warning(DebugTag /*tag*/, const char */*format*/, ...) { }
962ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel    virtual void Info(DebugTag /*tag*/, const char */*format*/, ...) { }
972ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel    virtual void Debug(DebugTag /*tag*/, const char */*format*/, ...) { }
982ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel    virtual void Verbose(DebugTag /*tag*/, const char */*format*/, ...) { }
992ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel    virtual void BeginTrace(const char */*class_name*/, const char */*function_name*/,
1002ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel                            const char */*custom_string*/) { }
1012ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel    virtual void EndTrace() { }
1022ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel    virtual DisplayError GetProperty(const char */*property_name*/, int */*value*/) {
1032ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel      return kErrorNotSupported;
1042ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel    }
1052ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel    virtual DisplayError GetProperty(const char */*property_name*/, char */*value*/) {
1062ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel      return kErrorNotSupported;
1072ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel    }
1082ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel    virtual DisplayError SetProperty(const char */*property_name*/, const char */*value*/) {
1092ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel      return kErrorNotSupported;
1102ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel    }
1112ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  };
1122ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
1132ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  DefaultDebugHandler default_debug_handler_;
1142ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  DebugHandler *debug_handler_;
1152ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  static Debug debug_;
1162ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel};
1172ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
1182ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel}  // namespace sdm
1192ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
1202ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#endif  // __DEBUG_H__
1212ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
122