Skip to content

Commit b96f57f

Browse files
committed
rust: of: Add reserved_mem_region_to_resource_byname()
Creates Resource from a reserved memory region. Depends on commit f4fcfdd ("of: reserved_mem: Add functions to parse "memory-region"") from v6.16-rc1. Signed-off-by: Janne Grunau <j@jannau.net>
1 parent c89af49 commit b96f57f

2 files changed

Lines changed: 28 additions & 0 deletions

File tree

rust/bindings/bindings_helper.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
#include <linux/of.h>
6161
#include <linux/of_address.h>
6262
#include <linux/of_device.h>
63+
#include <linux/of_reserved_mem.h>
6364
#include <linux/pci.h>
6465
#include <linux/phy.h>
6566
#include <linux/pid_namespace.h>

rust/kernel/of.rs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ use crate::{bindings, device_id::RawDeviceId, prelude::*};
1111
use core::marker::PhantomData;
1212
use core::num::NonZeroU32;
1313

14+
use crate::error::to_result;
15+
use crate::io::resource::Resource;
16+
1417
/// IdTable type for OF drivers.
1518
pub type IdTable<T> = &'static dyn kernel::device_id::IdTable<DeviceId, T>;
1619

@@ -211,6 +214,30 @@ impl Node {
211214
}
212215
}
213216

217+
#[allow(unused_variables)]
218+
/// Get a reserved memory region as a resource
219+
pub fn reserved_mem_region_to_resource_byname(&self, name: &CStr) -> Result<Resource> {
220+
#[cfg(not(CONFIG_OF))]
221+
{
222+
Err(ENOENT)
223+
}
224+
#[cfg(CONFIG_OF)]
225+
{
226+
let res = Resource::zeroed();
227+
// SAFETY: This function is safe to call as long as the arguments are valid pointers.
228+
let ret = unsafe {
229+
bindings::of_reserved_mem_region_to_resource_byname(
230+
self.raw_node,
231+
name.as_char_ptr(),
232+
res.as_raw(),
233+
)
234+
};
235+
to_result(ret)?;
236+
237+
Ok(res)
238+
}
239+
}
240+
214241
#[allow(unused_variables)]
215242
/// Look up a node property by name, returning a `Property` object if found.
216243
pub fn find_property(&self, propname: &CStr) -> Option<Property<'_>> {

0 commit comments

Comments
 (0)