⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 log_coll.c

📁 ati driver
💻 C
字号:
/*	Copyright (c) 2002, Thomas Kurschel	Part of Radeon driver			Both kernel and user space part.	(init and clean-up must be done in	kernel space).*/#include <KernelExport.h>#include <stdlib.h>#include <stdarg.h>#include <perfmon_kernel.h>#include "log_coll.h"#include <OS.h>#include <string.h>typedef struct log_info_t {	char *log_buffer;	uint32 log_buffer_len;	uint32 log_buffer_pos;	area_id area;} log_info;#ifdef ENABLE_LOGGING// write one log entryvoid log( log_info *li, uint16 what, const uint8 num_args, ... ){	uint32 pos;	va_list vl;	log_entry *entry;	uint32 i;	uint32 entry_size;		entry_size = sizeof( log_entry ) + (num_args - 1) * sizeof( uint32 );	pos = atomic_add( &li->log_buffer_pos, entry_size );			if( li->log_buffer_pos > li->log_buffer_len ) {		atomic_add( &li->log_buffer_pos, -entry_size );		return;	}		entry = (log_entry *)&li->log_buffer[pos];		entry->tsc = read_tsc();	entry->what = what;	entry->num_args = num_args;		va_start( vl, num_args );	for( i = 0; i < num_args; ++i ) {		entry->args[i] = va_arg( vl, uint32 );	}	va_end( vl );}#ifdef LOG_INCLUDE_STARTUP// create log bufferlog_info *log_init( uint32 size ){	log_info *li;	area_id area;	// buffer must be accessible from user mem	// to allow logging from there as well;	// you cannot clone this area as there are	// pointers which would break (it wouldn't be	// hard to get rid of them, but I don't care	// and keep it as simple as possible)	area = create_area( "fast_logger", 		(void **)&li, B_ANY_KERNEL_ADDRESS, 		(sizeof( log_info ) + size + (B_PAGE_SIZE - 1)) & ~(B_PAGE_SIZE - 1), 		B_FULL_LOCK, B_READ_AREA | B_WRITE_AREA );			if( area < 0 )		panic( "Radeon Fast logger: cannot allocate %ld byte for logging data\n", size );	li->area = area;	li->log_buffer = (char *)li + sizeof( log_info );	li->log_buffer_len = size;	li->log_buffer_pos = 0;		return li;}// clean-up loggingvoid log_exit( log_info *li ){	li->log_buffer_pos = 0;	//free( li->log_buffer );	delete_area( li->area );}#endif#endif#ifdef LOG_INCLUDE_STARTUP// get *current* size of logging datauint32 log_getsize( log_info *li ){	if( li == NULL )		return 0;			dprintf( "RADEON -- log_getsize: log_pos %ld\n", li->log_buffer_pos );	return li->log_buffer_pos;}// get up to max_size bytes of logging datavoid log_getcopy( log_info *li, void *dest, uint32 max_size ){	if( li == NULL )		return;			dprintf( "RADEON -- log_getcopy: max_size %ld, log_pos %ld\n", 		max_size, li->log_buffer_pos );	memcpy( dest, li->log_buffer, min( li->log_buffer_pos, max_size ));		li->log_buffer_pos = 0;}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -