04 Oct, 2017
1 commit
-
I do not see anything that restricts this macro to 32 bit width.
Link: http://lkml.kernel.org/r/1505921975-23379-1-git-send-email-yamada.masahiro@socionext.com
Signed-off-by: Masahiro Yamada
Acked-by: Jakub Kicinski
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds
11 Feb, 2017
1 commit
-
Add a helper for checking at runtime that a value will fit inside
a specified field/mask.Signed-off-by: Jakub Kicinski
Signed-off-by: David S. Miller
09 Sep, 2016
1 commit
-
Common approach to accessing register fields is to define
structures or sets of macros containing mask and shift pair.
Operations on the register are then performed as follows:field = (reg >> shift) & mask;
reg &= ~(mask << shift);
reg |= (field & mask) << shift;Defining shift and mask separately is tedious. Ivo van Doorn
came up with an idea of computing them at compilation time
based on a single shifted mask (later refined by Felix) which
can be used like this:#define REG_FIELD 0x000ff000
field = FIELD_GET(REG_FIELD, reg);
reg &= ~REG_FIELD;
reg |= FIELD_PREP(REG_FIELD, field);FIELD_{GET,PREP} macros take care of finding out what the
appropriate shift is based on compilation time ffs operation.GENMASK can be used to define registers (which is usually
less error-prone and easier to match with datasheets).This approach is the most convenient I've seen so to limit code
multiplication let's move the macros to a global header file.
Attempts to use static inlines instead of macros failed due
to false positive triggering of BUILD_BUG_ON()s, especially with
GCC < 6.0.Signed-off-by: Jakub Kicinski
Reviewed-by: Dinan Gunawardena
Signed-off-by: Kalle Valo