brintos

brintos / linux-shallow public Read only

0
0
Text · 6.6 KiB · 95749b8 Raw
222 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 *  (C) 2010,2011       Thomas Renninger <trenn@suse.de>, Novell Inc.4 *5 * Miscellaneous helpers which do not fit or are worth6 * to put into separate headers7 */8 9#ifndef __CPUPOWERUTILS_HELPERS__10#define __CPUPOWERUTILS_HELPERS__11 12#include <libintl.h>13#include <locale.h>14#include <stdbool.h>15 16#include "helpers/bitmask.h"17#include <cpupower.h>18 19/* Internationalization ****************************/20#ifdef NLS21 22#define _(String) gettext(String)23#ifndef gettext_noop24#define gettext_noop(String) String25#endif26#define N_(String) gettext_noop(String)27 28#else /* !NLS */29 30#define _(String) String31#define N_(String) String32 33#endif34/* Internationalization ****************************/35 36extern int run_as_root;37extern int base_cpu;38extern struct bitmask *cpus_chosen;39 40/* Global verbose (-d) stuff *********************************/41/*42 * define DEBUG via global Makefile variable43 * Debug output is sent to stderr, do:44 * cpupower monitor 2>/tmp/debug45 * to split debug output away from normal output46*/47#ifdef DEBUG48extern int be_verbose;49 50#define dprint(fmt, ...) {					\51		if (be_verbose) {				\52			fprintf(stderr, "%s: " fmt,		\53				__func__, ##__VA_ARGS__);	\54		}						\55	}56#else57static inline void dprint(const char *fmt, ...) { }58#endif59extern int be_verbose;60/* Global verbose (-v) stuff *********************************/61 62/* cpuid and cpuinfo helpers  **************************/63enum cpupower_cpu_vendor {X86_VENDOR_UNKNOWN = 0, X86_VENDOR_INTEL,64			  X86_VENDOR_AMD, X86_VENDOR_HYGON, X86_VENDOR_MAX};65 66#define CPUPOWER_CAP_INV_TSC		0x0000000167#define CPUPOWER_CAP_APERF		0x0000000268#define CPUPOWER_CAP_AMD_CPB		0x0000000469#define CPUPOWER_CAP_PERF_BIAS		0x0000000870#define CPUPOWER_CAP_HAS_TURBO_RATIO	0x0000001071#define CPUPOWER_CAP_IS_SNB		0x0000002072#define CPUPOWER_CAP_INTEL_IDA		0x0000004073#define CPUPOWER_CAP_AMD_RDPRU		0x0000008074#define CPUPOWER_CAP_AMD_HW_PSTATE	0x0000010075#define CPUPOWER_CAP_AMD_PSTATEDEF	0x0000020076#define CPUPOWER_CAP_AMD_CPB_MSR	0x0000040077#define CPUPOWER_CAP_AMD_PSTATE		0x0000080078 79#define CPUPOWER_AMD_CPBDIS		0x0200000080 81#define MAX_HW_PSTATES 1082 83struct cpupower_cpu_info {84	enum cpupower_cpu_vendor vendor;85	unsigned int family;86	unsigned int model;87	unsigned int stepping;88	/* CPU capabilities read out from cpuid */89	unsigned long long caps;90};91 92/* get_cpu_info93 *94 * Extract CPU vendor, family, model, stepping info from /proc/cpuinfo95 *96 * Returns 0 on success or a negative error code97 * Only used on x86, below global's struct values are zero/unknown on98 * other archs99 */100extern int get_cpu_info(struct cpupower_cpu_info *cpu_info);101extern struct cpupower_cpu_info cpupower_cpu_info;102 103 104/* cpuid and cpuinfo helpers  **************************/105 106/* X86 ONLY ****************************************/107#if defined(__i386__) || defined(__x86_64__)108 109#include <pci/pci.h>110 111/* Read/Write msr ****************************/112extern int read_msr(int cpu, unsigned int idx, unsigned long long *val);113extern int write_msr(int cpu, unsigned int idx, unsigned long long val);114 115extern int cpupower_intel_set_perf_bias(unsigned int cpu, unsigned int val);116extern int cpupower_intel_get_perf_bias(unsigned int cpu);117extern unsigned long long msr_intel_get_turbo_ratio(unsigned int cpu);118 119extern int cpupower_set_epp(unsigned int cpu, char *epp);120extern int cpupower_set_amd_pstate_mode(char *mode);121extern int cpupower_set_turbo_boost(int turbo_boost);122 123/* Read/Write msr ****************************/124 125/* PCI stuff ****************************/126extern int amd_pci_get_num_boost_states(int *active, int *states);127extern struct pci_dev *pci_acc_init(struct pci_access **pacc, int domain,128				    int bus, int slot, int func, int vendor,129				    int dev);130extern struct pci_dev *pci_slot_func_init(struct pci_access **pacc,131					      int slot, int func);132 133/* PCI stuff ****************************/134 135/* AMD HW pstate decoding **************************/136 137extern int decode_pstates(unsigned int cpu, int boost_states,138			  unsigned long *pstates, int *no);139 140/* AMD HW pstate decoding **************************/141 142extern int cpufreq_has_boost_support(unsigned int cpu, int *support,143				     int *active, int * states);144 145/* AMD P-State stuff **************************/146bool cpupower_amd_pstate_enabled(void);147void amd_pstate_boost_init(unsigned int cpu,148			   int *support, int *active);149void amd_pstate_show_perf_and_freq(unsigned int cpu,150				   int no_rounding);151 152/* AMD P-State stuff **************************/153 154/*155 * CPUID functions returning a single datum156 */157unsigned int cpuid_eax(unsigned int op);158unsigned int cpuid_ebx(unsigned int op);159unsigned int cpuid_ecx(unsigned int op);160unsigned int cpuid_edx(unsigned int op);161 162/* cpuid and cpuinfo helpers  **************************/163/* X86 ONLY ********************************************/164#else165static inline int decode_pstates(unsigned int cpu, int boost_states,166				 unsigned long *pstates, int *no)167{ return -1; };168 169static inline int read_msr(int cpu, unsigned int idx, unsigned long long *val)170{ return -1; };171static inline int write_msr(int cpu, unsigned int idx, unsigned long long val)172{ return -1; };173static inline int cpupower_intel_set_perf_bias(unsigned int cpu, unsigned int val)174{ return -1; };175static inline int cpupower_intel_get_perf_bias(unsigned int cpu)176{ return -1; };177static inline unsigned long long msr_intel_get_turbo_ratio(unsigned int cpu)178{ return 0; };179 180static inline int cpupower_set_epp(unsigned int cpu, char *epp)181{ return -1; };182static inline int cpupower_set_amd_pstate_mode(char *mode)183{ return -1; };184static inline int cpupower_set_turbo_boost(int turbo_boost)185{ return -1; };186 187/* Read/Write msr ****************************/188 189static inline int cpufreq_has_boost_support(unsigned int cpu, int *support,190					    int *active, int * states)191{ return -1; }192 193static inline bool cpupower_amd_pstate_enabled(void)194{ return false; }195static inline void amd_pstate_boost_init(unsigned int cpu, int *support,196					 int *active)197{}198static inline void amd_pstate_show_perf_and_freq(unsigned int cpu,199						 int no_rounding)200{}201 202/* cpuid and cpuinfo helpers  **************************/203 204static inline unsigned int cpuid_eax(unsigned int op) { return 0; };205static inline unsigned int cpuid_ebx(unsigned int op) { return 0; };206static inline unsigned int cpuid_ecx(unsigned int op) { return 0; };207static inline unsigned int cpuid_edx(unsigned int op) { return 0; };208#endif /* defined(__i386__) || defined(__x86_64__) */209 210/*211 * CPU State related functions212 */213extern struct bitmask *online_cpus;214extern struct bitmask *offline_cpus;215 216void get_cpustate(void);217void print_online_cpus(void);218void print_offline_cpus(void);219void print_speed(unsigned long speed, int no_rounding);220 221#endif /* __CPUPOWERUTILS_HELPERS__ */222