1/* 2 Copyright (c) 2002, Thomas Kurschel 3 4 5 Part of Radeon driver 6 7 Extended debugging functions 8*/ 9 10 11#ifndef __DEBUG_EXT_H__ 12#define __DEBUG_EXT_H__ 13 14// this is a dprintf wrapper 15// 16// there are three kinds of messages: 17// flow: used to trace execution 18// info: tells things that are important but not an error 19// error: used if something has gone wrong 20// 21// common usage is 22// SHOW_{FLOW,INFO,ERROR}( seriousness, format string, parameters... ); 23// SHOW_{FLOW,INFO,ERROR}0( seriousness, string ); 24// 25// with 26// seriousness: the smaller the more serious (0..3) 27// format string, parameters: normal printf stuff 28// 29// to specify the module that created the message you have 30// to define a string called 31// DEBUG_MSG_PREFIX 32// you dynamically speficify the maximum seriousness level by defining 33// the following variables/macros 34// debug_level_flow 35// debug_level_info 36// debug_level_error 37// 38// you _can_ statically specify the maximum seriuosness level by defining 39// DEBUG_MAX_LEVEL_FLOW 40// DEBUG_MAX_LEVEL_INFO 41// DEBUG_MAX_LEVEL_ERRROR 42// 43// you _can_ ask to delay execution after each printed message 44// by defining the duration (in ms) via 45// DEBUG_WAIT_ON_MSG (for flow and info) 46// DEBUG_WAIT_ON_ERROR (for error) 47 48#ifdef DEBUG_WAIT_ON_MSG 49#define DEBUG_WAIT snooze( DEBUG_WAIT_ON_MSG ); 50#else 51#define DEBUG_WAIT 52#endif 53 54#ifdef DEBUG_WAIT_ON_ERROR 55#define DEBUG_WAIT_ERROR snooze( DEBUG_WAIT_ON_ERROR ); 56#else 57#define DEBUG_WAIT_ERROR 58#endif 59 60#ifndef DEBUG_MAX_LEVEL_FLOW 61#define DEBUG_MAX_LEVEL_FLOW 4 62#endif 63 64#ifndef DEBUG_MAX_LEVEL_INFO 65#define DEBUG_MAX_LEVEL_INFO 4 66#endif 67 68#ifndef DEBUG_MAX_LEVEL_ERROR 69#define DEBUG_MAX_LEVEL_ERROR 4 70#endif 71 72#ifndef DEBUG_MSG_PREFIX 73#error you need to define DEBUG_MSG_PREFIX with the module name 74#endif 75 76#define FUNC_NAME DEBUG_MSG_PREFIX, __FUNCTION__ 77 78#define SHOW_FLOW(seriousness, format, param...) \ 79 do { if( seriousness <= debug_level_flow && seriousness <= DEBUG_MAX_LEVEL_FLOW ) { \ 80 dprintf( "%s%s: " format "\n", FUNC_NAME, param ); DEBUG_WAIT \ 81 }} while( 0 ) 82 83#define SHOW_FLOW0(seriousness, format) \ 84 do { if( seriousness <= debug_level_flow && seriousness <= DEBUG_MAX_LEVEL_FLOW ) { \ 85 dprintf( "%s%s: " format "\n", FUNC_NAME); DEBUG_WAIT \ 86 }} while( 0 ) 87 88#define SHOW_INFO(seriousness, format, param...) \ 89 do { if( seriousness <= debug_level_info && seriousness <= DEBUG_MAX_LEVEL_INFO ) { \ 90 dprintf( "%s%s: " format "\n", FUNC_NAME, param ); DEBUG_WAIT \ 91 }} while( 0 ) 92 93#define SHOW_INFO0(seriousness, format) \ 94 do { if( seriousness <= debug_level_info && seriousness <= DEBUG_MAX_LEVEL_INFO ) { \ 95 dprintf( "%s%s: " format "\n", FUNC_NAME); DEBUG_WAIT \ 96 }} while( 0 ) 97 98#define SHOW_ERROR(seriousness, format, param...) \ 99 do { if( seriousness <= debug_level_error && seriousness <= DEBUG_MAX_LEVEL_ERROR ) { \ 100 dprintf( "%s%s: " format "\n", FUNC_NAME, param ); DEBUG_WAIT_ERROR \ 101 }} while( 0 ) 102 103#define SHOW_ERROR0(seriousness, format) \ 104 do { if( seriousness <= debug_level_error && seriousness <= DEBUG_MAX_LEVEL_ERROR ) { \ 105 dprintf( "%s%s: " format "\n", FUNC_NAME); DEBUG_WAIT_ERROR \ 106 }} while( 0 ) 107 108#endif 109