1/* 2 Copyright (c) 2002, Thomas Kurschel 3 4 5 Part of Radeon driver 6 7 Fast logger 8 9 As syslog is very slow and tends to loose 10 data if its buffer overflows (which occurs much 11 too often), this module provides a fast (and memory- 12 wasting) logging mechanism. You need a seperate 13 application to retrieve the log. 14 15 Everything is thread-safe. 16*/ 17 18 19#ifndef __LOG_COLL_H__ 20#define __LOG_COLL_H__ 21 22#include <SupportDefs.h> 23 24// by undefining this flag, all logging functions 25// are resolved to empty space, so don't add 26// extra tests in your code 27#undef ENABLE_LOGGING 28//#define ENABLE_LOGGING 29 30 31// add log entry with 0..3 (uint32) data 32#define LOG( li, what ) log( li, what, 0 ) 33#define LOG1( li, what, arg1 ) log( li, what, 1, arg1 ); 34#define LOG2( li, what, arg1, arg2 ) log( li, what, 2, arg1, arg2 ); 35#define LOG3( li, what, arg1, arg2, arg3 ) log( li, what, 3, arg1, arg2, arg3 ); 36 37 38// one log entry 39typedef struct log_entry_t { 40 uint64 tsc; 41 uint16 what; 42 uint8 num_args; 43 uint32 args[1]; 44} log_entry; 45 46struct log_info_t; 47 48#if defined(__cplusplus) 49extern "C" { 50#endif 51 52 53#ifdef ENABLE_LOGGING 54void log( struct log_info_t *li, uint16 what, const uint8 num_args, ... ); 55#else 56#define log( a, b, c... ) 57#endif 58 59 60// define LOG_INCLUDE_STARTUP in your device driver 61#ifdef LOG_INCLUDE_STARTUP 62 63uint32 log_getsize( struct log_info_t *li ); 64void log_getcopy( struct log_info_t *li, void *dest, uint32 max_size ); 65 66#ifdef ENABLE_LOGGING 67 68struct log_info_t *log_init( uint32 size ); 69void log_exit( struct log_info_t *li ); 70 71#else 72 73#define log_init( a ) NULL 74#define log_exit( a ) 75 76#endif 77 78#endif 79 80#if defined(__cplusplus) 81} 82#endif 83 84 85#endif 86