uint32_t
__BIT(
n
)
uint32_t
__BITS(
m
, n
)
__SHIFTIN(
v
, mask
)
__SHIFTOUT(
v
, mask
)
__SHIFTOUT_MASK(
mask
)
Use __BIT and __BITS to define bitmasks:
n
)
m
, n
)
m
through
n
,
inclusive, set.
It does not matter whether
m
>
n
or
m
<=
n
.
The least significant bit is bit 0.
__SHIFTIN(),
__SHIFTOUT(
),
and
__SHIFTOUT_MASK(
)
help read and write bitfields from words:
v
, mask
)
v
into the bitfield defined by
mask
,
and return them.
No side-effects.
v
, mask
)
mask
from
v
,
right-shifting the bits so that the rightmost selected bit is at
bit 0.
No side-effects.
mask
)
mask
so that the rightmost non-zero bit is at bit 0.
This is useful for finding the greatest unsigned value that a
bitfield can hold.
No side-effects.
Note that
__SHIFTOUT_MASK(
m
)
=
__SHIFTOUT(
m
, m
).
/*
* Register definitions taken from the RFMD RF3000 manual.
*/
#define RF3000_GAINCTL 0x11 /* TX variable gain control */
#define RF3000_GAINCTL_TXVGC_MASK __BITS(7, 2)
#define RF3000_GAINCTL_SCRAMBLER __BIT(1)
/*
* Shift the transmit power into the transmit-power field of the
* gain-control register and write it to the baseband processor.
*/
atw_rf3000_write(sc, RF3000_GAINCTL,
__SHIFTIN(txpower, RF3000_GAINCTL_TXVGC_MASK));
/*
* Register definitions taken from the ADMtek ADM8211 manual.
*
*/
#define ATW_RXSTAT_OWN __BIT(31) /* 1: NIC may fill descriptor */
/* ... */
#define ATW_RXSTAT_DA1 __BIT(17) /* DA bit 1, admin'd address */
#define ATW_RXSTAT_DA0 __BIT(16) /* DA bit 0, group address */
#define ATW_RXSTAT_RXDR_MASK __BITS(15,12) /* RX data rate */
#define ATW_RXSTAT_FL_MASK __BITS(11,0) /* RX frame length, last
* descriptor only
*/
/* Extract the frame length from the Rx descriptor's
* status field.
*/
len = __SHIFTOUT(rxstat, ATW_RXSTAT_FL_MASK);
)
and
SHIFTOUT(
).
)
and
__BITS(
)
can only express 32-bit bitmasks.