1/*
2* Copyright (c) 2014 - 2017, The Linux Foundation. All rights reserved.
3*
4* Redistribution and use in source and binary forms, with or without
5* modification, are permitted provided that the following conditions are
6* met:
7*     * Redistributions of source code must retain the above copyright
8*       notice, this list of conditions and the following disclaimer.
9*     * Redistributions in binary form must reproduce the above
10*       copyright notice, this list of conditions and the following
11*       disclaimer in the documentation and/or other materials provided
12*       with the distribution.
13*     * Neither the name of The Linux Foundation nor the names of its
14*       contributors may be used to endorse or promote products derived
15*       from this software without specific prior written permission.
16*
17* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
18* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
20* ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
21* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
24* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
26* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28*/
29
30#ifndef __DEBUG_H__
31#define __DEBUG_H__
32
33#include <stdint.h>
34#include <core/sdm_types.h>
35#include <core/debug_interface.h>
36#include <core/display_interface.h>
37
38#define DLOG(tag, method, format, ...) Debug::Get()->method(tag, __CLASS__ "::%s: " format, \
39                                                            __FUNCTION__, ##__VA_ARGS__)
40
41#define DLOGE_IF(tag, format, ...) DLOG(tag, Error, format, ##__VA_ARGS__)
42#define DLOGW_IF(tag, format, ...) DLOG(tag, Warning, format, ##__VA_ARGS__)
43#define DLOGI_IF(tag, format, ...) DLOG(tag, Info, format, ##__VA_ARGS__)
44#define DLOGD_IF(tag, format, ...) DLOG(tag, Debug, format, ##__VA_ARGS__)
45#define DLOGV_IF(tag, format, ...) DLOG(tag, Verbose, format, ##__VA_ARGS__)
46
47#define DLOGE(format, ...) DLOGE_IF(kTagNone, format, ##__VA_ARGS__)
48#define DLOGD(format, ...) DLOGD_IF(kTagNone, format, ##__VA_ARGS__)
49#define DLOGW(format, ...) DLOGW_IF(kTagNone, format, ##__VA_ARGS__)
50#define DLOGI(format, ...) DLOGI_IF(kTagNone, format, ##__VA_ARGS__)
51#define DLOGV(format, ...) DLOGV_IF(kTagNone, format, ##__VA_ARGS__)
52
53#define DTRACE_BEGIN(custom_string) Debug::Get()->BeginTrace(__CLASS__, __FUNCTION__, custom_string)
54#define DTRACE_END() Debug::Get()->EndTrace()
55#define DTRACE_SCOPED() ScopeTracer <Debug> scope_tracer(__CLASS__, __FUNCTION__)
56
57namespace sdm {
58
59class Debug {
60 public:
61  static inline void SetDebugHandler(DebugHandler *debug_handler) {
62    debug_.debug_handler_ = debug_handler;
63  }
64  static inline DebugHandler* Get() { return debug_.debug_handler_; }
65  static int GetSimulationFlag();
66  static int GetHDMIResolution();
67  static void GetIdleTimeoutMs(uint32_t *active_ms, uint32_t *inactive_ms);
68  static int GetBootAnimLayerCount();
69  static bool IsRotatorDownScaleDisabled();
70  static bool IsDecimationDisabled();
71  static int GetMaxPipesPerMixer(DisplayType display_type);
72  static int GetMaxUpscale();
73  static bool IsVideoModeEnabled();
74  static bool IsRotatorUbwcDisabled();
75  static bool IsRotatorSplitDisabled();
76  static bool IsScalarDisabled();
77  static bool IsUbwcTiledFrameBuffer();
78  static bool IsAVRDisabled();
79  static bool IsExtAnimDisabled();
80  static bool IsPartialSplitDisabled();
81  static DisplayError GetMixerResolution(uint32_t *width, uint32_t *height);
82  static int GetExtMaxlayers();
83  static bool GetProperty(const char *property_name, char *value);
84  static bool SetProperty(const char *property_name, const char *value);
85
86 private:
87  Debug();
88
89  // By default, drop any log messages/traces coming from Display manager. It will be overriden by
90  // Display manager client when core is successfully initialized.
91  class DefaultDebugHandler : public DebugHandler {
92   public:
93    virtual void Error(DebugTag /*tag*/, const char */*format*/, ...) { }
94    virtual void Warning(DebugTag /*tag*/, const char */*format*/, ...) { }
95    virtual void Info(DebugTag /*tag*/, const char */*format*/, ...) { }
96    virtual void Debug(DebugTag /*tag*/, const char */*format*/, ...) { }
97    virtual void Verbose(DebugTag /*tag*/, const char */*format*/, ...) { }
98    virtual void BeginTrace(const char */*class_name*/, const char */*function_name*/,
99                            const char */*custom_string*/) { }
100    virtual void EndTrace() { }
101    virtual DisplayError GetProperty(const char */*property_name*/, int */*value*/) {
102      return kErrorNotSupported;
103    }
104    virtual DisplayError GetProperty(const char */*property_name*/, char */*value*/) {
105      return kErrorNotSupported;
106    }
107    virtual DisplayError SetProperty(const char */*property_name*/, const char */*value*/) {
108      return kErrorNotSupported;
109    }
110  };
111
112  DefaultDebugHandler default_debug_handler_;
113  DebugHandler *debug_handler_;
114  static Debug debug_;
115};
116
117}  // namespace sdm
118
119#endif  // __DEBUG_H__
120
121