#[repr(u32)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum PowerManagement
{
Physical,
Kvm,
}
impl PowerManagement
{
#[inline(always)]
pub fn current() -> Option<PowerManagement>
{
match unsafe { ::dpdk_sys::rte_power_get_env() }
{
power_management_env::PM_ENV_NOT_SET => None,
power_management_env::PM_ENV_ACPI_CPUFREQ => Some(PowerManagement::Physical),
power_management_env::PM_ENV_KVM_VM => Some(PowerManagement::Kvm),
}
}
#[inline(always)]
pub fn start(&self) -> Result<(), i32>
{
let environment = match *self
{
PowerManagement::Physical => power_management_env::PM_ENV_ACPI_CPUFREQ,
PowerManagement::Kvm => power_management_env::PM_ENV_KVM_VM,
};
match unsafe { ::dpdk_sys::rte_power_set_env(environment) }
{
0 => Ok(()),
x if x < 0 => Err(x),
illegal @ _ => panic!("rte_power_set_env() returned an invalid positive return code of '{}'", illegal),
}
}
#[inline(always)]
pub fn stop()
{
unsafe { ::dpdk_sys::rte_power_unset_env() }
}
}