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

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