cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

helpers.h (6388B)


      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 worth
      6 * to put into separate headers
      7 */
      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 NLS
     21
     22#define _(String) gettext(String)
     23#ifndef gettext_noop
     24#define gettext_noop(String) String
     25#endif
     26#define N_(String) gettext_noop(String)
     27
     28#else /* !NLS */
     29
     30#define _(String) String
     31#define N_(String) String
     32
     33#endif
     34/* 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 variable
     43 * Debug output is sent to stderr, do:
     44 * cpupower monitor 2>/tmp/debug
     45 * to split debug output away from normal output
     46*/
     47#ifdef DEBUG
     48extern int be_verbose;
     49
     50#define dprint(fmt, ...) {					\
     51		if (be_verbose) {				\
     52			fprintf(stderr, "%s: " fmt,		\
     53				__func__, ##__VA_ARGS__);	\
     54		}						\
     55	}
     56#else
     57static inline void dprint(const char *fmt, ...) { }
     58#endif
     59extern 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		0x00000001
     67#define CPUPOWER_CAP_APERF		0x00000002
     68#define CPUPOWER_CAP_AMD_CPB		0x00000004
     69#define CPUPOWER_CAP_PERF_BIAS		0x00000008
     70#define CPUPOWER_CAP_HAS_TURBO_RATIO	0x00000010
     71#define CPUPOWER_CAP_IS_SNB		0x00000020
     72#define CPUPOWER_CAP_INTEL_IDA		0x00000040
     73#define CPUPOWER_CAP_AMD_RDPRU		0x00000080
     74#define CPUPOWER_CAP_AMD_HW_PSTATE	0x00000100
     75#define CPUPOWER_CAP_AMD_PSTATEDEF	0x00000200
     76#define CPUPOWER_CAP_AMD_CPB_MSR	0x00000400
     77#define CPUPOWER_CAP_AMD_PSTATE		0x00000800
     78
     79#define CPUPOWER_AMD_CPBDIS		0x02000000
     80
     81#define MAX_HW_PSTATES 10
     82
     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_info
     93 *
     94 * Extract CPU vendor, family, model, stepping info from /proc/cpuinfo
     95 *
     96 * Returns 0 on success or a negative error code
     97 * Only used on x86, below global's struct values are zero/unknown on
     98 * other archs
     99 */
    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
    119/* Read/Write msr ****************************/
    120
    121/* PCI stuff ****************************/
    122extern int amd_pci_get_num_boost_states(int *active, int *states);
    123extern struct pci_dev *pci_acc_init(struct pci_access **pacc, int domain,
    124				    int bus, int slot, int func, int vendor,
    125				    int dev);
    126extern struct pci_dev *pci_slot_func_init(struct pci_access **pacc,
    127					      int slot, int func);
    128
    129/* PCI stuff ****************************/
    130
    131/* AMD HW pstate decoding **************************/
    132
    133extern int decode_pstates(unsigned int cpu, int boost_states,
    134			  unsigned long *pstates, int *no);
    135
    136/* AMD HW pstate decoding **************************/
    137
    138extern int cpufreq_has_boost_support(unsigned int cpu, int *support,
    139				     int *active, int * states);
    140
    141/* AMD P-State stuff **************************/
    142bool cpupower_amd_pstate_enabled(void);
    143void amd_pstate_boost_init(unsigned int cpu,
    144			   int *support, int *active);
    145void amd_pstate_show_perf_and_freq(unsigned int cpu,
    146				   int no_rounding);
    147
    148/* AMD P-State stuff **************************/
    149
    150/*
    151 * CPUID functions returning a single datum
    152 */
    153unsigned int cpuid_eax(unsigned int op);
    154unsigned int cpuid_ebx(unsigned int op);
    155unsigned int cpuid_ecx(unsigned int op);
    156unsigned int cpuid_edx(unsigned int op);
    157
    158/* cpuid and cpuinfo helpers  **************************/
    159/* X86 ONLY ********************************************/
    160#else
    161static inline int decode_pstates(unsigned int cpu, int boost_states,
    162				 unsigned long *pstates, int *no)
    163{ return -1; };
    164
    165static inline int read_msr(int cpu, unsigned int idx, unsigned long long *val)
    166{ return -1; };
    167static inline int write_msr(int cpu, unsigned int idx, unsigned long long val)
    168{ return -1; };
    169static inline int cpupower_intel_set_perf_bias(unsigned int cpu, unsigned int val)
    170{ return -1; };
    171static inline int cpupower_intel_get_perf_bias(unsigned int cpu)
    172{ return -1; };
    173static inline unsigned long long msr_intel_get_turbo_ratio(unsigned int cpu)
    174{ return 0; };
    175
    176/* Read/Write msr ****************************/
    177
    178static inline int cpufreq_has_boost_support(unsigned int cpu, int *support,
    179					    int *active, int * states)
    180{ return -1; }
    181
    182static inline bool cpupower_amd_pstate_enabled(void)
    183{ return false; }
    184static inline void amd_pstate_boost_init(unsigned int cpu, int *support,
    185					 int *active)
    186{}
    187static inline void amd_pstate_show_perf_and_freq(unsigned int cpu,
    188						 int no_rounding)
    189{}
    190
    191/* cpuid and cpuinfo helpers  **************************/
    192
    193static inline unsigned int cpuid_eax(unsigned int op) { return 0; };
    194static inline unsigned int cpuid_ebx(unsigned int op) { return 0; };
    195static inline unsigned int cpuid_ecx(unsigned int op) { return 0; };
    196static inline unsigned int cpuid_edx(unsigned int op) { return 0; };
    197#endif /* defined(__i386__) || defined(__x86_64__) */
    198
    199/*
    200 * CPU State related functions
    201 */
    202extern struct bitmask *online_cpus;
    203extern struct bitmask *offline_cpus;
    204
    205void get_cpustate(void);
    206void print_online_cpus(void);
    207void print_offline_cpus(void);
    208void print_speed(unsigned long speed, int no_rounding);
    209
    210#endif /* __CPUPOWERUTILS_HELPERS__ */