xref: /onnv-gate/usr/src/cmd/powertop/i386/pt_i386.c (revision 9908:4b4177fc63d9)
19338Srafael.vanoni@sun.com /*
29338Srafael.vanoni@sun.com  * Copyright 2009, Intel Corporation
39338Srafael.vanoni@sun.com  * Copyright 2009, Sun Microsystems, Inc
49338Srafael.vanoni@sun.com  *
59338Srafael.vanoni@sun.com  * This file is part of PowerTOP
69338Srafael.vanoni@sun.com  *
79338Srafael.vanoni@sun.com  * This program file is free software; you can redistribute it and/or modify it
89338Srafael.vanoni@sun.com  * under the terms of the GNU General Public License as published by the
99338Srafael.vanoni@sun.com  * Free Software Foundation; version 2 of the License.
109338Srafael.vanoni@sun.com  *
119338Srafael.vanoni@sun.com  * This program is distributed in the hope that it will be useful, but WITHOUT
129338Srafael.vanoni@sun.com  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
139338Srafael.vanoni@sun.com  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
149338Srafael.vanoni@sun.com  * for more details.
159338Srafael.vanoni@sun.com  *
169338Srafael.vanoni@sun.com  * You should have received a copy of the GNU General Public License
179338Srafael.vanoni@sun.com  * along with this program in a file named COPYING; if not, write to the
189338Srafael.vanoni@sun.com  * Free Software Foundation, Inc.,
199338Srafael.vanoni@sun.com  * 51 Franklin Street, Fifth Floor,
209338Srafael.vanoni@sun.com  * Boston, MA 02110-1301 USA
219338Srafael.vanoni@sun.com  *
229338Srafael.vanoni@sun.com  * Authors:
239338Srafael.vanoni@sun.com  *	Arjan van de Ven <arjan@linux.intel.com>
249338Srafael.vanoni@sun.com  *	Eric C Saxe <eric.saxe@sun.com>
259338Srafael.vanoni@sun.com  *	Aubrey Li <aubrey.li@intel.com>
269338Srafael.vanoni@sun.com  */
279338Srafael.vanoni@sun.com 
289338Srafael.vanoni@sun.com /*
299338Srafael.vanoni@sun.com  * GPL Disclaimer
309338Srafael.vanoni@sun.com  *
319338Srafael.vanoni@sun.com  * For the avoidance of doubt, except that if any license choice other
329338Srafael.vanoni@sun.com  * than GPL or LGPL is available it will apply instead, Sun elects to
339338Srafael.vanoni@sun.com  * use only the General Public License version 2 (GPLv2) at this time
349338Srafael.vanoni@sun.com  * for any software where a choice of GPL license versions is made
359338Srafael.vanoni@sun.com  * available with the language indicating that GPLv2 or any later
369338Srafael.vanoni@sun.com  * version may be used, or where a choice of which version of the GPL
379338Srafael.vanoni@sun.com  * is applied is otherwise unspecified.
389338Srafael.vanoni@sun.com  */
399338Srafael.vanoni@sun.com 
409338Srafael.vanoni@sun.com /*
419338Srafael.vanoni@sun.com  * DTrace scripts for observing interrupts, callouts and cyclic events
429338Srafael.vanoni@sun.com  * that cause CPU activity. Such activity prevents the processor from
439338Srafael.vanoni@sun.com  * entering lower power states and reducing power consumption.
449338Srafael.vanoni@sun.com  *
459338Srafael.vanoni@sun.com  * g_dtp_events is the default script
469338Srafael.vanoni@sun.com  */
479338Srafael.vanoni@sun.com const char *g_dtp_events =
489338Srafael.vanoni@sun.com "interrupt-complete"
499338Srafael.vanoni@sun.com "/arg0 != NULL && arg3 !=0/"
509338Srafael.vanoni@sun.com "{"
519338Srafael.vanoni@sun.com "	this->devi = (struct dev_info *)arg0;"
529338Srafael.vanoni@sun.com "	@interrupts[stringof(`devnamesp[this->devi->devi_major].dn_name),"
539338Srafael.vanoni@sun.com "	     this->devi->devi_instance] = count();"
549338Srafael.vanoni@sun.com "}"
559338Srafael.vanoni@sun.com ""
569338Srafael.vanoni@sun.com "sdt:::callout-start"
579338Srafael.vanoni@sun.com "/(caddr_t)((callout_t *)arg0)->c_func == (caddr_t)&`setrun/"
589338Srafael.vanoni@sun.com "{"
599338Srafael.vanoni@sun.com "       this->thr = (kthread_t *)(((callout_t *)arg0)->c_arg);"
609338Srafael.vanoni@sun.com "       @events_u[stringof(this->thr->t_procp->p_user.u_comm)] = count();"
619338Srafael.vanoni@sun.com "}"
629338Srafael.vanoni@sun.com ""
639338Srafael.vanoni@sun.com "sdt:::callout-start"
649338Srafael.vanoni@sun.com "/(caddr_t)((callout_t *)arg0)->c_func != (caddr_t)&`setrun/"
659338Srafael.vanoni@sun.com "{"
669338Srafael.vanoni@sun.com "       @events_k[(caddr_t)((callout_t *)arg0)->c_func] = count();"
679338Srafael.vanoni@sun.com "}"
689338Srafael.vanoni@sun.com ""
699338Srafael.vanoni@sun.com "sdt:::cyclic-start"
709338Srafael.vanoni@sun.com "/(caddr_t)((cyclic_t *)arg0)->cy_handler == (caddr_t)&`clock/"
719338Srafael.vanoni@sun.com "{"
729338Srafael.vanoni@sun.com "	@events_k[(caddr_t)((cyclic_t *)arg0)->cy_handler] = count();"
739338Srafael.vanoni@sun.com "}"
749338Srafael.vanoni@sun.com ""
759338Srafael.vanoni@sun.com "fbt::xc_common:entry"
769338Srafael.vanoni@sun.com "{"
779338Srafael.vanoni@sun.com "	self->xc_func = arg0;"
789338Srafael.vanoni@sun.com "}"
799338Srafael.vanoni@sun.com ""
809338Srafael.vanoni@sun.com "sysinfo:::xcalls"
819338Srafael.vanoni@sun.com "/pid != $pid/"
829338Srafael.vanoni@sun.com "{"
839338Srafael.vanoni@sun.com "       @events_x[execname, self->xc_func] = sum(arg0);"
849338Srafael.vanoni@sun.com "}"
859338Srafael.vanoni@sun.com ""
869338Srafael.vanoni@sun.com "fbt::xc_common:return"
879338Srafael.vanoni@sun.com "/self->xc_func/"
889338Srafael.vanoni@sun.com "{"
899338Srafael.vanoni@sun.com "	self->xc_func = 0;"
909338Srafael.vanoni@sun.com "}";
919338Srafael.vanoni@sun.com 
929338Srafael.vanoni@sun.com /*
939338Srafael.vanoni@sun.com  * g_dtp_events_v is enabled through the -v option, it includes cyclic events
949338Srafael.vanoni@sun.com  * in the report, allowing a complete view of system activity
959338Srafael.vanoni@sun.com  */
969338Srafael.vanoni@sun.com const char *g_dtp_events_v =
979338Srafael.vanoni@sun.com "interrupt-complete"
989338Srafael.vanoni@sun.com "/arg0 != NULL && arg3 !=0/"
999338Srafael.vanoni@sun.com "{"
1009338Srafael.vanoni@sun.com "	this->devi = (struct dev_info *)arg0;"
1019338Srafael.vanoni@sun.com "	@interrupts[stringof(`devnamesp[this->devi->devi_major].dn_name),"
1029338Srafael.vanoni@sun.com "	     this->devi->devi_instance] = count();"
1039338Srafael.vanoni@sun.com "}"
1049338Srafael.vanoni@sun.com ""
1059338Srafael.vanoni@sun.com "sdt:::callout-start"
1069338Srafael.vanoni@sun.com "/(caddr_t)((callout_t *)arg0)->c_func == (caddr_t)&`setrun/"
1079338Srafael.vanoni@sun.com "{"
1089338Srafael.vanoni@sun.com "       this->thr = (kthread_t *)(((callout_t *)arg0)->c_arg);"
1099338Srafael.vanoni@sun.com "       @events_u[stringof(this->thr->t_procp->p_user.u_comm)] = count();"
1109338Srafael.vanoni@sun.com "}"
1119338Srafael.vanoni@sun.com ""
1129338Srafael.vanoni@sun.com "sdt:::callout-start"
1139338Srafael.vanoni@sun.com "/(caddr_t)((callout_t *)arg0)->c_func != (caddr_t)&`setrun/"
1149338Srafael.vanoni@sun.com "{"
1159338Srafael.vanoni@sun.com "       @events_k[(caddr_t)((callout_t *)arg0)->c_func] = count();"
1169338Srafael.vanoni@sun.com "}"
1179338Srafael.vanoni@sun.com ""
1189338Srafael.vanoni@sun.com "sdt:::cyclic-start"
1199338Srafael.vanoni@sun.com "/(caddr_t)((cyclic_t *)arg0)->cy_handler != (caddr_t)&`dtrace_state_deadman &&"
1209338Srafael.vanoni@sun.com " (caddr_t)((cyclic_t *)arg0)->cy_handler != (caddr_t)&`dtrace_state_clean/"
1219338Srafael.vanoni@sun.com "{"
1229338Srafael.vanoni@sun.com "	@events_k[(caddr_t)((cyclic_t *)arg0)->cy_handler] = count();"
1239338Srafael.vanoni@sun.com "}"
1249338Srafael.vanoni@sun.com ""
1259338Srafael.vanoni@sun.com "fbt::xc_common:entry"
1269338Srafael.vanoni@sun.com "{"
1279338Srafael.vanoni@sun.com "	self->xc_func = arg0;"
1289338Srafael.vanoni@sun.com "}"
1299338Srafael.vanoni@sun.com ""
1309338Srafael.vanoni@sun.com "sysinfo:::xcalls"
1319338Srafael.vanoni@sun.com "/pid != $pid/"
1329338Srafael.vanoni@sun.com "{"
1339338Srafael.vanoni@sun.com "       @events_x[execname, self->xc_func] = sum(arg0);"
1349338Srafael.vanoni@sun.com "}"
1359338Srafael.vanoni@sun.com ""
1369338Srafael.vanoni@sun.com "fbt::xc_common:return"
1379338Srafael.vanoni@sun.com "/self->xc_func/"
1389338Srafael.vanoni@sun.com "{"
1399338Srafael.vanoni@sun.com "	self->xc_func = 0;"
1409338Srafael.vanoni@sun.com "}";
1419338Srafael.vanoni@sun.com 
1429338Srafael.vanoni@sun.com /*
1439338Srafael.vanoni@sun.com  * This script is selected through the -c option, it takes the CPU id as
1449338Srafael.vanoni@sun.com  * argument and observes activity generated by that CPU
1459338Srafael.vanoni@sun.com  */
1469338Srafael.vanoni@sun.com const char *g_dtp_events_c =
1479338Srafael.vanoni@sun.com "interrupt-complete"
1489338Srafael.vanoni@sun.com "/cpu == $0 &&"
1499338Srafael.vanoni@sun.com " arg0 != NULL && arg3 != 0/"
1509338Srafael.vanoni@sun.com "{"
1519338Srafael.vanoni@sun.com "	this->devi = (struct dev_info *)arg0;"
1529338Srafael.vanoni@sun.com "	@interrupts[stringof(`devnamesp[this->devi->devi_major].dn_name),"
1539338Srafael.vanoni@sun.com "	     this->devi->devi_instance] = count();"
1549338Srafael.vanoni@sun.com "}"
1559338Srafael.vanoni@sun.com ""
1569338Srafael.vanoni@sun.com "sdt:::callout-start"
1579338Srafael.vanoni@sun.com "/cpu == $0 &&"
1589338Srafael.vanoni@sun.com " (caddr_t)((callout_t *)arg0)->c_func == (caddr_t)&`setrun/"
1599338Srafael.vanoni@sun.com "{"
1609338Srafael.vanoni@sun.com "       this->thr = (kthread_t *)(((callout_t *)arg0)->c_arg);"
1619338Srafael.vanoni@sun.com "       @events_u[stringof(this->thr->t_procp->p_user.u_comm)] = count();"
1629338Srafael.vanoni@sun.com "}"
1639338Srafael.vanoni@sun.com ""
1649338Srafael.vanoni@sun.com "sdt:::callout-start"
1659338Srafael.vanoni@sun.com "/cpu == $0 &&"
1669338Srafael.vanoni@sun.com " (caddr_t)((callout_t *)arg0)->c_func != (caddr_t)&`setrun/"
1679338Srafael.vanoni@sun.com "{"
1689338Srafael.vanoni@sun.com "       @events_k[(caddr_t)((callout_t *)arg0)->c_func] = count();"
1699338Srafael.vanoni@sun.com "}"
1709338Srafael.vanoni@sun.com ""
1719338Srafael.vanoni@sun.com "sdt:::cyclic-start"
1729338Srafael.vanoni@sun.com "/cpu == $0 &&"
1739338Srafael.vanoni@sun.com " (caddr_t)((cyclic_t *)arg0)->cy_handler == (caddr_t)&`clock/"
1749338Srafael.vanoni@sun.com "{"
1759338Srafael.vanoni@sun.com "	@events_k[(caddr_t)((cyclic_t *)arg0)->cy_handler] = count();"
1769338Srafael.vanoni@sun.com "}"
1779338Srafael.vanoni@sun.com ""
1789338Srafael.vanoni@sun.com "fbt::xc_common:entry"
1799338Srafael.vanoni@sun.com "/cpu == $0/"
1809338Srafael.vanoni@sun.com "{"
1819338Srafael.vanoni@sun.com "	self->xc_func = arg0;"
1829338Srafael.vanoni@sun.com "}"
1839338Srafael.vanoni@sun.com ""
1849338Srafael.vanoni@sun.com "sysinfo:::xcalls"
1859338Srafael.vanoni@sun.com "/pid != $pid &&"
1869338Srafael.vanoni@sun.com " cpu == $0/"
1879338Srafael.vanoni@sun.com "{"
1889338Srafael.vanoni@sun.com "       @events_x[execname, self->xc_func] = count();"
1899338Srafael.vanoni@sun.com "}"
1909338Srafael.vanoni@sun.com ""
1919338Srafael.vanoni@sun.com "fbt::xc_common:return"
1929338Srafael.vanoni@sun.com "/cpu == $0 &&"
1939338Srafael.vanoni@sun.com " self->xc_func/"
1949338Srafael.vanoni@sun.com "{"
1959338Srafael.vanoni@sun.com "	self->xc_func = 0;"
1969338Srafael.vanoni@sun.com "}"
1979338Srafael.vanoni@sun.com ""
1989338Srafael.vanoni@sun.com "fbt::xc_common:entry"
1999338Srafael.vanoni@sun.com "/cpu != $0/"
2009338Srafael.vanoni@sun.com "{"
2019338Srafael.vanoni@sun.com "	self->xc_func = arg0;"
2029338Srafael.vanoni@sun.com "	self->xc_cpu = cpu;"
2039338Srafael.vanoni@sun.com "}"
2049338Srafael.vanoni@sun.com ""
2059338Srafael.vanoni@sun.com "fbt::send_dirint:entry"
2069338Srafael.vanoni@sun.com "/pid != $pid &&"
2079338Srafael.vanoni@sun.com " self->xc_func &&"
2089338Srafael.vanoni@sun.com " arg0 == $0/"
2099338Srafael.vanoni@sun.com "{"
2109338Srafael.vanoni@sun.com "       @events_xc[execname, self->xc_func, self->xc_cpu] = count();"
2119338Srafael.vanoni@sun.com "	self->xc_func = 0;"
2129338Srafael.vanoni@sun.com "	self->xc_cpu = 0;"
2139338Srafael.vanoni@sun.com "}";
2149338Srafael.vanoni@sun.com 
2159338Srafael.vanoni@sun.com /*
2169338Srafael.vanoni@sun.com  * i386 platform specific display messages
2179338Srafael.vanoni@sun.com  */
2189711Srafael.vanoni@sun.com const char *g_msg_idle_state = "C-states (idle power)";
2199338Srafael.vanoni@sun.com const char *g_msg_freq_state = "P-states (frequencies)";
220*9908Srafael.vanoni@sun.com const char *g_msg_freq_enable = "P - Enable P-states";
221