use crate::SDTHeader;
#[derive(Copy, Clone)]
#[repr(C, packed)]
pub struct MaximumProximityDomainInformation {
pub revision: u8,
pub length: u8,
pub proximity_domain_range_low: u32,
pub proximity_domain_range_high: u32,
pub max_processor_capacity: u32,
pub max_memory_capacity: u64,
}
#[derive(Copy, Clone)]
#[repr(C, packed)]
pub struct MaximumSystemCharacteristicsTable {
pub header: SDTHeader,
pub offset_prox_dom_info: u32,
pub max_number_of_proximity_domains: u32,
pub max_number_of_clock_domains: u32,
pub max_physical_address: u64,
}
impl MaximumSystemCharacteristicsTable {
pub const fn proximity_domain_information(&self) -> &[MaximumProximityDomainInformation] {
unsafe {
core::slice::from_raw_parts(
(self as *const _ as *const u8).add(self.offset_prox_dom_info as usize)
as *const MaximumProximityDomainInformation,
(self.header.length as usize)
.checked_sub(self.offset_prox_dom_info as usize)
.expect("INCORRECT MATH: MSCT impl --- slice reference parsing (offset beyond table length)")
/ core::mem::size_of::<MaximumProximityDomainInformation>(),
)
}
}
}