87 lines
2.9 KiB
C
87 lines
2.9 KiB
C
/* Copyright (c) 2002,2008-2011, Code Aurora Forum. All rights reserved.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 and
|
|
* only version 2 as published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
*/
|
|
|
|
#include <linux/debugfs.h>
|
|
|
|
#include "kgsl.h"
|
|
|
|
/*default log levels is error for everything*/
|
|
#define KGSL_LOG_LEVEL_DEFAULT 3
|
|
#define KGSL_LOG_LEVEL_MAX 7
|
|
|
|
struct dentry *kgsl_debugfs_dir;
|
|
|
|
static inline int kgsl_log_set(unsigned int *log_val, void *data, u64 val)
|
|
{
|
|
*log_val = min((unsigned int)val, (unsigned int)KGSL_LOG_LEVEL_MAX);
|
|
return 0;
|
|
}
|
|
|
|
#define KGSL_DEBUGFS_LOG(__log) \
|
|
static int __log ## _set(void *data, u64 val) \
|
|
{ \
|
|
struct kgsl_device *device = data; \
|
|
return kgsl_log_set(&device->__log, data, val); \
|
|
} \
|
|
static int __log ## _get(void *data, u64 *val) \
|
|
{ \
|
|
struct kgsl_device *device = data; \
|
|
*val = device->__log; \
|
|
return 0; \
|
|
} \
|
|
DEFINE_SIMPLE_ATTRIBUTE(__log ## _fops, \
|
|
__log ## _get, __log ## _set, "%llu\n"); \
|
|
|
|
KGSL_DEBUGFS_LOG(drv_log);
|
|
KGSL_DEBUGFS_LOG(cmd_log);
|
|
KGSL_DEBUGFS_LOG(ctxt_log);
|
|
KGSL_DEBUGFS_LOG(mem_log);
|
|
KGSL_DEBUGFS_LOG(pwr_log);
|
|
|
|
void kgsl_device_debugfs_init(struct kgsl_device *device)
|
|
{
|
|
if (kgsl_debugfs_dir && !IS_ERR(kgsl_debugfs_dir))
|
|
device->d_debugfs = debugfs_create_dir(device->name,
|
|
kgsl_debugfs_dir);
|
|
|
|
if (!device->d_debugfs || IS_ERR(device->d_debugfs))
|
|
return;
|
|
|
|
device->cmd_log = KGSL_LOG_LEVEL_DEFAULT;
|
|
device->ctxt_log = KGSL_LOG_LEVEL_DEFAULT;
|
|
device->drv_log = KGSL_LOG_LEVEL_DEFAULT;
|
|
device->mem_log = KGSL_LOG_LEVEL_DEFAULT;
|
|
device->pwr_log = KGSL_LOG_LEVEL_DEFAULT;
|
|
|
|
debugfs_create_file("log_level_cmd", 0644, device->d_debugfs, device,
|
|
&cmd_log_fops);
|
|
debugfs_create_file("log_level_ctxt", 0644, device->d_debugfs, device,
|
|
&ctxt_log_fops);
|
|
debugfs_create_file("log_level_drv", 0644, device->d_debugfs, device,
|
|
&drv_log_fops);
|
|
debugfs_create_file("log_level_mem", 0644, device->d_debugfs, device,
|
|
&mem_log_fops);
|
|
debugfs_create_file("log_level_pwr", 0644, device->d_debugfs, device,
|
|
&pwr_log_fops);
|
|
}
|
|
|
|
void kgsl_core_debugfs_init(void)
|
|
{
|
|
kgsl_debugfs_dir = debugfs_create_dir("kgsl", 0);
|
|
}
|
|
|
|
void kgsl_core_debugfs_close(void)
|
|
{
|
|
debugfs_remove_recursive(kgsl_debugfs_dir);
|
|
}
|