diff --git a/src/add-ons/kernel/bus_managers/ata/ATATracing.cpp b/src/add-ons/kernel/bus_managers/ata/ATATracing.cpp new file mode 100644 index 0000000000..2d48b9b2b9 --- /dev/null +++ b/src/add-ons/kernel/bus_managers/ata/ATATracing.cpp @@ -0,0 +1,31 @@ +/* + * Copyright 2009, Michael Lotz, mmlr@mlotz.ch. + * Distributed under the terms of the MIT License. + */ + +#include "ATATracing.h" + +#include + +static char sTraceBuffer[256]; +static uint32 sTraceBufferOffset = 0; + +void +ata_trace_printf(uint32 flags, const char *format, ...) +{ + va_list arguments; + va_start(arguments, format); + sTraceBufferOffset += vsnprintf(sTraceBuffer + sTraceBufferOffset, + sizeof(sTraceBuffer) - sTraceBufferOffset, format, arguments); + va_end(arguments); + + if (flags & ATA_TRACE_FLUSH) { +#if ATA_TRACING + ktrace_printf(sTraceBuffer); +#endif + if (flags & ATA_TRACE_SYSLOG) + dprintf(sTraceBuffer); + + sTraceBufferOffset = 0; + } +} diff --git a/src/add-ons/kernel/bus_managers/ata/ATATracing.h b/src/add-ons/kernel/bus_managers/ata/ATATracing.h index 9ea60cc382..e779f5bfea 100644 --- a/src/add-ons/kernel/bus_managers/ata/ATATracing.h +++ b/src/add-ons/kernel/bus_managers/ata/ATATracing.h @@ -5,16 +5,24 @@ #ifndef ATA_TRACING_H #define ATA_TRACING_H -//#define TRACE_ATA -#ifdef TRACE_ATA +#include + +#define ATA_TRACE_START 0x00 +#define ATA_TRACE_FLUSH 0x01 +#define ATA_TRACE_SYSLOG 0x02 +#define ATA_TRACE_FLUSH_SYSLOG 0x03 + +#if ATA_TRACING #define TRACE(x...) { \ - dprintf("ata%s: ", _DebugContext()); \ - dprintf(x); \ + ata_trace_printf(ATA_TRACE_START, \ + "ata%s: ", _DebugContext()); \ + ata_trace_printf(ATA_TRACE_FLUSH, x); \ } #define TRACE_FUNCTION(x...) { \ - dprintf("ata%s: %s: ", _DebugContext(), \ + ata_trace_printf(ATA_TRACE_START, \ + "ata%s: %s: ", _DebugContext(), \ __FUNCTION__); \ - dprintf(x); \ + ata_trace_printf(ATA_TRACE_FLUSH, x); \ } #else #define TRACE(x...) /* nothing */ @@ -22,14 +30,18 @@ #endif #define TRACE_ALWAYS(x...) { \ - dprintf("ata%s: ", _DebugContext()); \ - dprintf(x); \ + ata_trace_printf(ATA_TRACE_START, \ + "ata%s: ", _DebugContext()); \ + ata_trace_printf(ATA_TRACE_FLUSH_SYSLOG, x); \ } #define TRACE_ERROR(x...) { \ - dprintf("ata%s error: ", _DebugContext()); \ - dprintf(x); \ + ata_trace_printf(ATA_TRACE_START, \ + "ata%s error: ", _DebugContext()); \ + ata_trace_printf(ATA_TRACE_FLUSH_SYSLOG, x); \ } +void ata_trace_printf(uint32 flags, const char *format, ...); + inline const char * _DebugContext() { diff --git a/src/add-ons/kernel/bus_managers/ata/Jamfile b/src/add-ons/kernel/bus_managers/ata/Jamfile index 522eaf4fa7..b6025d2b04 100644 --- a/src/add-ons/kernel/bus_managers/ata/Jamfile +++ b/src/add-ons/kernel/bus_managers/ata/Jamfile @@ -27,4 +27,5 @@ KernelAddon ata : ATAModule.cpp ATAPIDevice.cpp ATARequest.cpp + ATATracing.cpp ;