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.