1fb4d8502Sjsg /* 2fb4d8502Sjsg * Copyright 2012-15 Advanced Micro Devices, Inc. 3fb4d8502Sjsg * 4fb4d8502Sjsg * Permission is hereby granted, free of charge, to any person obtaining a 5fb4d8502Sjsg * copy of this software and associated documentation files (the "Software"), 6fb4d8502Sjsg * to deal in the Software without restriction, including without limitation 7fb4d8502Sjsg * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8fb4d8502Sjsg * and/or sell copies of the Software, and to permit persons to whom the 9fb4d8502Sjsg * Software is furnished to do so, subject to the following conditions: 10fb4d8502Sjsg * 11fb4d8502Sjsg * The above copyright notice and this permission notice shall be included in 12fb4d8502Sjsg * all copies or substantial portions of the Software. 13fb4d8502Sjsg * 14fb4d8502Sjsg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15fb4d8502Sjsg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16fb4d8502Sjsg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17fb4d8502Sjsg * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 18fb4d8502Sjsg * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 19fb4d8502Sjsg * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 20fb4d8502Sjsg * OTHER DEALINGS IN THE SOFTWARE. 21fb4d8502Sjsg * 22fb4d8502Sjsg * Authors: AMD 23fb4d8502Sjsg * 24fb4d8502Sjsg */ 25fb4d8502Sjsg 26fb4d8502Sjsg #ifndef __DAL_LOGGER_INTERFACE_H__ 27fb4d8502Sjsg #define __DAL_LOGGER_INTERFACE_H__ 28fb4d8502Sjsg 29fb4d8502Sjsg #include "logger_types.h" 30fb4d8502Sjsg 31fb4d8502Sjsg struct dc_context; 32fb4d8502Sjsg struct dc_link; 33fb4d8502Sjsg struct dc_surface_update; 34fb4d8502Sjsg struct resource_context; 35fb4d8502Sjsg struct dc_state; 36fb4d8502Sjsg 37fb4d8502Sjsg /* 38fb4d8502Sjsg * 39fb4d8502Sjsg * DAL logger functionality 40fb4d8502Sjsg * 41fb4d8502Sjsg */ 42fb4d8502Sjsg 43fb4d8502Sjsg void pre_surface_trace( 44fb4d8502Sjsg struct dc *dc, 45fb4d8502Sjsg const struct dc_plane_state *const *plane_states, 46fb4d8502Sjsg int surface_count); 47fb4d8502Sjsg 48fb4d8502Sjsg void update_surface_trace( 49fb4d8502Sjsg struct dc *dc, 50fb4d8502Sjsg const struct dc_surface_update *updates, 51fb4d8502Sjsg int surface_count); 52fb4d8502Sjsg 53fb4d8502Sjsg void post_surface_trace(struct dc *dc); 54fb4d8502Sjsg 55fb4d8502Sjsg void context_timing_trace( 56fb4d8502Sjsg struct dc *dc, 57fb4d8502Sjsg struct resource_context *res_ctx); 58fb4d8502Sjsg 59fb4d8502Sjsg void context_clock_trace( 60fb4d8502Sjsg struct dc *dc, 61fb4d8502Sjsg struct dc_state *context); 62fb4d8502Sjsg 63fb4d8502Sjsg /* Any function which is empty or have incomplete implementation should be 64fb4d8502Sjsg * marked by this macro. 65fb4d8502Sjsg * Note that the message will be printed exactly once for every function 66fb4d8502Sjsg * it is used in order to avoid repeating of the same message. */ 67fb4d8502Sjsg 68fb4d8502Sjsg #define DAL_LOGGER_NOT_IMPL(fmt, ...) \ 69fb4d8502Sjsg do { \ 70fb4d8502Sjsg static bool print_not_impl = true; \ 71fb4d8502Sjsg if (print_not_impl == true) { \ 72fb4d8502Sjsg print_not_impl = false; \ 73fb4d8502Sjsg DRM_WARN("DAL_NOT_IMPL: " fmt, ##__VA_ARGS__); \ 74fb4d8502Sjsg } \ 75fb4d8502Sjsg } while (0) 76fb4d8502Sjsg 77fb4d8502Sjsg /****************************************************************************** 78fb4d8502Sjsg * Convenience macros to save on typing. 79fb4d8502Sjsg *****************************************************************************/ 80fb4d8502Sjsg 81fb4d8502Sjsg #define DC_ERROR(...) \ 82fb4d8502Sjsg do { \ 83fb4d8502Sjsg (void)(dc_ctx); \ 84fb4d8502Sjsg DC_LOG_ERROR(__VA_ARGS__); \ 85fb4d8502Sjsg } while (0) 86fb4d8502Sjsg 87fb4d8502Sjsg #define DC_SYNC_INFO(...) \ 88fb4d8502Sjsg do { \ 89fb4d8502Sjsg (void)(dc_ctx); \ 90fb4d8502Sjsg DC_LOG_SYNC(__VA_ARGS__); \ 91fb4d8502Sjsg } while (0) 92fb4d8502Sjsg 93fb4d8502Sjsg /* Connectivity log format: 94fb4d8502Sjsg * [time stamp] [drm] [Major_minor] [connector name] message..... 95fb4d8502Sjsg * eg: 96fb4d8502Sjsg * [ 26.590965] [drm] [Conn_LKTN] [DP-1] HBRx4 pass VS=0, PE=0^ 97fb4d8502Sjsg * [ 26.881060] [drm] [Conn_Mode] [DP-1] {2560x1080, 2784x1111@185580Khz}^ 98fb4d8502Sjsg */ 99fb4d8502Sjsg 100fb4d8502Sjsg #define CONN_DATA_DETECT(link, hex_data, hex_len, ...) \ 101fb4d8502Sjsg do { \ 102fb4d8502Sjsg (void)(link); \ 103fb4d8502Sjsg DC_LOG_EVENT_DETECTION(__VA_ARGS__); \ 104fb4d8502Sjsg } while (0) 105fb4d8502Sjsg 106fb4d8502Sjsg #define CONN_DATA_LINK_LOSS(link, hex_data, hex_len, ...) \ 107fb4d8502Sjsg do { \ 108fb4d8502Sjsg (void)(link); \ 109fb4d8502Sjsg DC_LOG_EVENT_LINK_LOSS(__VA_ARGS__); \ 110fb4d8502Sjsg } while (0) 111fb4d8502Sjsg 112fb4d8502Sjsg #define CONN_MSG_LT(link, ...) \ 113fb4d8502Sjsg do { \ 114fb4d8502Sjsg (void)(link); \ 115fb4d8502Sjsg DC_LOG_EVENT_LINK_TRAINING(__VA_ARGS__); \ 116fb4d8502Sjsg } while (0) 117fb4d8502Sjsg 118fb4d8502Sjsg #define CONN_MSG_MODE(link, ...) \ 119fb4d8502Sjsg do { \ 120fb4d8502Sjsg (void)(link); \ 121fb4d8502Sjsg DC_LOG_EVENT_MODE_SET(__VA_ARGS__); \ 122fb4d8502Sjsg } while (0) 123fb4d8502Sjsg 124fb4d8502Sjsg /* 125fb4d8502Sjsg * Display Test Next logging 126fb4d8502Sjsg */ 127fb4d8502Sjsg #define DTN_INFO_BEGIN() \ 128*c349dbc7Sjsg dm_dtn_log_begin(dc_ctx, log_ctx) 129fb4d8502Sjsg 130fb4d8502Sjsg #define DTN_INFO(msg, ...) \ 131*c349dbc7Sjsg dm_dtn_log_append_v(dc_ctx, log_ctx, msg, ##__VA_ARGS__) 132fb4d8502Sjsg 133fb4d8502Sjsg #define DTN_INFO_END() \ 134*c349dbc7Sjsg dm_dtn_log_end(dc_ctx, log_ctx) 135fb4d8502Sjsg 136fb4d8502Sjsg #define PERFORMANCE_TRACE_START() \ 137fb4d8502Sjsg unsigned long long perf_trc_start_stmp = dm_get_timestamp(dc->ctx) 138fb4d8502Sjsg 139fb4d8502Sjsg #define PERFORMANCE_TRACE_END() \ 140fb4d8502Sjsg do { \ 141fb4d8502Sjsg unsigned long long perf_trc_end_stmp = dm_get_timestamp(dc->ctx); \ 142fb4d8502Sjsg if (dc->debug.performance_trace) { \ 143fb4d8502Sjsg DC_LOG_PERF_TRACE("%s duration: %lld ticks\n", __func__, \ 144fb4d8502Sjsg perf_trc_end_stmp - perf_trc_start_stmp); \ 145fb4d8502Sjsg } \ 146fb4d8502Sjsg } while (0) 147fb4d8502Sjsg 148fb4d8502Sjsg #define DISPLAY_STATS_BEGIN(entry) (void)(entry) 149fb4d8502Sjsg 150fb4d8502Sjsg #define DISPLAY_STATS(msg, ...) DC_LOG_PERF_TRACE(msg, __VA_ARGS__) 151fb4d8502Sjsg 152fb4d8502Sjsg #define DISPLAY_STATS_END(entry) (void)(entry) 153fb4d8502Sjsg 154*c349dbc7Sjsg #define LOG_GAMMA_WRITE(msg, ...) 155*c349dbc7Sjsg 156fb4d8502Sjsg #endif /* __DAL_LOGGER_INTERFACE_H__ */ 157