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