On Wed, Mar 26, 2025 at 06:13:41PM +0100, Remo Senekowitsch wrote: > From: "Rob Herring (Arm)" <robh@xxxxxxxxxx> > > Add an "Integer" trait similar to crate::num::Integer. This is useful > for implementing generic methods which operate on different sizes of > integers. One example is reading DT/ACPI firmware properties. > > This was originally proposed by Alice Ryhl[1]. > > [1] https://lore.kernel.org/rust-for-linux/CAH5fLgiXPZqKpWSSNdx-Ww-E9h2tOLcF3_8Y4C_JQ0eU8EMwFw@xxxxxxxxxxxxxx/ > > Suggested-by: Alice Ryhl <aliceryhl@xxxxxxxxxx> > Signed-off-by: Rob Herring (Arm) <robh@xxxxxxxxxx> This needs your Signed-off-by too because you are sending it. > --- > rust/kernel/types.rs | 22 +++++++++++++++++++++- > 1 file changed, 21 insertions(+), 1 deletion(-) > > diff --git a/rust/kernel/types.rs b/rust/kernel/types.rs > index 2bbaab83b..21647b7ba 100644 > --- a/rust/kernel/types.rs > +++ b/rust/kernel/types.rs > @@ -3,10 +3,11 @@ > //! Kernel types. > > use crate::init::{self, PinInit}; > +use crate::transmute::{AsBytes, FromBytes}; > use core::{ > cell::UnsafeCell, > marker::{PhantomData, PhantomPinned}, > - mem::{ManuallyDrop, MaybeUninit}, > + mem::{size_of, ManuallyDrop, MaybeUninit}, > ops::{Deref, DerefMut}, > ptr::NonNull, > }; > @@ -553,6 +554,25 @@ pub enum Either<L, R> { > Right(R), > } > > +/// Trait defined for all integer types similar to `crate::num::Integer` > +pub trait Integer: FromBytes + AsBytes + Copy { > + /// Size of the integer in bytes > + const SIZE: usize; > +} > + > +macro_rules! impl_int { > + ($($typ:ty),* $(,)?) => {$( > + impl Integer for $typ { > + const SIZE: usize = size_of::<Self>(); > + } > + )*}; > +} > + > +impl_int! { > + u8, u16, u32, u64, usize, > + i8, i16, i32, i64, isize, > +} > + > /// Zero-sized type to mark types not [`Send`]. > /// > /// Add this type as a field to your struct if your type should not be sent to a different task. > -- > 2.49.0 >