sys: util: provide bitfield construction/extraction utility macros
sys: util: provide bitfield construction/extraction utility macros

Those are especially useful with hardware device registers.
They behave the same way as their Linux equivalent, with a much
simpler implementation for now.

Example:

 #define REG_FIELD_A  GENMASK(6, 0)
 #define REG_FIELD_B  BIT(7)
 #define REG_FIELD_C  GENMASK(15, 8)
 #define REG_FIELD_D  GENMASK(31, 16)

Get:
 a = FIELD_GET(REG_FIELD_A, reg);
 b = FIELD_GET(REG_FIELD_B, reg);

Set:
 reg = FIELD_PREP(REG_FIELD_A, 1) |
       FIELD_PREP(REG_FIELD_B, 0) |
       FIELD_PREP(REG_FIELD_C, c) |
       FIELD_PREP(REG_FIELD_D, 0x40);

Modify:
 reg &= ~REG_FIELD_C;
 reg |= FIELD_PREP(REG_FIELD_C, c);

Signed-off-by: Nicolas Pitre <76342682d5afc62854e1102d9578521fe1ed6813@baylibre.com>

zephyrproject-rtos/zephyr,galak/zephyr,finikorg/zephyr,finikorg/zephyr,finikorg/zephyr,finikorg/zephyr,finikorg/zephyr,galak/zephyr,zephyrproject-rtos/zephyr,galak/zephyr,zephyrproject-rtos/zephyr,zephyrproject-rtos/zephyr,galak/zephyr,zephyrproject-rtos/zephyr,galak/zephyr