git: 2f6e37eded5e - stable/13 - LinuxKPI: bitfields add more *replace_bits()

From: Bjoern A. Zeeb <bz_at_FreeBSD.org>
Date: Sun, 16 Jan 2022 23:20:55 UTC
The branch stable/13 has been updated by bz:

URL: https://cgit.FreeBSD.org/src/commit/?id=2f6e37eded5e869c54330a748ae9a66459837444

commit 2f6e37eded5e869c54330a748ae9a66459837444
Author:     Bjoern A. Zeeb <bz@FreeBSD.org>
AuthorDate: 2022-01-09 01:12:05 +0000
Commit:     Bjoern A. Zeeb <bz@FreeBSD.org>
CommitDate: 2022-01-16 22:38:57 +0000

    LinuxKPI: bitfields add more *replace_bits()
    
    Add or extend the already existing *_replace_bits() implementations
    using macros as we do for the other parts in the file for
    le<n>p_replace_bits(), u<n>p_replace_bits(), and _u<n>_replace_bits().
    
    Reviewed by:    hselasky
    Differential Revision: https://reviews.freebsd.org/D33799
    
    (cherry picked from commit 2fb0569f1ff58209420ed9c5500476ad7d93e702)
---
 .../linuxkpi/common/include/linux/bitfield.h       | 42 +++++++++++++++++++---
 1 file changed, 37 insertions(+), 5 deletions(-)

diff --git a/sys/compat/linuxkpi/common/include/linux/bitfield.h b/sys/compat/linuxkpi/common/include/linux/bitfield.h
index a805c1bca5a1..14278a557809 100644
--- a/sys/compat/linuxkpi/common/include/linux/bitfield.h
+++ b/sys/compat/linuxkpi/common/include/linux/bitfield.h
@@ -86,12 +86,44 @@ _leX_encode_bits(64)
 _leX_encode_bits(32)
 _leX_encode_bits(16)
 
-static __inline void
-le32p_replace_bits(uint32_t *p, uint32_t v, uint32_t f)
-{
+#define	_leXp_replace_bits(_n)						\
+	static __inline void						\
+	le ## _n ## p_replace_bits(uint ## _n ## _t *p,			\
+	    uint ## _n ## _t v, uint ## _n ## _t f)			\
+	{								\
+		*p = (*p & ~(cpu_to_le ## _n(f))) |			\
+		     le ## _n ## _encode_bits(v, f);			\
+	}
+
+_leXp_replace_bits(64)
+_leXp_replace_bits(32)
+_leXp_replace_bits(16)
+
+#define	_uXp_replace_bits(_n)						\
+	static __inline void						\
+	u ## _n ## p_replace_bits(uint ## _n ## _t *p,			\
+	    uint ## _n ## _t v, uint ## _n ## _t f)			\
+	{								\
+		*p = (*p & ~f) | u ## _n ## _encode_bits(v, f);		\
+	}
+
+_uXp_replace_bits(64)
+_uXp_replace_bits(32)
+_uXp_replace_bits(16)
+_uXp_replace_bits(8)
+
+#define	_uX_replace_bits(_n)						\
+	static __inline uint ## _n ## _t				\
+	u ## _n ## _replace_bits(uint ## _n ## _t p,			\
+	    uint ## _n ## _t v, uint ## _n ## _t f)			\
+	{								\
+		return ((p & ~f) | u ## _n ## _encode_bits(v, f));	\
+	}
 
-	*p = (*p & ~(cpu_to_le32(f))) | le32_encode_bits(v, f);
-}
+_uX_replace_bits(64)
+_uX_replace_bits(32)
+_uX_replace_bits(16)
+_uX_replace_bits(8)
 
 #define	__bf_shf(x)	(__builtin_ffsll(x) - 1)