diff options
Diffstat (limited to 'include/lib')
-rw-r--r-- | include/lib/aarch64/arch.h | 2 | ||||
-rw-r--r-- | include/lib/cpus/errata_report.h | 2 | ||||
-rw-r--r-- | include/lib/smcc.h | 2 | ||||
-rw-r--r-- | include/lib/utils.h | 63 | ||||
-rw-r--r-- | include/lib/utils_def.h | 97 | ||||
-rw-r--r-- | include/lib/xlat_tables/xlat_tables_defs.h | 2 |
6 files changed, 103 insertions, 65 deletions
diff --git a/include/lib/aarch64/arch.h b/include/lib/aarch64/arch.h index 4b323d33..ef7241d3 100644 --- a/include/lib/aarch64/arch.h +++ b/include/lib/aarch64/arch.h @@ -31,7 +31,7 @@ #ifndef __ARCH_H__ #define __ARCH_H__ -#include <utils.h> +#include <utils_def.h> /******************************************************************************* * MIDR bit definitions diff --git a/include/lib/cpus/errata_report.h b/include/lib/cpus/errata_report.h index 6c6a844d..228ffea2 100644 --- a/include/lib/cpus/errata_report.h +++ b/include/lib/cpus/errata_report.h @@ -36,7 +36,7 @@ #include <arch.h> #include <arch_helpers.h> #include <spinlock.h> -#include <utils.h> +#include <utils_def.h> #if DEBUG void print_errata_status(void); diff --git a/include/lib/smcc.h b/include/lib/smcc.h index a4c4b6c0..d24d1905 100644 --- a/include/lib/smcc.h +++ b/include/lib/smcc.h @@ -31,7 +31,7 @@ #ifndef __SMCC_H__ #define __SMCC_H__ -#include <utils.h> +#include <utils_def.h> /******************************************************************************* * Bit definitions inside the function id as per the SMC calling convention diff --git a/include/lib/utils.h b/include/lib/utils.h index 279c9135..c085b7d5 100644 --- a/include/lib/utils.h +++ b/include/lib/utils.h @@ -31,67 +31,8 @@ #ifndef __UTILS_H__ #define __UTILS_H__ -/* Compute the number of elements in the given array */ -#define ARRAY_SIZE(a) \ - (sizeof(a) / sizeof((a)[0])) - -#define IS_POWER_OF_TWO(x) \ - (((x) & ((x) - 1)) == 0) - -#define SIZE_FROM_LOG2_WORDS(n) (4 << (n)) - -#define BIT(nr) (1UL << (nr)) - -#define MIN(x, y) __extension__ ({ \ - __typeof__(x) _x = (x); \ - __typeof__(y) _y = (y); \ - (void)(&_x == &_y); \ - _x < _y ? _x : _y; \ -}) - -#define MAX(x, y) __extension__ ({ \ - __typeof__(x) _x = (x); \ - __typeof__(y) _y = (y); \ - (void)(&_x == &_y); \ - _x > _y ? _x : _y; \ -}) - -/* - * The round_up() macro rounds up a value to the given boundary in a - * type-agnostic yet type-safe manner. The boundary must be a power of two. - * In other words, it computes the smallest multiple of boundary which is - * greater than or equal to value. - * - * round_down() is similar but rounds the value down instead. - */ -#define round_boundary(value, boundary) \ - ((__typeof__(value))((boundary) - 1)) - -#define round_up(value, boundary) \ - ((((value) - 1) | round_boundary(value, boundary)) + 1) - -#define round_down(value, boundary) \ - ((value) & ~round_boundary(value, boundary)) - -/* - * Evaluates to 1 if (ptr + inc) overflows, 0 otherwise. - * Both arguments must be unsigned pointer values (i.e. uintptr_t). - */ -#define check_uptr_overflow(ptr, inc) \ - (((ptr) > UINTPTR_MAX - (inc)) ? 1 : 0) - -/* - * For those constants to be shared between C and other sources, apply a 'ull' - * suffix to the argument only in C, to avoid undefined or unintended behaviour. - * - * The GNU assembler and linker do not support the 'ull' suffix (it causes the - * build process to fail) therefore the suffix is omitted when used in linker - * scripts and assembler files. -*/ -#if defined(__LINKER__) || defined(__ASSEMBLY__) -# define ULL(_x) (_x) -#else -# define ULL(_x) (_x##ull) +#if !ERROR_DEPRECATED +#include <utils_def.h> #endif /* diff --git a/include/lib/utils_def.h b/include/lib/utils_def.h new file mode 100644 index 00000000..202f0508 --- /dev/null +++ b/include/lib/utils_def.h @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2016-2017, ARM Limited and Contributors. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * Neither the name of ARM nor the names of its contributors may be used + * to endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT 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 SUCH DAMAGE. + */ + +#ifndef __UTILS_DEF_H__ +#define __UTILS_DEF_H__ + +/* Compute the number of elements in the given array */ +#define ARRAY_SIZE(a) \ + (sizeof(a) / sizeof((a)[0])) + +#define IS_POWER_OF_TWO(x) \ + (((x) & ((x) - 1)) == 0) + +#define SIZE_FROM_LOG2_WORDS(n) (4 << (n)) + +#define BIT(nr) (1UL << (nr)) + +#define MIN(x, y) __extension__ ({ \ + __typeof__(x) _x = (x); \ + __typeof__(y) _y = (y); \ + (void)(&_x == &_y); \ + _x < _y ? _x : _y; \ +}) + +#define MAX(x, y) __extension__ ({ \ + __typeof__(x) _x = (x); \ + __typeof__(y) _y = (y); \ + (void)(&_x == &_y); \ + _x > _y ? _x : _y; \ +}) + +/* + * The round_up() macro rounds up a value to the given boundary in a + * type-agnostic yet type-safe manner. The boundary must be a power of two. + * In other words, it computes the smallest multiple of boundary which is + * greater than or equal to value. + * + * round_down() is similar but rounds the value down instead. + */ +#define round_boundary(value, boundary) \ + ((__typeof__(value))((boundary) - 1)) + +#define round_up(value, boundary) \ + ((((value) - 1) | round_boundary(value, boundary)) + 1) + +#define round_down(value, boundary) \ + ((value) & ~round_boundary(value, boundary)) + +/* + * Evaluates to 1 if (ptr + inc) overflows, 0 otherwise. + * Both arguments must be unsigned pointer values (i.e. uintptr_t). + */ +#define check_uptr_overflow(ptr, inc) \ + (((ptr) > UINTPTR_MAX - (inc)) ? 1 : 0) + +/* + * For those constants to be shared between C and other sources, apply a 'ull' + * suffix to the argument only in C, to avoid undefined or unintended behaviour. + * + * The GNU assembler and linker do not support the 'ull' suffix (it causes the + * build process to fail) therefore the suffix is omitted when used in linker + * scripts and assembler files. +*/ +#if defined(__LINKER__) || defined(__ASSEMBLY__) +# define ULL(_x) (_x) +#else +# define ULL(_x) (_x##ull) +#endif + +#endif /* __UTILS_DEF_H__ */ diff --git a/include/lib/xlat_tables/xlat_tables_defs.h b/include/lib/xlat_tables/xlat_tables_defs.h index 3105d7aa..032ce925 100644 --- a/include/lib/xlat_tables/xlat_tables_defs.h +++ b/include/lib/xlat_tables/xlat_tables_defs.h @@ -31,7 +31,7 @@ #ifndef __XLAT_TABLES_DEFS_H__ #define __XLAT_TABLES_DEFS_H__ -#include <utils.h> +#include <utils_def.h> /* Miscellaneous MMU related constants */ #define NUM_2MB_IN_GB (1 << 9) |