diff --git a/src/add-ons/kernel/bus_managers/ata/Jamfile b/src/add-ons/kernel/bus_managers/ata/Jamfile index ef2d8bff52..1b2bda095f 100644 --- a/src/add-ons/kernel/bus_managers/ata/Jamfile +++ b/src/add-ons/kernel/bus_managers/ata/Jamfile @@ -5,6 +5,7 @@ UsePrivateKernelHeaders ; KernelAddon ide : ata.c + ata_tracing.cpp ata_request.c atapi.c channels.c diff --git a/src/add-ons/kernel/bus_managers/ata/ata_tracing.cpp b/src/add-ons/kernel/bus_managers/ata/ata_tracing.cpp new file mode 100644 index 0000000000..11a4ddc2c7 --- /dev/null +++ b/src/add-ons/kernel/bus_managers/ata/ata_tracing.cpp @@ -0,0 +1,61 @@ +#include +#include + +#include "ata_tracing.h" +#include "ide_internal.h" + +#if ATA_TRACING + +class ATATraceEntry : public AbstractTraceEntry { + public: + ATATraceEntry(int bus, int device, const char *info) + : fBus(bus) + , fDevice(device) + { + strlcpy(fInfo, info, sizeof(fInfo)); + Initialized(); + } + + void AddDump(TraceOutput& out, const char* name) + { + out.Print("ata"); + out.Print(" - %s - ", name); + out.Print("bus %d", fBus); + out.Print("device %d", fDevice); + out.Print("%s", fInfo); + } + + int fBus; + int fDevice; + char fInfo[200]; +}; + + +extern "C" void +__ata_trace_device(ide_device_info *dev, const char *fmt, ...) +{ + char info[200]; + va_list ap; + + va_start(ap, fmt); + vsnprintf(info, sizeof(info), fmt, ap); + va_end(ap); + + new(std::nothrow) ATATraceEntry(dev->bus->path_id, dev->is_device1, info); +} + + +extern "C" void +__ata_trace_bus_device(ide_bus_info *bus, int dev, const char *fmt, ...) +{ + char info[200]; + va_list ap; + + va_start(ap, fmt); + vsnprintf(info, sizeof(info), fmt, ap); + va_end(ap); + + new(std::nothrow) ATATraceEntry(bus->path_id, dev, info); +} + +#endif diff --git a/src/add-ons/kernel/bus_managers/ata/ata_tracing.h b/src/add-ons/kernel/bus_managers/ata/ata_tracing.h new file mode 100644 index 0000000000..148baba189 --- /dev/null +++ b/src/add-ons/kernel/bus_managers/ata/ata_tracing.h @@ -0,0 +1,32 @@ +/* + * Copyright 2008, Marcus Overhagen. All rights reserved. + * Distributed under the terms of the MIT License. + */ + +#include "tracing_config.h" + +#if ATA_TRACING + + struct ide_bus_info; + struct ide_device_info; + +#ifdef __cplusplus + extern "C" { +#endif + + void __ata_trace_device(struct ide_device_info *dev, const char *fmt, ...); + void __ata_trace_bus_device(struct ide_bus_info *bus, int dev, const char *fmt, ...); + +#ifdef __cplusplus + } +#endif + + #define T(dev, args...) __ata_trace_device(dev, args) + #define T2(bus, dev, args...) __ata_trace_bus_device(bus, dev, args) + +#else + + #define T(x...) + #define T2(x...) + +#endif