> > From: Sandy Stutsman <sstutsma@xxxxxxxxxx> > > Allows the usage of Kd_IHVVIDEO_Mask to control print level while debugging > > Signed-off-by: Sameeh Jubran <sameeh@xxxxxxxxxx> > --- > qxldod/driver.cpp | 24 +++++++++++++++++++++++- > qxldod/driver.h | 20 ++++++++++++++++---- > 2 files changed, 39 insertions(+), 5 deletions(-) > > diff --git a/qxldod/driver.cpp b/qxldod/driver.cpp > index 4d1913c..d9946aa 100755 > --- a/qxldod/driver.cpp > +++ b/qxldod/driver.cpp > @@ -667,7 +667,29 @@ void DebugPrintFunc(const char *format, ...) > va_start(list, format); > vDbgPrintEx(DPFLTR_DEFAULT_ID, 9 | DPFLTR_MASK, format, list); > } > + > +kd_debug_printer::kd_debug_printer(ULONG level) > +{ > + static const ULONG xlate[] = { 0, 0, 1, 2, 3 }; > + if (!level || level > 5) { > + _level = 0xffffffff; > + > + } > + else { > + _level = xlate[level - 1]; > + } > +} > + > +void kd_debug_printer::print(const char * fmt, ...) > +{ > + if (_level == 0xffffffff) { > + return; > + } > + va_list list; > + va_start(list, fmt); > + vDbgPrintEx(DPFLTR_IHVVIDEO_ID, _level, fmt, list); > + va_end(list); > +} > #endif > > #pragma code_seg(pop) // End Non-Paged Code > - > diff --git a/qxldod/driver.h b/qxldod/driver.h > index e64c098..752f8e4 100755 > --- a/qxldod/driver.h > +++ b/qxldod/driver.h > @@ -208,15 +208,27 @@ DodSystemDisplayWrite( > _In_ UINT PositionY); > > #if DBG > +class kd_debug_printer > +{ > +public: > + kd_debug_printer(ULONG level); > + void print(const char * fmt, ...); > +private: > + ULONG _level; > + }; > > extern int nDebugLevel; > void DebugPrintFuncSerial(const char *format, ...); > > -void DebugPrintFunc(const char *format, ...); > +void DebugPrintFunc(const char *format, ...); > + > +#define DbgPrint(level, line) \ > + if (level > nDebugLevel) {} \ > + else { \ > + DebugPrintFuncSerial line; \ > + } \ > + kd_debug_printer(level).print line > > -#define DbgPrint(level, line) \ > - if (level > nDebugLevel) {} \ > - else DebugPrintFuncSerial line > #else > #define DbgPrint(level, line) > #endif This can be done much easier with variadic macros and a simple function. void DebugPrint(int level, const char *fmt, ...); #define DbgExpandArguments(...) __VA_ARGS__ #define DbgPrint(level, line) do { \ if (level <= nDebugLevel) DebugPrintFuncSerial line; \ DebugPrint(level, DbgExpandArguments line); \ } while(0) and the definition void DebugPrint(int level, const char *fmt, ...) { static const ULONG xlate[] = { 0, 0, 1, 2, 3 }; if (level <= 0 || level > 5) return; va_list list; va_start(list, fmt); vDbgPrintEx(DPFLTR_IHVVIDEO_ID, xlate[level - 1], fmt, list); va_end(list); } Cannot test but I can see the print is duplicated to DebugPrintFuncSerial and vDbgPrintEx. Is this wanted? Frediano _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel