#!/bin/bash

# Copyright Piero Olmeda - AudioLinux  audiolinux@fastmail.fm
# https://www.audio-linux.com
# License: custom - All rights reserved

source /etc/ppower.conf

get_avalaible_cores() {
cores=$(ls /sys/devices/system/cpu/ |  grep -o '[[:digit:]]*' | wc -l)
c=1
available_cores=""
while [[ $c -lt $cores ]]; do
if [[ "$(cat /sys/devices/system/cpu/cpu"$c"/online)" == "1" ]]; then
available_cores="$available_cores  $c"
fi
((c++))
done
available_cores="0 $available_cores"
echo $available_cores
}

cores=$(get_avalaible_cores)
is=$(echo $ISOLATED_CORES | sed 's/,/ /g')

set_value() {
if [[ "$1" ]]; then
for i in $cores; do
echo $1 > /sys/devices/system/cpu/cpu$i/cpufreq/$2
done
fi
}

set_value_isolated() {
if [[ "$1" ]]; then
for i in $is; do
echo $1 > /sys/devices/system/cpu/cpu$i/cpufreq/$2
done
fi
}

turbo(){
# enable 1 1 0 -> 1 0
# disable 0 0 1 -> 0 1
if [[ -f /sys/devices/system/cpu/cpufreq/boost ]]; then
echo $1 > /sys/devices/system/cpu/cpufreq/boost
fi
if [[ -f /sys/devices/system/cpu/amd-pstate/boost ]]; then
echo $1 > /sys/devices/system/cpu/amd-pstate/boost
fi
if [[ -f /sys/devices/system/cpu/intel_pstate/no_turbo ]]; then
echo $2 > /sys/devices/system/cpu/intel_pstate/no_turbo
fi
}

set_value "$GOVERNOR" scaling_governor
set_value "$ENERGY" energy_performance_preference
set_value "$MAXFREQUENCY" scaling_max_freq
set_value "$MINFREQUENCY" scaling_min_freq

if [[ "$ISOLATED_CORES" ]]; then
set_value_isolated "$GOV_ISOLATED" scaling_governor
if [[ $(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver | grep amd) ]]; then
set_value_isolated "$EN_ISOLATED" energy_performance_preference
fi
set_value_isolated "$MAXFREQ_ISOLATED" scaling_max_freq
set_value_isolated "$MINFREQ_ISOLATED" scaling_min_freq
fi

if [[ "$TURBO" ]]; then
if [[ "$TURBO" == "1" ]]; then
turbo 1 0
else
turbo 0 1
fi
fi
