mirror of
https://github.com/cyring/CoreFreq.git
synced 2025-07-23 04:12:59 +02:00
391 lines
6.3 KiB
C
391 lines
6.3 KiB
C
/*
|
|
* CoreFreq
|
|
* Copyright (C) 2015-2025 CYRIL COURTIAT
|
|
* Licenses: GPL2
|
|
*/
|
|
|
|
#define DRV_DEVNAME "corefreqk"
|
|
#define DRV_FILENAME "/dev/"DRV_DEVNAME
|
|
|
|
#define ID_RO_VMA_PROC (CORE_COUNT + 0)
|
|
#define ID_RW_VMA_PROC (CORE_COUNT + ID_RO_VMA_PROC)
|
|
#define ID_RO_VMA_GATE (CORE_COUNT + ID_RW_VMA_PROC)
|
|
#define ID_RO_VMA_CORE (CORE_COUNT + ID_RO_VMA_GATE)
|
|
#define ID_RW_VMA_CORE (CORE_COUNT + ID_RO_VMA_CORE)
|
|
#define ID_ANY_VMA_JAIL (CORE_COUNT + ID_RW_VMA_CORE)
|
|
|
|
#define WAKEUP_RATIO 4
|
|
#define LOOP_MIN_MS 100
|
|
#define LOOP_MAX_MS ((1000 - 1) * WAKEUP_RATIO)
|
|
#define LOOP_DEF_MS 1000
|
|
#define TICK_DEF_MS 2000
|
|
|
|
typedef struct
|
|
{
|
|
unsigned long PN;
|
|
signed int BSP,
|
|
CoreID,
|
|
ThreadID,
|
|
PackageID;
|
|
struct CLUSTER_ST Cluster;
|
|
struct CACHE_INFO
|
|
{
|
|
union CCSIDR
|
|
{
|
|
unsigned long long value;
|
|
struct
|
|
{
|
|
unsigned long long
|
|
LineSz : 3-0,
|
|
Assoc : 13-3,
|
|
Set : 28-13,
|
|
WrAlloc : 29-28,
|
|
RdAlloc : 30-29,
|
|
WrBack : 31-30,
|
|
WrThrough : 32-31,
|
|
RES0 : 64-32;
|
|
};
|
|
} ccsid;
|
|
unsigned int Size;
|
|
} Cache[CACHE_MAX_LEVEL];
|
|
} CACHE_TOPOLOGY;
|
|
|
|
typedef struct
|
|
{
|
|
THERMAL_PARAM Param;
|
|
unsigned int Sensor;
|
|
signed int VID;
|
|
struct {
|
|
enum THERM_PWR_EVENTS Events[eDIM];
|
|
};
|
|
HWP_CAPABILITIES HWP_Capabilities;
|
|
HWP_INTERRUPT HWP_Interrupt;
|
|
HWP_REQUEST HWP_Request;
|
|
struct ACPI_CPPC_STRUCT {
|
|
unsigned short Highest,
|
|
Guaranteed,
|
|
Efficient,
|
|
Lowest,
|
|
Minimum,
|
|
Maximum,
|
|
Desired,
|
|
Energy;
|
|
} ACPI_CPPC;
|
|
} POWER_THERMAL;
|
|
|
|
/* ACPI/OSPM
|
|
|
|
Highest Performance ... .------,
|
|
|######|
|
|
|######|
|
|
Nominal Performance ... |------| ..
|
|
|//////| \
|
|
|//////| :
|
|
|//////| :
|
|
|//////| :
|
|
|//////| --- Guaranteed Performance
|
|
Lowest Nonlinear Performance .. -------- : Allowed Range
|
|
|OOOOOO| :
|
|
|OOOOOO| :
|
|
|OOOOOO| :
|
|
Lowest Performance .... -------- ../
|
|
|++++++|
|
|
|++++++|
|
|
|++++++|
|
|
0 ..... `------'
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
Bit64 OffLine __attribute__ ((aligned (8)));
|
|
|
|
struct
|
|
{
|
|
unsigned long long TSC;
|
|
} Overhead __attribute__ ((aligned (8)));
|
|
|
|
struct
|
|
{
|
|
unsigned long long INST;
|
|
struct
|
|
{
|
|
unsigned long long
|
|
UCC,
|
|
URC;
|
|
} C0;
|
|
unsigned long long
|
|
C3,
|
|
C6,
|
|
C7,
|
|
TSC;
|
|
|
|
unsigned long long C1;
|
|
|
|
struct
|
|
{
|
|
unsigned long long ACCU;
|
|
} Power;
|
|
} Counter[2] __attribute__ ((aligned (8)));
|
|
|
|
struct
|
|
{
|
|
unsigned long long
|
|
C1,
|
|
C2,
|
|
C3,
|
|
C4,
|
|
C5,
|
|
C6,
|
|
C7;
|
|
} VPMC __attribute__ ((aligned (8)));
|
|
|
|
struct
|
|
{
|
|
unsigned long long
|
|
INST;
|
|
struct
|
|
{
|
|
unsigned long long
|
|
UCC,
|
|
URC;
|
|
} C0;
|
|
unsigned long long
|
|
C3,
|
|
C6,
|
|
C7,
|
|
TSC,
|
|
C1;
|
|
|
|
struct
|
|
{
|
|
unsigned long long ACCU;
|
|
} Power;
|
|
|
|
unsigned int SMI;
|
|
} Delta __attribute__ ((aligned (8)));
|
|
|
|
POWER_THERMAL PowerThermal;
|
|
THERMAL_POINT ThermalPoint;
|
|
|
|
struct
|
|
{
|
|
unsigned int SMI;
|
|
struct {
|
|
unsigned int
|
|
LOCAL,
|
|
UNKNOWN,
|
|
PCISERR,
|
|
IOCHECK;
|
|
} NMI;
|
|
} Interrupt;
|
|
|
|
struct
|
|
{
|
|
struct {
|
|
unsigned long long
|
|
CfgLock : 1-0, /* Core */
|
|
IORedir : 2-1, /* Core */
|
|
SCTLRX : 3-2, /* Thread */
|
|
Unused : 64-3;
|
|
};
|
|
unsigned long Revision;
|
|
unsigned short int CStateLimit;
|
|
unsigned short int CStateBaseAddr; /* Any I/O BAR */
|
|
} Query;
|
|
|
|
CACHE_TOPOLOGY T;
|
|
|
|
struct {
|
|
Bit64 FLAGS __attribute__ ((aligned (8)));
|
|
SSTATUS sstatus;
|
|
} SystemRegister;
|
|
|
|
unsigned int Bind;
|
|
|
|
CLOCK Clock;
|
|
|
|
COF_ST Boost[BOOST(SIZE)];
|
|
|
|
COF_ST Ratio;
|
|
} CORE_RO;
|
|
|
|
typedef struct
|
|
{
|
|
struct /* 64-byte cache line size. */
|
|
{
|
|
Bit64 V,
|
|
_pad[7];
|
|
} Sync __attribute__ ((aligned (8)));
|
|
|
|
} CORE_RW;
|
|
|
|
typedef struct
|
|
{
|
|
struct {
|
|
union {
|
|
} DIMM[MC_MAX_DIMM];
|
|
} Channel[MC_MAX_CHA];
|
|
|
|
union {
|
|
} MaxDIMMs;
|
|
|
|
unsigned short SlotCount, ChannelCount;
|
|
} MC_REGISTERS;
|
|
|
|
typedef struct
|
|
{
|
|
} BUS_REGISTERS;
|
|
|
|
|
|
typedef struct {
|
|
int taskCount;
|
|
TASK_MCB taskList[TASK_LIMIT];
|
|
|
|
unsigned int kernelVersionNumber;
|
|
|
|
char sysname[MAX_UTS_LEN],
|
|
release[MAX_UTS_LEN],
|
|
version[MAX_UTS_LEN],
|
|
machine[MAX_UTS_LEN];
|
|
} SYSGATE_RO; /* RO Pages */
|
|
|
|
#define CHIP_MAX_PCI 24
|
|
|
|
typedef struct
|
|
{
|
|
struct
|
|
{
|
|
unsigned long long PCLK; /* Contextual Clock [TSC|UCLK|MCLK] */
|
|
struct {
|
|
unsigned long long PC02,
|
|
PC03,
|
|
PC04,
|
|
PC06,
|
|
PC07,
|
|
PC08,
|
|
PC09,
|
|
PC10;
|
|
};
|
|
unsigned long long MC6;
|
|
|
|
struct {
|
|
unsigned long long FC0; /* Uncore fixed counter #0 */
|
|
} Uncore;
|
|
|
|
struct {
|
|
unsigned long long ACCU[PWR_DOMAIN(SIZE)];
|
|
} Power;
|
|
} Counter[2] __attribute__ ((aligned (8)));
|
|
|
|
struct
|
|
{
|
|
unsigned long long PCLK;
|
|
struct {
|
|
unsigned long long PC02,
|
|
PC03,
|
|
PC04,
|
|
PC06,
|
|
PC07,
|
|
PC08,
|
|
PC09,
|
|
PC10;
|
|
};
|
|
unsigned long long MC6;
|
|
|
|
struct {
|
|
unsigned long long FC0;
|
|
} Uncore;
|
|
} Delta __attribute__ ((aligned (8)));
|
|
|
|
FEATURES Features;
|
|
|
|
BitCC CR_Mask __attribute__ ((aligned (16)));
|
|
BitCC HWP_Mask __attribute__ ((aligned (16)));
|
|
BitCC SPEC_CTRL_Mask __attribute__ ((aligned (16)));
|
|
|
|
enum THERMAL_FORMULAS thermalFormula;
|
|
enum VOLTAGE_FORMULAS voltageFormula;
|
|
enum POWER_FORMULAS powerFormula;
|
|
|
|
unsigned int SleepInterval,
|
|
tickReset,
|
|
tickStep;
|
|
|
|
struct {
|
|
unsigned int Count,
|
|
OnLine;
|
|
} CPU;
|
|
|
|
SERVICE_PROC Service;
|
|
|
|
signed int ArchID;
|
|
|
|
struct {
|
|
unsigned int Boost[UNCORE_BOOST(SIZE)];
|
|
BUS_REGISTERS Bus;
|
|
MC_REGISTERS MC[MC_MAX_CTRL];
|
|
unsigned short CtrlCount;
|
|
struct CHIP_ST {
|
|
unsigned short VID, DID;
|
|
} Chip[CHIP_MAX_PCI];
|
|
} Uncore;
|
|
|
|
struct {
|
|
THERMAL_PARAM Param;
|
|
unsigned int Sensor;
|
|
struct {
|
|
signed int CPU, SOC;
|
|
} VID;
|
|
|
|
enum THERM_PWR_EVENTS Events[eDIM];
|
|
|
|
struct {
|
|
unsigned short Minimum,
|
|
Maximum;
|
|
} ACPI_CPPC;
|
|
} PowerThermal;
|
|
|
|
THERMAL_POINT ThermalPoint;
|
|
|
|
struct {
|
|
struct {
|
|
size_t Size;
|
|
int Order;
|
|
} ReqMem;
|
|
} Gate;
|
|
|
|
OS_DRIVER OS;
|
|
|
|
struct {
|
|
Bit64 NMI;
|
|
signed int AutoClock,
|
|
Experimental,
|
|
HotPlug,
|
|
PCI;
|
|
KERNEL_DRIVER Driver;
|
|
} Registration;
|
|
|
|
enum HYPERVISOR HypervisorID;
|
|
char Architecture[CODENAME_LEN];
|
|
|
|
SMBIOS_ST SMB;
|
|
|
|
FOOTPRINT FootPrint;
|
|
} PROC_RO; /* RO Pages */
|
|
|
|
typedef struct
|
|
{
|
|
struct
|
|
{
|
|
struct {
|
|
unsigned long long ACCU[PWR_DOMAIN(SIZE)];
|
|
} Power;
|
|
} Delta __attribute__ ((aligned (8)));
|
|
|
|
BitCC HWP __attribute__ ((aligned (16)));
|
|
BitCC VM __attribute__ ((aligned (16)));
|
|
struct {
|
|
Bit64 Signal __attribute__ ((aligned (8)));
|
|
} OS;
|
|
} PROC_RW; /* RW Pages */
|