diff options
Diffstat (limited to 'roms/opensbi/include/sbi/sbi_const.h')
-rw-r--r-- | roms/opensbi/include/sbi/sbi_const.h | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/roms/opensbi/include/sbi/sbi_const.h b/roms/opensbi/include/sbi/sbi_const.h new file mode 100644 index 000000000..37866546a --- /dev/null +++ b/roms/opensbi/include/sbi/sbi_const.h @@ -0,0 +1,48 @@ +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2019 Western Digital Corporation or its affiliates. + * + * Authors: + * Anup Patel <anup.patel@wdc.com> + */ + +#ifndef __SBI_CONST_H__ +#define __SBI_CONST_H__ + +/* + * Some constant macros are used in both assembler and + * C code. Therefore we cannot annotate them always with + * 'UL' and other type specifiers unilaterally. We + * use the following macros to deal with this. + * + * Similarly, _AT() will cast an expression with a type in C, but + * leave it unchanged in asm. + */ + +/* clang-format off */ + +#ifdef __ASSEMBLY__ +#define _AC(X,Y) X +#define _AT(T,X) X +#else +#define __AC(X,Y) (X##Y) +#define _AC(X,Y) __AC(X,Y) +#define _AT(T,X) ((T)(X)) +#endif + +#define _UL(x) (_AC(x, UL)) +#define _ULL(x) (_AC(x, ULL)) + +#define _BITUL(x) (_UL(1) << (x)) +#define _BITULL(x) (_ULL(1) << (x)) + +#define UL(x) (_UL(x)) +#define ULL(x) (_ULL(x)) + +#define __STR(s) #s +#define STRINGIFY(s) __STR(s) + +/* clang-format on */ + +#endif |