Messages in this thread | | | From | Kalle Valo <> | Subject | Re: [PATCH] bitops: add equivalent of BIT(x) for bitfields | Date | Wed, 07 Dec 2016 10:34:39 +0200 |
| |
Sebastian Frias <sf84@laposte.net> writes:
> Introduce SETBITFIELD(msb, lsb, value) macro to ease dealing with > continuous bitfields, just as BIT(x) does for single bits. > > SETBITFIELD_ULL(msb, lsb, value) macro is also added. > > Signed-off-by: Sebastian Frias <sf84@laposte.net> > --- > > Code protected with "#ifdef __KERNEL__" just as the BIT(x) > macros. > > I would have preferred another name, like BITS(x) but it is > already used. > > Suggestions for other names welcome. > --- > include/linux/bitops.h | 14 ++++++++++++++ > 1 file changed, 14 insertions(+) > > diff --git a/include/linux/bitops.h b/include/linux/bitops.h > index a83c822..4659237 100644 > --- a/include/linux/bitops.h > +++ b/include/linux/bitops.h > @@ -24,6 +24,20 @@ > #define GENMASK_ULL(h, l) \ > (((~0ULL) << (l)) & (~0ULL >> (BITS_PER_LONG_LONG - 1 - (h)))) > > +#ifdef __KERNEL__ > +/* > + * Equivalent of BIT(x) but for contiguous bitfields > + * SETBITFIELD(1, 0,0xff) = 0x00000003 > + * SETBITFIELD(3, 0,0xff) = 0x0000000f > + * SETBITFIELD(15,8,0xff) = 0x0000ff00 > + * SETBITFIELD(6, 6, 1) = 0x00000040 == BIT(6) > + */ > +#define SETBITFIELD(msb, lsb, val) \ > + (((val) << (lsb)) & (GENMASK((msb), (lsb)))) > +#define SETBITFIELD_ULL(msb, lsb, val) \ > + (((val) << (lsb)) & (GENMASK_ULL((msb), (lsb)))) > +#endif
Pleaes check FIELD_PREP() from include/linux/bitfield.h, doesn't it already do the same?
Adding Jakub to comment more.
-- Kalle Valo
| |