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