diff options
Diffstat (limited to 'hardinfo/cpu_util.c')
-rw-r--r-- | hardinfo/cpu_util.c | 231 |
1 files changed, 0 insertions, 231 deletions
diff --git a/hardinfo/cpu_util.c b/hardinfo/cpu_util.c deleted file mode 100644 index a598d2ed..00000000 --- a/hardinfo/cpu_util.c +++ /dev/null @@ -1,231 +0,0 @@ -/* - * HardInfo - Displays System Information - * Copyright (C) 2003-2006 Leandro A. F. Pereira <leandro@hardinfo.org> - * This file by Burt P. <pburt0@gmail.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, version 2. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include <string.h> -#include "hardinfo.h" -#include "cpu_util.h" - -#include "cpubits.c" - -#define CPU_TOPO_NULL -9877 - -const gchar *byte_order_str() { -#if G_BYTE_ORDER == G_LITTLE_ENDIAN - return _("Little Endian"); -#else - return _("Big Endian"); -#endif -} - -int processor_has_flag(gchar * strflags, gchar * strflag) -{ - gchar **flags; - gint ret = 0; - if (strflags == NULL || strflag == NULL) - return 0; - flags = g_strsplit(strflags, " ", 0); - ret = g_strv_contains((const gchar * const *)flags, strflag); - g_strfreev(flags); - return ret; -} - -gchar* get_cpu_str(const gchar* file, gint cpuid) { - gchar *tmp0 = NULL; - gchar *tmp1 = NULL; - tmp0 = g_strdup_printf("/sys/devices/system/cpu/cpu%d/%s", cpuid, file); - g_file_get_contents(tmp0, &tmp1, NULL, NULL); - g_free(tmp0); - return tmp1; -} - -gint get_cpu_int(const char* item, int cpuid, int null_val) { - gchar *fc = NULL; - int ret = null_val; - fc = get_cpu_str(item, cpuid); - if (fc) { - ret = atol(fc); - g_free(fc); - } - return ret; -} - -/* cpubits is 32768 bits long - * core_ids are not unique among physical_ids - * hack up cpubits into 128 packs of 256 cores - * to make cores unique in cpubits */ -#define MAX_CORES_PER_PACK 256 -#define MAX_PACKS 128 - -int cpu_procs_cores_threads(int *p, int *c, int *t) { - cpubits *threads, *cores, *packs; - char *tmp; - int i, m, pack_id, core_id; - g_file_get_contents("/sys/devices/system/cpu/present", &tmp, NULL, NULL); - if (tmp != NULL) { - threads = cpubits_from_str(tmp); - cores = cpubits_from_str(""); - packs = cpubits_from_str(""); - m = cpubits_max(threads); - for (i = 0; i <= m; i++) { - pack_id = get_cpu_int("topology/physical_package_id", i, CPU_TOPO_NULL); - core_id = get_cpu_int("topology/core_id", i, CPU_TOPO_NULL); - if (pack_id < 0) pack_id = 0; - CPUBIT_SET(packs, pack_id); - if (core_id >= 0) { CPUBIT_SET(cores, (pack_id * MAX_CORES_PER_PACK) + core_id ); } - } - *t = cpubits_count(threads); - *c = cpubits_count(cores); - *p = cpubits_count(packs); - if (!*c) *c = 1; - if (!*p) *p = 1; - free(threads); - free(cores); - free(packs); - free(tmp); - return 1; - } else { - *p = *c = *t = -1; - return 0; - } -} - -cpufreq_data *cpufreq_new(gint id) -{ - cpufreq_data *cpufd; - cpufd = malloc(sizeof(cpufreq_data)); - if (cpufd) { - memset(cpufd, 0, sizeof(cpufreq_data)); - cpufd->id = id; - cpufreq_update(cpufd, 0); - } - return cpufd; -} - -void cpufreq_update(cpufreq_data *cpufd, int cur_only) -{ - if (cpufd) { - cpufd->cpukhz_cur = get_cpu_int("cpufreq/scaling_cur_freq", cpufd->id, 0); - if (cur_only) return; - cpufd->scaling_driver = get_cpu_str("cpufreq/scaling_driver", cpufd->id); - cpufd->scaling_governor = get_cpu_str("cpufreq/scaling_governor", cpufd->id); - cpufd->transition_latency = get_cpu_int("cpufreq/cpuinfo_transition_latency", cpufd->id, 0); - cpufd->cpukhz_min = get_cpu_int("cpufreq/scaling_min_freq", cpufd->id, 0); - cpufd->cpukhz_max = get_cpu_int("cpufreq/scaling_max_freq", cpufd->id, 0); - if (cpufd->scaling_driver == NULL) cpufd->scaling_driver = g_strdup("(Unknown)"); - if (cpufd->scaling_governor == NULL) cpufd->scaling_governor = g_strdup("(Unknown)"); - - /* x86 uses freqdomain_cpus, all others use affected_cpus */ - cpufd->shared_list = get_cpu_str("cpufreq/freqdomain_cpus", cpufd->id); - if (cpufd->shared_list == NULL) cpufd->shared_list = get_cpu_str("cpufreq/affected_cpus", cpufd->id); - if (cpufd->shared_list == NULL) cpufd->shared_list = g_strdup_printf("%d", cpufd->id); - } -} - -void cpufreq_free(cpufreq_data *cpufd) -{ - if (cpufd) { - g_free(cpufd->scaling_driver); - g_free(cpufd->scaling_governor); - } - g_free(cpufd); -} - -cpu_topology_data *cputopo_new(gint id) -{ - cpu_topology_data *cputd; - cputd = malloc(sizeof(cpu_topology_data)); - if (cputd) { - memset(cputd, 0, sizeof(cpu_topology_data)); - cputd->id = id; - cputd->socket_id = get_cpu_int("topology/physical_package_id", id, CPU_TOPO_NULL); - cputd->core_id = get_cpu_int("topology/core_id", id, CPU_TOPO_NULL); - cputd->book_id = get_cpu_int("topology/book_id", id, CPU_TOPO_NULL); - cputd->drawer_id = get_cpu_int("topology/drawer_id", id, CPU_TOPO_NULL); - } - return cputd; - -} - -void cputopo_free(cpu_topology_data *cputd) -{ - g_free(cputd); -} - -gchar *cpufreq_section_str(cpufreq_data *cpufd) -{ - if (cpufd == NULL) - return g_strdup(""); - - if (cpufd->cpukhz_min || cpufd->cpukhz_max || cpufd->cpukhz_cur) { - return g_strdup_printf( - "[%s]\n" - "%s=%d %s\n" - "%s=%d %s\n" - "%s=%d %s\n" - "%s=%d %s\n" - "%s=%s\n" - "%s=%s\n", - _("Frequency Scaling"), - _("Minimum"), cpufd->cpukhz_min, _("kHz"), - _("Maximum"), cpufd->cpukhz_max, _("kHz"), - _("Current"), cpufd->cpukhz_cur, _("kHz"), - _("Transition Latency"), cpufd->transition_latency, _("ns"), - _("Governor"), cpufd->scaling_governor, - _("Driver"), cpufd->scaling_driver); - } else { - return g_strdup_printf( - "[%s]\n" - "%s=%s\n", - _("Frequency Scaling"), - _("Driver"), cpufd->scaling_driver); - } -} - -gchar *cputopo_section_str(cpu_topology_data *cputd) -{ - static const char na[] = N_("(Not Available)"); - char sock_str[64] = "", core_str[64] = ""; - char book_str[64] = "", drawer_str[64] = ""; - - if (cputd == NULL) - return g_strdup(""); - - if (cputd->socket_id != CPU_TOPO_NULL && cputd->socket_id != -1) - sprintf(sock_str, "%s=%d\n", _("Socket"), cputd->socket_id); - else - sprintf(sock_str, "%s=%s\n", _("Socket"), na); - - if (cputd->core_id != CPU_TOPO_NULL) - sprintf(core_str, "%s=%d\n", _("Core"), cputd->core_id); - else - sprintf(core_str, "%s=%s\n", _("Core"), na); - - if (cputd->book_id != CPU_TOPO_NULL) - sprintf(core_str, "%s=%d\n", _("Book"), cputd->book_id); - if (cputd->book_id != CPU_TOPO_NULL) - sprintf(core_str, "%s=%d\n", _("Drawer"), cputd->drawer_id); - - return g_strdup_printf( - "[%s]\n" - "%s=%d\n" - "%s%s%s%s", - _("Topology"), - _("ID"), cputd->id, - sock_str, core_str, book_str, drawer_str ); -} |