Path: blob/master/tools/power/cpupower/utils/powercap-info.c
26292 views
// SPDX-License-Identifier: GPL-2.0-only1/*2* (C) 2016 SUSE Software Solutions GmbH3* Thomas Renninger <[email protected]>4*/56#include <unistd.h>7#include <stdio.h>8#include <errno.h>9#include <stdlib.h>10#include <stdint.h>11#include <string.h>1213#include <getopt.h>1415#include "powercap.h"16#include "helpers/helpers.h"1718int powercap_show_all;1920static struct option info_opts[] = {21{ "all", no_argument, NULL, 'a'},22{ },23};2425static int powercap_print_one_zone(struct powercap_zone *zone)26{27int mode, i, ret = 0;28char pr_prefix[1024] = "";2930for (i = 0; i < zone->tree_depth && i < POWERCAP_MAX_TREE_DEPTH; i++)31strcat(pr_prefix, "\t");3233printf("%sZone: %s", pr_prefix, zone->name);34ret = powercap_zone_get_enabled(zone, &mode);35if (ret < 0)36return ret;37printf(" (%s)\n", mode ? "enabled" : "disabled");3839if (zone->has_power_uw)40printf(_("%sPower can be monitored in micro Jules\n"),41pr_prefix);4243if (zone->has_energy_uj)44printf(_("%sPower can be monitored in micro Watts\n"),45pr_prefix);4647printf("\n");4849if (ret != 0)50return ret;51return ret;52}5354static int powercap_show(void)55{56struct powercap_zone *root_zone;57char line[MAX_LINE_LEN] = "";58int ret, val;5960ret = powercap_get_driver(line, MAX_LINE_LEN);61if (ret < 0) {62printf(_("No powercapping driver loaded\n"));63return ret;64}6566printf("Driver: %s\n", line);67ret = powercap_get_enabled(&val);68if (ret < 0)69return ret;70if (!val) {71printf(_("Powercapping is disabled\n"));72return -1;73}7475printf(_("Powercap domain hierarchy:\n\n"));76root_zone = powercap_init_zones();7778if (root_zone == NULL) {79printf(_("No powercap info found\n"));80return 1;81}8283powercap_walk_zones(root_zone, powercap_print_one_zone);8485return 0;86}8788int cmd_cap_set(int argc, char **argv)89{90return 0;91};92int cmd_cap_info(int argc, char **argv)93{94int ret = 0, cont = 1;9596do {97ret = getopt_long(argc, argv, "a", info_opts, NULL);98switch (ret) {99case '?':100cont = 0;101break;102case -1:103cont = 0;104break;105case 'a':106powercap_show_all = 1;107break;108default:109fprintf(stderr, _("invalid or unknown argument\n"));110return EXIT_FAILURE;111}112} while (cont);113114powercap_show();115return 0;116}117118119