From: Vivian Wang Date: Fri, 15 Mar 2024 17:36:39 +0000 (+0800) Subject: include: sbi: Support byteorder macros in assembly X-Git-Tag: v1.5~64 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5c9a73565f5e6d07cf30ecd7fa511d872050bd2c;p=platform%2Fkernel%2Fopensbi.git include: sbi: Support byteorder macros in assembly Avoid using C types and casts if sbi/sbi_byteorder.h is included in assembly code Signed-off-by: Vivian Wang Reviewed-by: Anup Patel --- diff --git a/include/sbi/sbi_byteorder.h b/include/sbi/sbi_byteorder.h index db6eb2b..2b4981e 100644 --- a/include/sbi/sbi_byteorder.h +++ b/include/sbi/sbi_byteorder.h @@ -7,7 +7,12 @@ #ifndef __SBI_BYTEORDER_H__ #define __SBI_BYTEORDER_H__ -#include +#ifdef __ASSEMBLER__ +# define _conv_cast(type, val) (val) +#else +# include +# define _conv_cast(type, val) ((type)(val)) +#endif #define BSWAP16(x) ((((x) & 0x00ff) << 8) | \ (((x) & 0xff00) >> 8)) @@ -25,37 +30,37 @@ (((x) & 0xff00000000000000ULL) >> 56)) #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ /* CPU(little-endian) */ -#define cpu_to_be16(x) ((uint16_t)BSWAP16(x)) -#define cpu_to_be32(x) ((uint32_t)BSWAP32(x)) -#define cpu_to_be64(x) ((uint64_t)BSWAP64(x)) +#define cpu_to_be16(x) _conv_cast(uint16_t, BSWAP16(x)) +#define cpu_to_be32(x) _conv_cast(uint32_t, BSWAP32(x)) +#define cpu_to_be64(x) _conv_cast(uint64_t, BSWAP64(x)) -#define be16_to_cpu(x) ((uint16_t)BSWAP16(x)) -#define be32_to_cpu(x) ((uint32_t)BSWAP32(x)) -#define be64_to_cpu(x) ((uint64_t)BSWAP64(x)) +#define be16_to_cpu(x) _conv_cast(uint16_t, BSWAP16(x)) +#define be32_to_cpu(x) _conv_cast(uint32_t, BSWAP32(x)) +#define be64_to_cpu(x) _conv_cast(uint64_t, BSWAP64(x)) -#define cpu_to_le16(x) ((uint16_t)(x)) -#define cpu_to_le32(x) ((uint32_t)(x)) -#define cpu_to_le64(x) ((uint64_t)(x)) +#define cpu_to_le16(x) _conv_cast(uint16_t, (x)) +#define cpu_to_le32(x) _conv_cast(uint32_t, (x)) +#define cpu_to_le64(x) _conv_cast(uint64_t, (x)) -#define le16_to_cpu(x) ((uint16_t)(x)) -#define le32_to_cpu(x) ((uint32_t)(x)) -#define le64_to_cpu(x) ((uint64_t)(x)) +#define le16_to_cpu(x) _conv_cast(uint16_t, (x)) +#define le32_to_cpu(x) _conv_cast(uint32_t, (x)) +#define le64_to_cpu(x) _conv_cast(uint64_t, (x)) #else /* CPU(big-endian) */ -#define cpu_to_be16(x) ((uint16_t)(x)) -#define cpu_to_be32(x) ((uint32_t)(x)) -#define cpu_to_be64(x) ((uint64_t)(x)) +#define cpu_to_be16(x) _conv_cast(uint16_t, (x)) +#define cpu_to_be32(x) _conv_cast(uint32_t, (x)) +#define cpu_to_be64(x) _conv_cast(uint64_t, (x)) -#define be16_to_cpu(x) ((uint16_t)(x)) -#define be32_to_cpu(x) ((uint32_t)(x)) -#define be64_to_cpu(x) ((uint64_t)(x)) +#define be16_to_cpu(x) _conv_cast(uint16_t, (x)) +#define be32_to_cpu(x) _conv_cast(uint32_t, (x)) +#define be64_to_cpu(x) _conv_cast(uint64_t, (x)) -#define cpu_to_le16(x) ((uint16_t)BSWAP16(x)) -#define cpu_to_le32(x) ((uint32_t)BSWAP32(x)) -#define cpu_to_le64(x) ((uint64_t)BSWAP64(x)) +#define cpu_to_le16(x) _conv_cast(uint16_t, BSWAP16(x)) +#define cpu_to_le32(x) _conv_cast(uint32_t, BSWAP32(x)) +#define cpu_to_le64(x) _conv_cast(uint64_t, BSWAP64(x)) -#define le16_to_cpu(x) ((uint16_t)BSWAP16(x)) -#define le32_to_cpu(x) ((uint32_t)BSWAP32(x)) -#define le64_to_cpu(x) ((uint64_t)BSWAP64(x)) +#define le16_to_cpu(x) _conv_cast(uint16_t, BSWAP16(x)) +#define le32_to_cpu(x) _conv_cast(uint32_t, BSWAP32(x)) +#define le64_to_cpu(x) _conv_cast(uint64_t, BSWAP64(x)) #endif #if __riscv_xlen == 64