#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub enum SliceKind {
#[default]
Unknown,
Small,
Medium,
MediumContinuation,
Bump,
}
#[non_exhaustive]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct Segment {
pub segment_index: u8,
pub class_index: u32,
pub context: bool,
pub live_blocks: u32,
pub usable_blocks: u32,
pub utilization_tracked: bool,
}
#[doc(hidden)]
#[derive(Clone, Copy, Debug)]
pub struct SegmentFields {
pub segment_index: u8,
pub class_index: u32,
pub context: bool,
pub live_blocks: u32,
pub usable_blocks: u32,
pub utilization_tracked: bool,
}
impl Segment {
#[doc(hidden)]
#[must_use]
pub fn from_fields(fields: SegmentFields) -> Self {
let SegmentFields {
segment_index,
class_index,
context,
live_blocks,
usable_blocks,
utilization_tracked,
} = fields;
Self {
segment_index,
class_index,
context,
live_blocks,
usable_blocks,
utilization_tracked,
}
}
}
#[non_exhaustive]
#[derive(Clone, Debug, Default, Eq, PartialEq)]
pub struct Slice {
pub slice_index: u32,
pub kind: SliceKind,
pub span_slices: u32,
pub owner: u64,
pub requested_bytes: u64,
pub usable_bytes: u64,
pub segments: Vec<Segment>,
}
#[doc(hidden)]
#[derive(Debug)]
pub struct SliceFields {
pub slice_index: u32,
pub kind: SliceKind,
pub span_slices: u32,
pub owner: u64,
pub requested_bytes: u64,
pub usable_bytes: u64,
pub segments: Vec<Segment>,
}
impl Slice {
#[doc(hidden)]
#[must_use]
pub fn from_fields(fields: SliceFields) -> Self {
let SliceFields {
slice_index,
kind,
span_slices,
owner,
requested_bytes,
usable_bytes,
segments,
} = fields;
Self {
slice_index,
kind,
span_slices,
owner,
requested_bytes,
usable_bytes,
segments,
}
}
}
#[non_exhaustive]
#[derive(Clone, Debug, Default, Eq, PartialEq)]
pub struct TopologyRegion {
pub region_index: u32,
pub base_address: u64,
pub region_bytes: u64,
pub slice_bytes: u64,
pub used_bitmap: Vec<u64>,
pub slices: Vec<Slice>,
}
#[doc(hidden)]
#[derive(Debug)]
pub struct TopologyRegionFields {
pub region_index: u32,
pub base_address: u64,
pub region_bytes: u64,
pub slice_bytes: u64,
pub used_bitmap: Vec<u64>,
pub slices: Vec<Slice>,
}
impl TopologyRegion {
#[doc(hidden)]
#[must_use]
pub fn from_fields(fields: TopologyRegionFields) -> Self {
let TopologyRegionFields {
region_index,
base_address,
region_bytes,
slice_bytes,
used_bitmap,
slices,
} = fields;
Self {
region_index,
base_address,
region_bytes,
slice_bytes,
used_bitmap,
slices,
}
}
}