42#include <linux/major.h>
43#include <linux/slab.h>
44#include <linux/mutex.h>
45#include <linux/proc_fs.h>
46#include <linux/seq_file.h>
47#include <linux/stat.h>
48#include <linux/init.h>
49#include <linux/device.h>
50#include <linux/tty.h>
51#include <linux/kmod.h>
52#include <linux/smp_lock.h>
53
54
55
56
57static LIST_HEAD(misc_list);
58static DEFINE_MUTEX(misc_mtx);
59
60
61
62
63#define DYNAMIC_MINORS 64
64static unsigned char misc_minors[DYNAMIC_MINORS / 8];
65
66extern int pmu_device_init(void);
67
68#ifdef CONFIG_PROC_FS
69static void *misc_seq_start(struct seq_file *seq, loff_t *pos)
70{
71 mutex_lock(&misc_mtx);
72 return seq_list_start(&misc_list, *pos);
73}
74
75static void *misc_seq_next(struct seq_file *seq, void *v, loff_t *pos)
76{
77 return seq_list_next(v, &misc_list, pos);
78}
79
80static void misc_seq_stop(struct seq_file *seq, void *v)
81{
82 mutex_unlock(&misc_mtx);