fdt_parser/cache/node/
memory.rs

1use core::{fmt::Debug, ops::Deref};
2
3use crate::{cache::node::NodeBase, FdtError, MemoryRegion};
4use alloc::vec::Vec;
5
6#[derive(Clone)]
7pub struct Memory {
8    node: NodeBase,
9}
10
11impl Memory {
12    pub(crate) fn new(node: NodeBase) -> Self {
13        Memory { node }
14    }
15
16    /// Get the memory regions defined by this memory node
17    pub fn regions(&self) -> Result<Vec<MemoryRegion>, FdtError> {
18        let reg = self.node.reg()?;
19        let mut out = Vec::new();
20        for r in reg {
21            out.push(MemoryRegion {
22                address: r.address as usize as _,
23                size: r.size.unwrap_or_default(),
24            });
25        }
26        Ok(out)
27    }
28}
29
30impl Debug for Memory {
31    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
32        f.debug_struct("Memory")
33            .field("name", &self.node.name())
34            .finish()
35    }
36}
37
38impl Deref for Memory {
39    type Target = NodeBase;
40
41    fn deref(&self) -> &Self::Target {
42        &self.node
43    }
44}