Blame src/perfctr-2.7.x/linux/drivers/perfctr/init.c

Packit Service a1973e
/* $Id: init.c,v 1.83 2007/10/06 13:02:07 mikpe Exp $
Packit Service a1973e
 * Performance-monitoring counters driver.
Packit Service a1973e
 * Top-level initialisation code.
Packit Service a1973e
 *
Packit Service a1973e
 * Copyright (C) 1999-2007  Mikael Pettersson
Packit Service a1973e
 */
Packit Service a1973e
#include <linux/version.h>
Packit Service a1973e
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
Packit Service a1973e
#include <linux/config.h>
Packit Service a1973e
#endif
Packit Service a1973e
#include <linux/fs.h>
Packit Service a1973e
#include <linux/init.h>
Packit Service a1973e
#include <linux/sched.h>
Packit Service a1973e
#include <linux/device.h>
Packit Service a1973e
#include <linux/perfctr.h>
Packit Service a1973e
Packit Service a1973e
#include "cpumask.h"
Packit Service a1973e
#include "virtual.h"
Packit Service a1973e
#include "version.h"
Packit Service a1973e
Packit Service a1973e
struct perfctr_info perfctr_info;
Packit Service a1973e
Packit Service a1973e
static ssize_t
Packit Service a1973e
driver_version_show(struct class *class, char *buf)
Packit Service a1973e
{
Packit Service a1973e
	return sprintf(buf, "%s\n", VERSION);
Packit Service a1973e
}
Packit Service a1973e
Packit Service a1973e
static ssize_t
Packit Service a1973e
cpu_features_show(struct class *class, char *buf)
Packit Service a1973e
{
Packit Service a1973e
	return sprintf(buf, "%#x\n", perfctr_info.cpu_features);
Packit Service a1973e
}
Packit Service a1973e
Packit Service a1973e
static ssize_t
Packit Service a1973e
cpu_khz_show(struct class *class, char *buf)
Packit Service a1973e
{
Packit Service a1973e
	return sprintf(buf, "%u\n", perfctr_info.cpu_khz);
Packit Service a1973e
}
Packit Service a1973e
Packit Service a1973e
static ssize_t
Packit Service a1973e
tsc_to_cpu_mult_show(struct class *class, char *buf)
Packit Service a1973e
{
Packit Service a1973e
	return sprintf(buf, "%u\n", perfctr_info.tsc_to_cpu_mult);
Packit Service a1973e
}
Packit Service a1973e
Packit Service a1973e
static ssize_t
Packit Service a1973e
state_user_offset_show(struct class *class, char *buf)
Packit Service a1973e
{
Packit Service a1973e
	return sprintf(buf, "%u\n", (unsigned int)offsetof(struct perfctr_cpu_state, user));
Packit Service a1973e
}
Packit Service a1973e
Packit Service a1973e
static ssize_t
Packit Service a1973e
cpus_online_show(struct class *class, char *buf)
Packit Service a1973e
{
Packit Service a1973e
	int ret = cpumask_scnprintf(buf, PAGE_SIZE-1, cpu_online_map);
Packit Service a1973e
	buf[ret++] = '\n';
Packit Service a1973e
	return ret;
Packit Service a1973e
}
Packit Service a1973e
Packit Service a1973e
static ssize_t
Packit Service a1973e
cpus_forbidden_show(struct class *class, char *buf)
Packit Service a1973e
{
Packit Service a1973e
	int ret = cpumask_scnprintf(buf, PAGE_SIZE-1, perfctr_cpus_forbidden_mask);
Packit Service a1973e
	buf[ret++] = '\n';
Packit Service a1973e
	return ret;
Packit Service a1973e
}
Packit Service a1973e
Packit Service a1973e
static struct class_attribute perfctr_class_attrs[] = {
Packit Service a1973e
	__ATTR_RO(driver_version),
Packit Service a1973e
	__ATTR_RO(cpu_features),
Packit Service a1973e
	__ATTR_RO(cpu_khz),
Packit Service a1973e
	__ATTR_RO(tsc_to_cpu_mult),
Packit Service a1973e
	__ATTR_RO(state_user_offset),
Packit Service a1973e
	__ATTR_RO(cpus_online),
Packit Service a1973e
	__ATTR_RO(cpus_forbidden),
Packit Service a1973e
	__ATTR_NULL
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static struct class perfctr_class = {
Packit Service a1973e
	.name		= "perfctr",
Packit Service a1973e
	.class_attrs	= perfctr_class_attrs,
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
char *perfctr_cpu_name __initdata;
Packit Service a1973e
Packit Service a1973e
static int __init perfctr_init(void)
Packit Service a1973e
{
Packit Service a1973e
	int err;
Packit Service a1973e
Packit Service a1973e
	err = perfctr_cpu_init();
Packit Service a1973e
	if (err) {
Packit Service a1973e
		printk(KERN_INFO "perfctr: not supported by this processor\n");
Packit Service a1973e
		return err;
Packit Service a1973e
	}
Packit Service a1973e
	err = vperfctr_init();
Packit Service a1973e
	if (err)
Packit Service a1973e
		return err;
Packit Service a1973e
	err = class_register(&perfctr_class);
Packit Service a1973e
	if (err) {
Packit Service a1973e
		printk(KERN_ERR "perfctr: class initialisation failed\n");
Packit Service a1973e
		return err;
Packit Service a1973e
	}
Packit Service a1973e
	printk(KERN_INFO "perfctr: driver %s, cpu type %s at %u kHz\n",
Packit Service a1973e
	       VERSION,
Packit Service a1973e
	       perfctr_cpu_name,
Packit Service a1973e
	       perfctr_info.cpu_khz);
Packit Service a1973e
	return 0;
Packit Service a1973e
}
Packit Service a1973e
Packit Service a1973e
static void __exit perfctr_exit(void)
Packit Service a1973e
{
Packit Service a1973e
	vperfctr_exit();
Packit Service a1973e
	perfctr_cpu_exit();
Packit Service a1973e
}
Packit Service a1973e
Packit Service a1973e
module_init(perfctr_init)
Packit Service a1973e
module_exit(perfctr_exit)