summaryrefslogtreecommitdiffstats
path: root/src/include/compiler.h
diff options
context:
space:
mode:
authorMichael Brown2007-01-13 17:49:38 +0100
committerMichael Brown2007-01-13 17:49:38 +0100
commit3b77c7aa1b1c42986c621dec97bf2ba3522e41bd (patch)
treeb1496fc9266d8f36670303c4a34ca57400922470 /src/include/compiler.h
parentAlways send EOI. We can't feasibly share interrupts (since we have no (diff)
downloadipxe-3b77c7aa1b1c42986c621dec97bf2ba3522e41bd.tar.gz
ipxe-3b77c7aa1b1c42986c621dec97bf2ba3522e41bd.tar.xz
ipxe-3b77c7aa1b1c42986c621dec97bf2ba3522e41bd.zip
Hex dumps are now integrated into the DBG() framework.
Diffstat (limited to 'src/include/compiler.h')
-rw-r--r--src/include/compiler.h98
1 files changed, 93 insertions, 5 deletions
diff --git a/src/include/compiler.h b/src/include/compiler.h
index 49aaec63..8e5bd87d 100644
--- a/src/include/compiler.h
+++ b/src/include/compiler.h
@@ -127,8 +127,10 @@ __asm__ ( ".equ\tDBGLVL, " DEBUG_SYMBOL_STR );
extern int __attribute__ (( format ( printf, 1, 2 ) ))
dbg_printf ( const char *fmt, ... ) asm ( "printf" );
-extern void __attribute__ (( format ( printf, 2, 3 ) ))
-dbg_printf_autocolour ( void *id, const char *fmt, ... );
+extern void dbg_autocolourise ( unsigned long id );
+extern void dbg_decolourise ( void );
+extern void dbg_hex_dump_da ( unsigned long dispaddr,
+ const void *data, unsigned long len );
/* Compatibility with existing Makefile */
#if DEBUG_SYMBOL >= 1
@@ -146,21 +148,107 @@ dbg_printf_autocolour ( void *id, const char *fmt, ... );
#define DBGLVL_EXTRA 2
#define DBG_EXTRA ( DBGLVL & DBGLVL_EXTRA )
+/**
+ * Print debugging message if we are at a certain debug level
+ *
+ * @v level Debug level
+ * @v ... printf() argument list
+ */
#define DBG_IF( level, ... ) do { \
if ( DBG_ ## level ) { \
dbg_printf ( __VA_ARGS__ ); \
} \
} while ( 0 )
-#define DBGC_IF( level, ... ) do { \
+/**
+ * Print a hex dump if we are at a certain debug level
+ *
+ * @v level Debug level
+ * @v dispaddr Display address
+ * @v data Data to print
+ * @v len Length of data
+ */
+#define DBG_HDA_IF( level, dispaddr, data, len ) do { \
+ if ( DBG_ ## level ) { \
+ union { \
+ unsigned long ul; \
+ typeof ( dispaddr ) raw; \
+ } da; \
+ da.raw = dispaddr; \
+ dbg_hex_dump_da ( da.ul, data, len ); \
+ } \
+ } while ( 0 )
+
+/**
+ * Print a hex dump if we are at a certain debug level
+ *
+ * @v level Debug level
+ * @v data Data to print
+ * @v len Length of data
+ */
+#define DBG_HD_IF( level, data, len ) do { \
+ DBG_HDA_IF ( level, data, data, len ); \
+ } while ( 0 )
+
+/**
+ * Select colour for debug messages if we are at a certain debug level
+ *
+ * @v level Debug level
+ * @v id Message stream ID
+ */
+#define DBG_AC_IF( level, id ) do { \
+ if ( DBG_ ## level ) { \
+ union { \
+ unsigned long ul; \
+ typeof ( id ) raw; \
+ } stream; \
+ stream.raw = id; \
+ dbg_autocolourise ( stream.ul ); \
+ } \
+ } while ( 0 )
+
+/**
+ * Revert colour for debug messages if we are at a certain debug level
+ *
+ * @v level Debug level
+ */
+#define DBG_DC_IF( level ) do { \
if ( DBG_ ## level ) { \
- dbg_printf_autocolour ( __VA_ARGS__ ); \
+ dbg_decolourise(); \
} \
} while ( 0 )
+/* Autocolourising versions of the DBGxxx_IF() macros */
+
+#define DBGC_IF( level, id, ... ) do { \
+ DBG_AC_IF ( level, id ); \
+ DBG_IF ( level, __VA_ARGS__ ); \
+ DBG_DC_IF ( level ); \
+ } while ( 0 )
+
+#define DBGC_HDA_IF( level, id, ... ) do { \
+ DBG_AC_IF ( level, id ); \
+ DBG_HDA_IF ( level, __VA_ARGS__ ); \
+ DBG_DC_IF ( level ); \
+ } while ( 0 )
+
+#define DBGC_HD_IF( level, id, ... ) do { \
+ DBG_AC_IF ( level, id ); \
+ DBG_HD_IF ( level, __VA_ARGS__ ); \
+ DBG_DC_IF ( level ); \
+ } while ( 0 )
+
+/* Versions of the DBGxxx_IF() macros that imply DBGxxx_IF( LOG, ... )*/
+
#define DBG( ... ) DBG_IF ( LOG, __VA_ARGS__ )
-#define DBG2( ... ) DBG_IF ( EXTRA, __VA_ARGS__ )
+#define DBG_HDA( ... ) DBG_HDA_IF ( LOG, __VA_ARGS__ )
+#define DBG_HD( ... ) DBG_HD_IF ( LOG, __VA_ARGS__ )
#define DBGC( ... ) DBGC_IF ( LOG, __VA_ARGS__ )
+#define DBGC_HDA( ... ) DBGC_HDA_IF ( LOG, __VA_ARGS__ )
+#define DBGC_HD( ... ) DBGC_HD_IF ( LOG, __VA_ARGS__ )
+
+/* Backwards compatibility */
+#define DBG2( ... ) DBG_IF ( EXTRA, __VA_ARGS__ )
#if DEBUG_SYMBOL == 0
#define NDEBUG