Changeset View
Changeset View
Standalone View
Standalone View
sys/compat/linuxkpi/common/include/linux/bitfield.h
Show All 24 Lines | |||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||||
* SUCH DAMAGE. | * SUCH DAMAGE. | ||||
* | * | ||||
* $FreeBSD$ | * $FreeBSD$ | ||||
*/ | */ | ||||
#ifndef _LINUX_BITFIELD_H | #ifndef _LINUXKPI_LINUX_BITFIELD_H | ||||
#define _LINUX_BITFIELD_H | #define _LINUXKPI_LINUX_BITFIELD_H | ||||
#include <linux/types.h> | #include <linux/types.h> | ||||
#include <asm/byteorder.h> | #include <asm/byteorder.h> | ||||
/* Use largest possible type. */ | /* Use largest possible type. */ | ||||
static inline uint64_t ___lsb(uint64_t f) { return (f & -f); } | static inline uint64_t ___lsb(uint64_t f) { return (f & -f); } | ||||
static inline uint64_t ___bitmask(uint64_t f) { return (f / ___lsb(f)); } | static inline uint64_t ___bitmask(uint64_t f) { return (f / ___lsb(f)); } | ||||
▲ Show 20 Lines • Show All 53 Lines • ▼ Show 20 Lines | |||||
#define __bf_shf(x) (__builtin_ffsll(x) - 1) | #define __bf_shf(x) (__builtin_ffsll(x) - 1) | ||||
#define FIELD_PREP(_mask, _value) \ | #define FIELD_PREP(_mask, _value) \ | ||||
(((typeof(_mask))(_value) << __bf_shf(_mask)) & (_mask)) | (((typeof(_mask))(_value) << __bf_shf(_mask)) & (_mask)) | ||||
#define FIELD_GET(_mask, _value) \ | #define FIELD_GET(_mask, _value) \ | ||||
((typeof(_mask))(((_value) & (_mask)) >> __bf_shf(_mask))) | ((typeof(_mask))(((_value) & (_mask)) >> __bf_shf(_mask))) | ||||
#endif /* _LINUX_BITFIELD_H */ | #endif /* _LINUXKPI_LINUX_BITFIELD_H */ |