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