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