extern crate alloc;
use crate::config;
use patina::component::{
IntoComponent,
hob::{FromHob, Hob},
params::ConfigMut,
};
#[derive(IntoComponent)]
pub struct PerformanceConfigurationProvider;
#[derive(FromHob, zerocopy_derive::FromBytes)]
#[hob = "fd87f2d8-112d-4640-9c00-d37d2a1fb75d"]
#[repr(C, packed)]
pub struct PerformanceConfigHob {
enable_component: u8,
enabled_measurements: u32,
}
impl PerformanceConfigurationProvider {
pub fn entry_point(
self,
perf_config_hob: Hob<PerformanceConfigHob>,
mut config_mut: ConfigMut<config::PerfConfig>,
) -> patina::error::Result<()> {
log::trace!("Patina Performance Configuration Provider Entry Point");
log::trace!("Incoming Patina Performance Component Configuration: {:?}", *config_mut);
config_mut.enable_component = perf_config_hob.enable_component != 0;
if !config_mut.enable_component {
log::trace!("The Patina Performance component is disabled per HOB configuration.");
} else {
log::trace!("The Patina Performance component is enabled per HOB configuration.");
config_mut.enabled_measurements = perf_config_hob.enabled_measurements;
}
log::trace!("Outgoing MM Configuration: {:?}", *config_mut);
config_mut.lock();
Ok(())
}
}