|
@@ -0,0 +1,40 @@
|
|
|
+#ifndef _ASM_TYPES_H
|
|
|
+#define _ASM_TYPES_H
|
|
|
+
|
|
|
+#include <asm-generic/int-ll64.h>
|
|
|
+
|
|
|
+/*
|
|
|
+ * The C99 types uintXX_t that are usually defined in 'stdint.h' are not as
|
|
|
+ * unambiguous on ARM as you would expect. For the types below, there is a
|
|
|
+ * difference on ARM between GCC built for bare metal ARM, GCC built for glibc
|
|
|
+ * and the kernel itself, which results in build errors if you try to build with
|
|
|
+ * -ffreestanding and include 'stdint.h' (such as when you include 'arm_neon.h'
|
|
|
+ * in order to use NEON intrinsics)
|
|
|
+ *
|
|
|
+ * As the typedefs for these types in 'stdint.h' are based on builtin defines
|
|
|
+ * supplied by GCC, we can tweak these to align with the kernel's idea of those
|
|
|
+ * types, so 'linux/types.h' and 'stdint.h' can be safely included from the same
|
|
|
+ * source file (provided that -ffreestanding is used).
|
|
|
+ *
|
|
|
+ * int32_t uint32_t uintptr_t
|
|
|
+ * bare metal GCC long unsigned long unsigned int
|
|
|
+ * glibc GCC int unsigned int unsigned int
|
|
|
+ * kernel int unsigned int unsigned long
|
|
|
+ */
|
|
|
+
|
|
|
+#ifdef __INT32_TYPE__
|
|
|
+#undef __INT32_TYPE__
|
|
|
+#define __INT32_TYPE__ int
|
|
|
+#endif
|
|
|
+
|
|
|
+#ifdef __UINT32_TYPE__
|
|
|
+#undef __UINT32_TYPE__
|
|
|
+#define __UINT32_TYPE__ unsigned int
|
|
|
+#endif
|
|
|
+
|
|
|
+#ifdef __UINTPTR_TYPE__
|
|
|
+#undef __UINTPTR_TYPE__
|
|
|
+#define __UINTPTR_TYPE__ unsigned long
|
|
|
+#endif
|
|
|
+
|
|
|
+#endif /* _ASM_TYPES_H */
|