1*a288e5a9SJoshua M. Clulow /*
2*a288e5a9SJoshua M. Clulow  * This file and its contents are supplied under the terms of the
3*a288e5a9SJoshua M. Clulow  * Common Development and Distribution License ("CDDL"), version 1.0.
4*a288e5a9SJoshua M. Clulow  * You may only use this file in accordance with the terms of version
5*a288e5a9SJoshua M. Clulow  * 1.0 of the CDDL.
6*a288e5a9SJoshua M. Clulow  *
7*a288e5a9SJoshua M. Clulow  * A full copy of the text of the CDDL should have accompanied this
8*a288e5a9SJoshua M. Clulow  * source.  A copy of the CDDL is also available via the Internet at
9*a288e5a9SJoshua M. Clulow  * http://www.illumos.org/license/CDDL.
10*a288e5a9SJoshua M. Clulow  */
11*a288e5a9SJoshua M. Clulow /*
12*a288e5a9SJoshua M. Clulow  * Copyright (c) 2013, Joyent, Inc. All rights reserved.
13*a288e5a9SJoshua M. Clulow  */
14*a288e5a9SJoshua M. Clulow 
15*a288e5a9SJoshua M. Clulow #include "ddi_periodic.h"
16*a288e5a9SJoshua M. Clulow 
17*a288e5a9SJoshua M. Clulow #include <mdb/mdb_modapi.h>
18*a288e5a9SJoshua M. Clulow #include <sys/ddi_periodic.h>
19*a288e5a9SJoshua M. Clulow #include <sys/sysmacros.h>
20*a288e5a9SJoshua M. Clulow #include <stdio.h>
21*a288e5a9SJoshua M. Clulow 
22*a288e5a9SJoshua M. Clulow /*ARGSUSED*/
23*a288e5a9SJoshua M. Clulow int
dprinfo(uintptr_t addr,uint_t flags,int argc,const mdb_arg_t * argv)24*a288e5a9SJoshua M. Clulow dprinfo(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
25*a288e5a9SJoshua M. Clulow {
26*a288e5a9SJoshua M. Clulow 	char prflags[4];
27*a288e5a9SJoshua M. Clulow 	ddi_periodic_impl_t dpr;
28*a288e5a9SJoshua M. Clulow 	boolean_t verbose = B_FALSE;
29*a288e5a9SJoshua M. Clulow 
30*a288e5a9SJoshua M. Clulow 	if (!(flags & DCMD_ADDRSPEC)) {
31*a288e5a9SJoshua M. Clulow 		if (mdb_walk_dcmd("ddi_periodic", "ddi_periodic", argc, argv)
32*a288e5a9SJoshua M. Clulow 		    == -1) {
33*a288e5a9SJoshua M. Clulow 			mdb_warn("cannot walk 'ddi_periodic'");
34*a288e5a9SJoshua M. Clulow 			return (DCMD_ERR);
35*a288e5a9SJoshua M. Clulow 		}
36*a288e5a9SJoshua M. Clulow 		return (DCMD_OK);
37*a288e5a9SJoshua M. Clulow 	}
38*a288e5a9SJoshua M. Clulow 
39*a288e5a9SJoshua M. Clulow 	if (mdb_getopts(argc, argv,
40*a288e5a9SJoshua M. Clulow 	    'v', MDB_OPT_SETBITS, B_TRUE, &verbose, NULL) != argc)
41*a288e5a9SJoshua M. Clulow 		return (DCMD_USAGE);
42*a288e5a9SJoshua M. Clulow 
43*a288e5a9SJoshua M. Clulow 	if (mdb_vread(&dpr, sizeof (dpr), addr) == -1) {
44*a288e5a9SJoshua M. Clulow 		mdb_warn("could not read ddi_periodic_impl_t at %p", addr);
45*a288e5a9SJoshua M. Clulow 		return (DCMD_ERR);
46*a288e5a9SJoshua M. Clulow 	}
47*a288e5a9SJoshua M. Clulow 
48*a288e5a9SJoshua M. Clulow 	if (DCMD_HDRSPEC(flags)) {
49*a288e5a9SJoshua M. Clulow 		mdb_printf("%16s %4s %3s %5s %5s %12s %s\n", "ADDR", "ID",
50*a288e5a9SJoshua M. Clulow 		    "LVL", "FLAGS", "MS", "FIRE_COUNT", "HANDLER");
51*a288e5a9SJoshua M. Clulow 		if (verbose) {
52*a288e5a9SJoshua M. Clulow 			mdb_printf("%16s %16s %16s %s\n", "", "THREAD",
53*a288e5a9SJoshua M. Clulow 			    "CYCLIC_ID", "ARGUMENT");
54*a288e5a9SJoshua M. Clulow 		}
55*a288e5a9SJoshua M. Clulow 	}
56*a288e5a9SJoshua M. Clulow 
57*a288e5a9SJoshua M. Clulow 	prflags[0] = dpr.dpr_flags & DPF_DISPATCHED ? 'D' : '-';
58*a288e5a9SJoshua M. Clulow 	prflags[1] = dpr.dpr_flags & DPF_EXECUTING ? 'X' : '-';
59*a288e5a9SJoshua M. Clulow 	prflags[2] = dpr.dpr_flags & DPF_CANCELLED ? 'C' : '-';
60*a288e5a9SJoshua M. Clulow 	prflags[3] = '\0';
61*a288e5a9SJoshua M. Clulow 
62*a288e5a9SJoshua M. Clulow 	mdb_printf("%16p %4x %3d %5s %5d %12x %a\n", addr, dpr.dpr_id,
63*a288e5a9SJoshua M. Clulow 	    dpr.dpr_level, prflags, (int)(dpr.dpr_interval / 1000000),
64*a288e5a9SJoshua M. Clulow 	    dpr.dpr_fire_count, dpr.dpr_handler);
65*a288e5a9SJoshua M. Clulow 	if (verbose) {
66*a288e5a9SJoshua M. Clulow 		mdb_printf("%16s %16p %16p %a\n", "", dpr.dpr_thread,
67*a288e5a9SJoshua M. Clulow 		    dpr.dpr_cyclic_id, dpr.dpr_arg);
68*a288e5a9SJoshua M. Clulow 	}
69*a288e5a9SJoshua M. Clulow 
70*a288e5a9SJoshua M. Clulow 	return (DCMD_OK);
71*a288e5a9SJoshua M. Clulow }
72