]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - sys/cddl/dev/prototype.c
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / sys / cddl / dev / prototype.c
1 /*
2  * This file is freeware. You are free to use it and add your own
3  * license.
4  *
5  * $FreeBSD$
6  *
7  */
8
9 #include <sys/cdefs.h>
10 #include <sys/param.h>
11 #include <sys/systm.h>
12 #include <sys/conf.h>
13 #include <sys/kernel.h>
14 #include <sys/module.h>
15
16 #include <sys/dtrace.h>
17
18 static d_open_t prototype_open;
19 static int      prototype_unload(void);
20 static void     prototype_getargdesc(void *, dtrace_id_t, void *, dtrace_argdesc_t *);
21 static void     prototype_provide(void *, dtrace_probedesc_t *);
22 static void     prototype_destroy(void *, dtrace_id_t, void *);
23 static void     prototype_enable(void *, dtrace_id_t, void *);
24 static void     prototype_disable(void *, dtrace_id_t, void *);
25 static void     prototype_load(void *);
26
27 static struct cdevsw prototype_cdevsw = {
28         .d_version      = D_VERSION,
29         .d_open         = prototype_open,
30         .d_name         = "prototype",
31 };
32
33 static dtrace_pattr_t prototype_attr = {
34 { DTRACE_STABILITY_EVOLVING, DTRACE_STABILITY_EVOLVING, DTRACE_CLASS_COMMON },
35 { DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_UNKNOWN },
36 { DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_ISA },
37 { DTRACE_STABILITY_EVOLVING, DTRACE_STABILITY_EVOLVING, DTRACE_CLASS_COMMON },
38 { DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_ISA },
39 };
40
41 static dtrace_pops_t prototype_pops = {
42         prototype_provide,
43         NULL,
44         prototype_enable,
45         prototype_disable,
46         NULL,
47         NULL,
48         prototype_getargdesc,
49         NULL,
50         NULL,
51         prototype_destroy
52 };
53
54 static struct cdev              *prototype_cdev;
55 static dtrace_provider_id_t     prototype_id;
56
57 static void
58 prototype_getargdesc(void *arg, dtrace_id_t id, void *parg, dtrace_argdesc_t *desc)
59 {
60 }
61
62 static void
63 prototype_provide(void *arg, dtrace_probedesc_t *desc)
64 {
65 }
66
67 static void
68 prototype_destroy(void *arg, dtrace_id_t id, void *parg)
69 {
70 }
71
72 static void
73 prototype_enable(void *arg, dtrace_id_t id, void *parg)
74 {
75 }
76
77 static void
78 prototype_disable(void *arg, dtrace_id_t id, void *parg)
79 {
80 }
81
82 static void
83 prototype_load(void *dummy)
84 {
85         /* Create the /dev/dtrace/prototype entry. */
86         prototype_cdev = make_dev(&prototype_cdevsw, 0, UID_ROOT, GID_WHEEL, 0600,
87             "dtrace/prototype");
88
89         if (dtrace_register("prototype", &prototype_attr, DTRACE_PRIV_USER,
90             NULL, &prototype_pops, NULL, &prototype_id) != 0)
91                 return;
92 }
93
94
95 static int
96 prototype_unload()
97 {
98         int error = 0;
99
100         if ((error = dtrace_unregister(prototype_id)) != 0)
101                 return (error);
102
103         destroy_dev(prototype_cdev);
104
105         return (error);
106 }
107
108 static int
109 prototype_modevent(module_t mod __unused, int type, void *data __unused)
110 {
111         int error = 0;
112
113         switch (type) {
114         case MOD_LOAD:
115                 break;
116
117         case MOD_UNLOAD:
118                 break;
119
120         case MOD_SHUTDOWN:
121                 break;
122
123         default:
124                 error = EOPNOTSUPP;
125                 break;
126
127         }
128
129         return (error);
130 }
131
132 static int
133 prototype_open(struct cdev *dev __unused, int oflags __unused, int devtype __unused, struct thread *td __unused)
134 {
135         return (0);
136 }
137
138 SYSINIT(prototype_load, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, prototype_load, NULL);
139 SYSUNINIT(prototype_unload, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, prototype_unload, NULL);
140
141 DEV_MODULE(prototype, prototype_modevent, NULL);
142 MODULE_VERSION(prototype, 1);
143 MODULE_DEPEND(prototype, dtrace, 1, 1, 1);
144 MODULE_DEPEND(prototype, opensolaris, 1, 1, 1);