[RFC] include/linux/make_type.h: Helpers for making u16/u32/u64 values

Message ID 20240214155408.1569-1-michal.wajdeczko@intel.com
State New
Headers
Series [RFC] include/linux/make_type.h: Helpers for making u16/u32/u64 values |

Commit Message

Michal Wajdeczko Feb. 14, 2024, 3:54 p.m. UTC
  It is quite common practice to make u16, u32 or u64 values from
smaller words.  Add simple helpers for that.

Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Jani Nikula <jani.nikula@intel.com>
---
 include/linux/make_type.h | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)
 create mode 100644 include/linux/make_type.h
  

Comments

Andy Shevchenko Feb. 14, 2024, 4:04 p.m. UTC | #1
On Wed, Feb 14, 2024 at 04:54:08PM +0100, Michal Wajdeczko wrote:
> It is quite common practice to make u16, u32 or u64 values from
> smaller words.  Add simple helpers for that.

..

> +++ b/include/linux/make_type.h

If we go with this, please make better name so we can combine this with
upper/lower_*_bits() helpers which seems related semantically to this.

Also _type suffix is a bit confusing as we use _types in the headers
that provide just data type(s).
  
Michal Wajdeczko Feb. 14, 2024, 5:02 p.m. UTC | #2
On 14.02.2024 17:04, Andy Shevchenko wrote:
> On Wed, Feb 14, 2024 at 04:54:08PM +0100, Michal Wajdeczko wrote:
>> It is quite common practice to make u16, u32 or u64 values from
>> smaller words.  Add simple helpers for that.
> 
> ...
> 
>> +++ b/include/linux/make_type.h
> 
> If we go with this, please make better name so we can combine this with
> upper/lower_*_bits() helpers which seems related semantically to this.
> 

what about "include/linux/uintops.h" like we have bitops.h ?
  
Andy Shevchenko Feb. 14, 2024, 5:15 p.m. UTC | #3
On Wed, Feb 14, 2024 at 06:02:01PM +0100, Michal Wajdeczko wrote:
> On 14.02.2024 17:04, Andy Shevchenko wrote:
> > On Wed, Feb 14, 2024 at 04:54:08PM +0100, Michal Wajdeczko wrote:

..

> >> +++ b/include/linux/make_type.h
> > 
> > If we go with this, please make better name so we can combine this with
> > upper/lower_*_bits() helpers which seems related semantically to this.
> 
> what about "include/linux/uintops.h" like we have bitops.h ?

We have wordpart.h, would it work?
  

Patch

diff --git a/include/linux/make_type.h b/include/linux/make_type.h
new file mode 100644
index 000000000000..60e2e091ea3c
--- /dev/null
+++ b/include/linux/make_type.h
@@ -0,0 +1,29 @@ 
+/* SPDX-License-Identifier: GPL-2.0 */
+
+#ifndef _LINUX_MAKE_TYPE_H
+#define _LINUX_MAKE_TYPE_H
+
+#include <linux/types.h>
+
+/**
+ * make_u16 - make u16 value from two u8 values
+ * @hi__: value representing upper 8 bits
+ * @lo__: value representing lower 8 bits
+ */
+#define make_u16(hi__, lo__)  ((u16)(u8)(hi__) << 8 | (u8)(lo__))
+
+/**
+ * make_u32 - make u32 value from two u16 values
+ * @hi__: value representing upper 16 bits
+ * @lo__: value representing lower 16 bits
+ */
+#define make_u32(hi__, lo__)  ((u32)(u16)(hi__) << 16 | (u16)(lo__))
+
+/**
+ * make_u64 - make u64 value from two u32 values
+ * @hi__: value representing upper 32 bits
+ * @lo__: value representing lower 32 bits
+ */
+#define make_u64(hi__, lo__)  ((u64)(hi__) << 32 | (u32)(lo__))
+
+#endif