2 * This file is freeware. You are free to use it and add your own
10 #include <sys/param.h>
11 #include <sys/systm.h>
13 #include <sys/kernel.h>
14 #include <sys/module.h>
16 #include <sys/dtrace.h>
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 *);
27 static struct cdevsw prototype_cdevsw = {
28 .d_version = D_VERSION,
29 .d_open = prototype_open,
30 .d_name = "prototype",
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 },
41 static dtrace_pops_t prototype_pops = {
42 .dtps_provide = prototype_provide,
43 .dtps_provide_module = NULL,
44 .dtps_enable = prototype_enable,
45 .dtps_disable = prototype_disable,
48 .dtps_getargdesc = prototype_getargdesc,
49 .dtps_getargval = NULL,
50 .dtps_usermode = NULL,
51 .dtps_destroy = prototype_destroy
54 static struct cdev *prototype_cdev;
55 static dtrace_provider_id_t prototype_id;
58 prototype_getargdesc(void *arg, dtrace_id_t id, void *parg, dtrace_argdesc_t *desc)
63 prototype_provide(void *arg, dtrace_probedesc_t *desc)
68 prototype_destroy(void *arg, dtrace_id_t id, void *parg)
73 prototype_enable(void *arg, dtrace_id_t id, void *parg)
78 prototype_disable(void *arg, dtrace_id_t id, void *parg)
83 prototype_load(void *dummy)
86 * Create the /dev/dtrace/prototype entry.
87 * XXX: Remove this if the provider does not need any customs ioctls.
89 prototype_cdev = make_dev(&prototype_cdevsw, 0, UID_ROOT, GID_WHEEL, 0600,
92 if (dtrace_register("prototype", &prototype_attr, DTRACE_PRIV_USER,
93 NULL, &prototype_pops, NULL, &prototype_id) != 0)
99 prototype_unload(void)
103 if ((error = dtrace_unregister(prototype_id)) != 0)
106 destroy_dev(prototype_cdev);
112 prototype_modevent(module_t mod __unused, int type, void *data __unused)
136 prototype_open(struct cdev *dev __unused, int oflags __unused, int devtype __unused, struct thread *td __unused)
141 SYSINIT(prototype_load, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, prototype_load, NULL);
142 SYSUNINIT(prototype_unload, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, prototype_unload, NULL);
144 DEV_MODULE(prototype, prototype_modevent, NULL);
145 MODULE_VERSION(prototype, 1);
146 MODULE_DEPEND(prototype, dtrace, 1, 1, 1);
147 MODULE_DEPEND(prototype, opensolaris, 1, 1, 1);