Sebastian Frias <s...@laposte.net> writes: > Introduce GENVALUE(msb, lsb, value) macro to ease dealing with > continuous bitfields, just as BIT(x) does for single bits. > > GENVALUE_ULL(msb, lsb, value) macro is also added. > > This is useful mostly for creating values to be packed together > via OR operations, ex: > > u32 val = 0x11110000; > val |= GENVALUE(19, 12, 0x5a); > > now 'val = 0x1115a000' > > > Signed-off-by: Sebastian Frias <s...@laposte.net> > Link: https://marc.info/?l=linux-kernel&m=148094498711000&w=2 > --- > > Change in v2: > - rename the macro to GENVALUE as proposed by Linus > - longer comment attempts to show use case for the macro as > proposed by Borislav > > Change in v3: > - use BUILD_BUG_ON_ZERO() to break if some input parameters > (essentially 'lsb' but also 'msb') are not constants as > proposed by Linus. > Indeed, 'lsb' is used twice so it cannot have side-effects; > 'msb' is subjected to same constraints for consistency.
(I missed there was v3 already, but I'll repeat what I said in v1.) Please check FIELD_PREP() from include/linux/bitfield.h, doesn't it already do the same? Adding Jakub to comment more. -- Kalle Valo