/* * -------------------------------------------------------------------------- * "THE BEER-WARE LICENSE" (Revision 42): * , , * wrote this file. As long as you retain this notice you can do whatever you * want with this stuff. If you meet any of us some day, and you think this * stuff is worth it, you can buy us a beer in return. - The sys-clk authors * -------------------------------------------------------------------------- */ #pragma once #include #include typedef enum { SysClkConfigValue_PollingIntervalMs = 0, SysClkConfigValue_TempLogIntervalMs = 1, SysClkConfigValue_FreqLogIntervalMs = 2, SysClkConfigValue_PowerLogIntervalMs = 3, SysClkConfigValue_CsvWriteIntervalMs = 4, HocClkConfigValue_UncappedClocks = 5, HocClkConfigValue_OverwriteBoostMode = 6, HocClkConfigValue_MaxCpuClock = 7, HocClkConfigValue_MaxGpuClock = 8, SysClkConfigValue_EnumMax = 9, } SysClkConfigValue; typedef struct { uint64_t values[SysClkConfigValue_EnumMax]; } SysClkConfigValueList; static inline const char* sysclkFormatConfigValue(SysClkConfigValue val, bool pretty) { switch(val) { case SysClkConfigValue_PollingIntervalMs: return pretty ? "Polling Interval (ms)" : "poll_interval_ms"; case SysClkConfigValue_TempLogIntervalMs: return pretty ? "Temperature logging interval (ms)" : "temp_log_interval_ms"; case SysClkConfigValue_FreqLogIntervalMs: return pretty ? "Frequency logging interval (ms)" : "freq_log_interval_ms"; case SysClkConfigValue_PowerLogIntervalMs: return pretty ? "Power logging interval (ms)" : "power_log_interval_ms"; case SysClkConfigValue_CsvWriteIntervalMs: return pretty ? "CSV write interval (ms)" : "csv_write_interval_ms"; case HocClkConfigValue_UncappedClocks: return pretty ? "Uncapped Clocks" : "uncapped_clocks"; case HocClkConfigValue_OverwriteBoostMode: return pretty ? "Overwrite Boost Mode" : "ow_boost"; case HocClkConfigValue_MaxCpuClock: return pretty ? "Max CPU Clock" : "cpu_max"; case HocClkConfigValue_MaxGpuClock: return pretty ? "Max GPU Clock" : "gpu_max"; default: return pretty ? "Null" : "null"; } } static inline uint64_t sysclkDefaultConfigValue(SysClkConfigValue val) { switch(val) { case SysClkConfigValue_PollingIntervalMs: return 300ULL; case SysClkConfigValue_TempLogIntervalMs: case SysClkConfigValue_FreqLogIntervalMs: case SysClkConfigValue_PowerLogIntervalMs: case SysClkConfigValue_CsvWriteIntervalMs: case HocClkConfigValue_UncappedClocks: case HocClkConfigValue_OverwriteBoostMode: return 0ULL; case HocClkConfigValue_MaxCpuClock: return 1785ULL; case HocClkConfigValue_MaxGpuClock: return 921ULL; default: return 0ULL; } } static inline uint64_t sysclkValidConfigValue(SysClkConfigValue val, uint64_t input) { switch(val) { case SysClkConfigValue_PollingIntervalMs: return input > 0; case SysClkConfigValue_TempLogIntervalMs: case SysClkConfigValue_FreqLogIntervalMs: case SysClkConfigValue_PowerLogIntervalMs: case SysClkConfigValue_CsvWriteIntervalMs: return input >= 0; case HocClkConfigValue_UncappedClocks: case HocClkConfigValue_OverwriteBoostMode: return (input & 0x1) == input; case HocClkConfigValue_MaxCpuClock: case HocClkConfigValue_MaxGpuClock: return input > 0; default: return false; } }