gator: ARM DS-5.6 Streamline gator driver
[android-sdk/arm-ds5-gator.git] / gator.h
1 /**
2  * Copyright (C) ARM Limited 2010-2011. All rights reserved.
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation.
7  */
9 #ifndef GATOR_H_
10 #define GATOR_H_
12 #include <linux/version.h>
13 #include <linux/fs.h>
14 #include <linux/mm.h>
15 #include <linux/list.h>
17 /******************************************************************************
18  * Filesystem
19  ******************************************************************************/
20 int gatorfs_create_file_perm(struct super_block *sb, struct dentry *root,
21         char const *name, const struct file_operations *fops, int perm);
23 struct dentry *gatorfs_mkdir(struct super_block *sb,
24         struct dentry *root, char const *name);
26 int gatorfs_create_ulong(struct super_block *sb, struct dentry *root,
27         char const *name, unsigned long *val);
29 int gatorfs_create_ro_ulong(struct super_block *sb, struct dentry *root,
30         char const *name, unsigned long *val);
32 void gator_op_create_files(struct super_block *sb, struct dentry *root);
34 /******************************************************************************
35  * Tracepoints
36  ******************************************************************************/
37 #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 32)
38 #       error Kernels prior to 2.6.32 not supported
39 #elif LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 35)
40 #       define GATOR_DEFINE_PROBE(probe_name, proto) \
41                 static void probe_##probe_name(PARAMS(proto))
42 #       define GATOR_REGISTER_TRACE(probe_name) \
43                 register_trace_##probe_name(probe_##probe_name)
44 #       define GATOR_UNREGISTER_TRACE(probe_name) \
45                 unregister_trace_##probe_name(probe_##probe_name)
46 #else
47 #       define GATOR_DEFINE_PROBE(probe_name, proto) \
48                 static void probe_##probe_name(void *data, PARAMS(proto))
49 #       define GATOR_REGISTER_TRACE(probe_name) \
50                 register_trace_##probe_name(probe_##probe_name, NULL)
51 #       define GATOR_UNREGISTER_TRACE(probe_name) \
52                 unregister_trace_##probe_name(probe_##probe_name, NULL)
53 #endif
55 /******************************************************************************
56  * Events
57  ******************************************************************************/
58 struct gator_interface {
59         int  (*create_files)(struct super_block *sb, struct dentry *root);
60         int  (*start)(void);
61         void (*stop)(void);
62         void (*online)(void);
63         void (*offline)(void);
64         int  (*read)(int **buffer);
65         struct list_head list;
66 };
68 #define gator_events_init(initfn) \
69         static inline int __gator_events_init_test(void) \
70         { return initfn(); }
72 int gator_events_install(struct gator_interface *interface);
73 int gator_events_get_key(void);
74 extern u32 gator_cpuid(void);
76 extern unsigned long gator_net_traffic;
79 #endif // GATOR_H_