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