Changeset View
Changeset View
Standalone View
Standalone View
sys/cddl/dev/prototype.c
Show All 9 Lines | |||||
#include <sys/param.h> | #include <sys/param.h> | ||||
#include <sys/systm.h> | #include <sys/systm.h> | ||||
#include <sys/conf.h> | #include <sys/conf.h> | ||||
#include <sys/kernel.h> | #include <sys/kernel.h> | ||||
#include <sys/module.h> | #include <sys/module.h> | ||||
#include <sys/dtrace.h> | #include <sys/dtrace.h> | ||||
static d_open_t prototype_open; | |||||
static int prototype_unload(void); | static int prototype_unload(void); | ||||
static void prototype_getargdesc(void *, dtrace_id_t, void *, dtrace_argdesc_t *); | static void prototype_getargdesc(void *, dtrace_id_t, void *, dtrace_argdesc_t *); | ||||
static void prototype_provide(void *, dtrace_probedesc_t *); | static void prototype_provide(void *, dtrace_probedesc_t *); | ||||
static void prototype_destroy(void *, dtrace_id_t, void *); | static void prototype_destroy(void *, dtrace_id_t, void *); | ||||
static void prototype_enable(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_disable(void *, dtrace_id_t, void *); | ||||
static void prototype_load(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 = { | static dtrace_pattr_t prototype_attr = { | ||||
{ DTRACE_STABILITY_EVOLVING, DTRACE_STABILITY_EVOLVING, DTRACE_CLASS_COMMON }, | { 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_UNKNOWN }, | ||||
{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_ISA }, | { DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_ISA }, | ||||
{ DTRACE_STABILITY_EVOLVING, DTRACE_STABILITY_EVOLVING, DTRACE_CLASS_COMMON }, | { DTRACE_STABILITY_EVOLVING, DTRACE_STABILITY_EVOLVING, DTRACE_CLASS_COMMON }, | ||||
{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_ISA }, | { DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_ISA }, | ||||
}; | }; | ||||
static dtrace_pops_t prototype_pops = { | static dtrace_pops_t prototype_pops = { | ||||
.dtps_provide = prototype_provide, | .dtps_provide = prototype_provide, | ||||
.dtps_provide_module = NULL, | .dtps_provide_module = NULL, | ||||
.dtps_enable = prototype_enable, | .dtps_enable = prototype_enable, | ||||
.dtps_disable = prototype_disable, | .dtps_disable = prototype_disable, | ||||
.dtps_suspend = NULL, | .dtps_suspend = NULL, | ||||
.dtps_resume = NULL, | .dtps_resume = NULL, | ||||
.dtps_getargdesc = prototype_getargdesc, | .dtps_getargdesc = prototype_getargdesc, | ||||
.dtps_getargval = NULL, | .dtps_getargval = NULL, | ||||
.dtps_usermode = NULL, | .dtps_usermode = NULL, | ||||
.dtps_destroy = prototype_destroy | .dtps_destroy = prototype_destroy | ||||
}; | }; | ||||
static struct cdev *prototype_cdev; | |||||
static dtrace_provider_id_t prototype_id; | static dtrace_provider_id_t prototype_id; | ||||
static void | static void | ||||
prototype_getargdesc(void *arg, dtrace_id_t id, void *parg, dtrace_argdesc_t *desc) | prototype_getargdesc(void *arg, dtrace_id_t id, void *parg, dtrace_argdesc_t *desc) | ||||
{ | { | ||||
} | } | ||||
static void | static void | ||||
Show All 14 Lines | |||||
static void | static void | ||||
prototype_disable(void *arg, dtrace_id_t id, void *parg) | prototype_disable(void *arg, dtrace_id_t id, void *parg) | ||||
{ | { | ||||
} | } | ||||
static void | static void | ||||
prototype_load(void *dummy) | 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, | if (dtrace_register("prototype", &prototype_attr, DTRACE_PRIV_USER, | ||||
NULL, &prototype_pops, NULL, &prototype_id) != 0) | NULL, &prototype_pops, NULL, &prototype_id) != 0) | ||||
return; | return; | ||||
} | } | ||||
static int | static int | ||||
prototype_unload() | prototype_unload() | ||||
{ | { | ||||
int error = 0; | int error = 0; | ||||
if ((error = dtrace_unregister(prototype_id)) != 0) | if ((error = dtrace_unregister(prototype_id)) != 0) | ||||
return (error); | return (error); | ||||
destroy_dev(prototype_cdev); | |||||
return (error); | return (error); | ||||
} | } | ||||
static int | static int | ||||
prototype_modevent(module_t mod __unused, int type, void *data __unused) | prototype_modevent(module_t mod __unused, int type, void *data __unused) | ||||
{ | { | ||||
int error = 0; | int error = 0; | ||||
Show All 9 Lines | prototype_modevent(module_t mod __unused, int type, void *data __unused) | ||||
default: | default: | ||||
error = EOPNOTSUPP; | error = EOPNOTSUPP; | ||||
break; | break; | ||||
} | } | ||||
return (error); | 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); | 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); | SYSUNINIT(prototype_unload, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, prototype_unload, NULL); | ||||
DEV_MODULE(prototype, prototype_modevent, NULL); | DEV_MODULE(prototype, prototype_modevent, NULL); | ||||
MODULE_VERSION(prototype, 1); | MODULE_VERSION(prototype, 1); | ||||
MODULE_DEPEND(prototype, dtrace, 1, 1, 1); | MODULE_DEPEND(prototype, dtrace, 1, 1, 1); | ||||
MODULE_DEPEND(prototype, opensolaris, 1, 1, 1); | MODULE_DEPEND(prototype, opensolaris, 1, 1, 1); |