diff options
Diffstat (limited to 'sys/cddl/dev/prototype.c')
-rw-r--r-- | sys/cddl/dev/prototype.c | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/sys/cddl/dev/prototype.c b/sys/cddl/dev/prototype.c new file mode 100644 index 000000000000..6e31f19d5ce6 --- /dev/null +++ b/sys/cddl/dev/prototype.c @@ -0,0 +1,144 @@ +/* + * This file is freeware. You are free to use it and add your own + * license. + * + * $FreeBSD$ + * + */ + +#include <sys/cdefs.h> +#include <sys/param.h> +#include <sys/systm.h> +#include <sys/conf.h> +#include <sys/kernel.h> +#include <sys/module.h> + +#include <sys/dtrace.h> + +static d_open_t prototype_open; +static int prototype_unload(void); +static void prototype_getargdesc(void *, dtrace_id_t, void *, dtrace_argdesc_t *); +static void prototype_provide(void *, dtrace_probedesc_t *); +static void prototype_destroy(void *, dtrace_id_t, void *); +static void prototype_enable(void *, dtrace_id_t, void *); +static void prototype_disable(void *, dtrace_id_t, void *); +static void prototype_load(void *); + +static struct cdevsw prototype_cdevsw = { + .d_version = D_VERSION, + .d_open = prototype_open, + .d_name = "prototype", +}; + +static dtrace_pattr_t prototype_attr = { +{ DTRACE_STABILITY_EVOLVING, DTRACE_STABILITY_EVOLVING, DTRACE_CLASS_COMMON }, +{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_UNKNOWN }, +{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_ISA }, +{ DTRACE_STABILITY_EVOLVING, DTRACE_STABILITY_EVOLVING, DTRACE_CLASS_COMMON }, +{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_ISA }, +}; + +static dtrace_pops_t prototype_pops = { + .dtps_provide = prototype_provide, + .dtps_provide_module = NULL, + .dtps_enable = prototype_enable, + .dtps_disable = prototype_disable, + .dtps_suspend = NULL, + .dtps_resume = NULL, + .dtps_getargdesc = prototype_getargdesc, + .dtps_getargval = NULL, + .dtps_usermode = NULL, + .dtps_destroy = prototype_destroy +}; + +static struct cdev *prototype_cdev; +static dtrace_provider_id_t prototype_id; + +static void +prototype_getargdesc(void *arg, dtrace_id_t id, void *parg, dtrace_argdesc_t *desc) +{ +} + +static void +prototype_provide(void *arg, dtrace_probedesc_t *desc) +{ +} + +static void +prototype_destroy(void *arg, dtrace_id_t id, void *parg) +{ +} + +static void +prototype_enable(void *arg, dtrace_id_t id, void *parg) +{ +} + +static void +prototype_disable(void *arg, dtrace_id_t id, void *parg) +{ +} + +static void +prototype_load(void *dummy) +{ + /* Create the /dev/dtrace/prototype entry. */ + prototype_cdev = make_dev(&prototype_cdevsw, 0, UID_ROOT, GID_WHEEL, 0600, + "dtrace/prototype"); + + if (dtrace_register("prototype", &prototype_attr, DTRACE_PRIV_USER, + NULL, &prototype_pops, NULL, &prototype_id) != 0) + return; +} + + +static int +prototype_unload() +{ + int error = 0; + + if ((error = dtrace_unregister(prototype_id)) != 0) + return (error); + + destroy_dev(prototype_cdev); + + return (error); +} + +static int +prototype_modevent(module_t mod __unused, int type, void *data __unused) +{ + int error = 0; + + switch (type) { + case MOD_LOAD: + break; + + case MOD_UNLOAD: + break; + + case MOD_SHUTDOWN: + break; + + default: + error = EOPNOTSUPP; + break; + + } + + return (error); +} + +static int +prototype_open(struct cdev *dev __unused, int oflags __unused, int devtype __unused, struct thread *td __unused) +{ + return (0); +} + +SYSINIT(prototype_load, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, prototype_load, NULL); +SYSUNINIT(prototype_unload, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, prototype_unload, NULL); + +DEV_MODULE(prototype, prototype_modevent, NULL); +MODULE_VERSION(prototype, 1); +MODULE_DEPEND(prototype, dtrace, 1, 1, 1); +MODULE_DEPEND(prototype, opensolaris, 1, 1, 1); |