diff --git a/crates/sel4/sys/build/xml/invocations/mod.rs b/crates/sel4/sys/build/xml/invocations/mod.rs index df1dd518f..91113f436 100644 --- a/crates/sel4/sys/build/xml/invocations/mod.rs +++ b/crates/sel4/sys/build/xml/invocations/mod.rs @@ -270,7 +270,7 @@ impl<'a> InvocationGenerator<'a> { }); } ParameterType::Bitfield => toks.extend(quote! { - self.set_mr_bits(#start..#end, #name.0.inner()[0]); + self.set_mr_bits_from_slice(#start..#end, #name.0.inner()); }), ParameterType::Struct { members } => { assert!(self.parameter_types.get(¶m.ty).pass_by_reference()); diff --git a/crates/sel4/sys/src/ipc_buffer.rs b/crates/sel4/sys/src/ipc_buffer.rs index 8e2eb69f1..3569cfc72 100644 --- a/crates/sel4/sys/src/ipc_buffer.rs +++ b/crates/sel4/sys/src/ipc_buffer.rs @@ -2,7 +2,7 @@ use core::mem; use core::ops::Range; use core::slice; -use sel4_bitfield_ops::{get_bits, set_bits, PrimInt}; +use sel4_bitfield_ops::{get_bits, set_bits, set_bits_from_slice, PrimInt, UnsignedPrimInt}; use crate::{seL4_CPtr, seL4_IPCBuffer, seL4_Word}; @@ -31,6 +31,14 @@ impl seL4_IPCBuffer { set_bits(&mut self.msg, range, T::cast_to_unsigned(value)) } + pub(crate) fn set_mr_bits_from_slice(&mut self, range: Range, value: &[T]) + where + T: UnsignedPrimInt, + usize: TryFrom, + { + set_bits_from_slice(&mut self.msg, range, value, 0) + } + pub(crate) fn msg_bytes_mut(&mut self) -> &'static mut [u8] { let msg = &mut self.msg; unsafe {