From 24bc53c351b1a1f24f8a7d52c3c45c6bf63c6f01 Mon Sep 17 00:00:00 2001 From: Marcus Overhagen Date: Mon, 1 Sep 2008 21:25:44 +0000 Subject: [PATCH] ATA kernel tracing functions. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27281 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/kernel/bus_managers/ata/Jamfile | 1 + .../kernel/bus_managers/ata/ata_tracing.cpp | 61 +++++++++++++++++++ .../kernel/bus_managers/ata/ata_tracing.h | 32 ++++++++++ 3 files changed, 94 insertions(+) create mode 100644 src/add-ons/kernel/bus_managers/ata/ata_tracing.cpp create mode 100644 src/add-ons/kernel/bus_managers/ata/ata_tracing.h 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