aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/apos/assert.h7
-rw-r--r--include/apos/debug.h289
-rw-r--r--include/apos/mem.h6
-rw-r--r--include/apos/types.h305
4 files changed, 559 insertions, 48 deletions
diff --git a/include/apos/assert.h b/include/apos/assert.h
index 429134e..3255481 100644
--- a/include/apos/assert.h
+++ b/include/apos/assert.h
@@ -23,8 +23,7 @@
#define catastrophic_assert(x) \
do { \
if (unlikely(!(x))) { \
- error("catastrophic assertion failed: %s\n", \
- QUOTE(x)); \
+ error("catastrophic assertion failed: " QUOTE(x) "\n"); \
while (1) { \
} \
} \
@@ -33,7 +32,7 @@
#define hard_assert(x, r) \
{ \
if (unlikely(!(x))) { \
- warn("hard assertion failed: %s\n", QUOTE(x)); \
+ warn("hard assertion failed: " QUOTE(x) "\n"); \
return r; \
} \
}
@@ -41,7 +40,7 @@
#define soft_assert(x) \
do { \
if (unlikely(!(x))) { \
- info("soft assertion failed: %s\n", QUOTE(x)); \
+ info("soft assertion failed: " QUOTE(x) "\n"); \
} \
} while (0);
#else
diff --git a/include/apos/debug.h b/include/apos/debug.h
index 88668ff..cb46ba7 100644
--- a/include/apos/debug.h
+++ b/include/apos/debug.h
@@ -4,158 +4,399 @@
/**
* @file debug.h
* Debug printing.
+ *
+ * Note that 'Integer format specifier' means "%i", which is identical to "%d"
+ * in the context of outputting integers.
*/
#include <apos/attrs.h>
#include <apos/pmem.h>
#include <arch/vmem.h>
+/** @name Internal. */
+/** @{ */
+
+/** Long integer prefix. Approximate, but probably good enough */
#if _LP64
-/* approximate, but probably good enough */
#define __PRI64_PREFIX "l"
-#define __PRIPTR_PREFIX "l"
#else
#define __PRI64_PREFIX "ll"
+#endif
+
+/** Long pointer in integer type prefix. */
+#if _LP64
+#define __PRIPTR_PREFIX "l"
+#else
#define __PRIPTR_PREFIX
#endif
-/* Decimal notation. */
+/** @} */
+
+/** @name Decimal format specifiers. */
+/** @{ */
+
+/** Decimal format specifief for \ref int8_t */
#define PRId8 "d"
+
+/** Decimal format specifier for \ref int16_t */
#define PRId16 "d"
+
+/** Decimal format specifier for \ref int32_t */
#define PRId32 "d"
+
+/** Decimal format specifier for int16_t */
#define PRId64 __PRI64_PREFIX "d"
+/** Decimal format specifier for \ref int_least8_t. */
#define PRIdLEAST8 "d"
+
+/** Decimal format specifier for \ref int_least16_t. */
#define PRIdLEAST16 "d"
+
+/** Decimal format specifier for \ref int_least32_t. */
#define PRIdLEAST32 "d"
+
+/** Decimal format specifier for \ref int_least64_t. */
#define PRIdLEAST64 __PRI64_PREFIX "d"
+/** Decimal format specifier for \ref int_fast8_t. */
#define PRIdFAST8 "d"
+
+/** Decimal format specifier for \ref int_fast16_t. */
#define PRIdFAST16 __PRIPTR_PREFIX "d"
+
+/** Decimal format specifier for \ref int_fast32_t. */
#define PRIdFAST32 __PRIPTR_PREFIX "d"
+
+/** Decimal format specifier for \ref int_fast64_t. */
#define PRIdFAST64 __PRI64_PREFIX "d"
+/** Decimal format specifier for \ref intmax_t. */
+#define PRIdMAX __PRI64_PREFIX "d"
+
+/** Decimal format specifier for \ref intptr_t. */
+#define PRIdPTR __PRIPTR_PREFIX "d"
+
+/** @} */
+
+/** @name Integer format specifiers. */
+/** @{ */
+
+/** Integer format specifier for \ref int8_t. */
#define PRIi8 "i"
+
+/** Integer format specifier for \ref int16_t. */
#define PRIi16 "i"
+
+/** Integer format specifier for \ref int32_t. */
#define PRIi32 "i"
+
+/** Integer format specifier for \ref int64_t. */
#define PRIi64 __PRI64_PREFIX "i"
+/** Integer format specifier for \ref int_least8_t. */
#define PRIiLEAST8 "i"
+
+/** Integer format specifier for \ref int_least16_t. */
#define PRIiLEAST16 "i"
+
+/** Integer format specifier for \ref int_least32_t. */
#define PRIiLEAST32 "i"
+
+/** Integer format specifier for \ref int_least64_t. */
#define PRIiLEAST64 __PRI64_PREFIX "i"
+/** Integer format specifier for \ref int_fast8_t. */
#define PRIiFAST8 "i"
+
+/** Integer format specifier for \ref int_fast16_t. */
#define PRIiFAST16 __PRIPTR_PREFIX "i"
+
+/** Integer format specifier for \ref int_fast32_t. */
#define PRIiFAST32 __PRIPTR_PREFIX "i"
+
+/** Integer format specifier for \ref int_fast64_t. */
#define PRIiFAST64 __PRI64_PREFIX "i"
-/* Octal notation. */
+/** Integer format specifier for \ref intmax_t. */
+#define PRIiMAX __PRI64_PREFIX "i"
+
+/** Integer format specifier for \ref intptr_t. */
+#define PRIiPTR __PRIPTR_PREFIX "i"
+
+/** @} */
+
+/** @name Octal format specifiers. */
+/** @{ */
+
+/** Octal format specifier for \ref int8_t. */
#define PRIo8 "o"
+
+/** Octal format specifier for \ref int16_t. */
#define PRIo16 "o"
+
+/** Octal format specifier for \ref int32_t. */
#define PRIo32 "o"
+
+/** Octal format specifier for \ref int64_t. */
#define PRIo64 __PRI64_PREFIX "o"
+/** Octal format specifier for \ref int_least8_t. */
#define PRIoLEAST8 "o"
+
+/** Octal format specifier for \ref int_least16_t. */
#define PRIoLEAST16 "o"
+
+/** Octal format specifier for \ref int_least32_t. */
#define PRIoLEAST32 "o"
+
+/** Octal format specifier for \ref int_least64_t. */
#define PRIoLEAST64 __PRI64_PREFIX "o"
+/** Octal format specifier for \ref int_fast8_t. */
#define PRIoFAST8 "o"
+
+/** Octal format specifier for \ref int_fast16_t. */
#define PRIoFAST16 __PRIPTR_PREFIX "o"
+
+/** Octal format specifier for \ref int_fast32_t. */
#define PRIoFAST32 __PRIPTR_PREFIX "o"
+
+/** Octal format specifier for \ref int_fast64_t. */
#define PRIoFAST64 __PRI64_PREFIX "o"
-/* Unsigned integers. */
+/** Octal format specifier for \ref uintmax_t. */
+#define PRIoMAX __PRI64_PREFIX "o"
+
+/** Octal format specifier for \ref uintptr_t. */
+#define PRIoPTR __PRIPTR_PREFIX "o"
+
+/** @} */
+
+/** @name Unsigned decimal format specifiers. */
+/** @{ */
+
+/** Unsigned decimal format specifier for \ref uint8_t. */
#define PRIu8 "u"
+
+/** Unsigned decimal format specifier for \ref uint16_t. */
#define PRIu16 "u"
+
+/** Unsigned decimal format specifier for \ref uint32_t. */
#define PRIu32 "u"
+
+/** Unsigned decimal format specifier for \ref uint64_t. */
#define PRIu64 __PRI64_PREFIX "u"
+/** Unsigned decimal format specifier for \ref uint_least8_t. */
#define PRIuLEAST8 "u"
+
+/** Unsigned decimal format specifier for \ref uint_least16_t. */
#define PRIuLEAST16 "u"
+
+/** Unsigned decimal format specifier for \ref uint_least32_t. */
#define PRIuLEAST32 "u"
+
+/** Unsigned decimal format specifier for \ref uint_least64_t. */
#define PRIuLEAST64 __PRI64_PREFIX "u"
+/** Unsigned decimal format specifier for \ref uint_fast8_t. */
#define PRIuFAST8 "u"
+
+/** Unsigned decimal format specifier for \ref uint_fast16_t. */
#define PRIuFAST16 __PRIPTR_PREFIX "u"
+
+/** Unsigned decimal format specifier for \ref uint_fast32_t. */
#define PRIuFAST32 __PRIPTR_PREFIX "u"
+
+/** Unsigned decimal format specifier for \ref uint_fast64_t. */
#define PRIuFAST64 __PRI64_PREFIX "u"
-/* lowercase hexadecimal notation. */
+/** Unsigned decimal format specifier for \ref uintmax_t. */
+#define PRIuMAX __PRI64_PREFIX "u"
+
+/** Unsigned decimal format specifier for \ref uintptr_t. */
+#define PRIuPTR __PRIPTR_PREFIX "u"
+
+/** @} */
+
+/** @name Hex format specifiers. */
+/** @{ */
+
+/** Hex format specifier for \ref uint8_t. */
#define PRIx8 "x"
+
+/** Hex format specifier for \ref uint16_t. */
#define PRIx16 "x"
+
+/** Hex format specifier for \ref uint32_t. */
#define PRIx32 "x"
+
+/** Hex format specifier for \ref uint64_t. */
#define PRIx64 __PRI64_PREFIX "x"
+/** Hex format specifier for \ref uint_least8_t. */
#define PRIxLEAST8 "x"
+
+/** Hex format specifier for \ref uint_least16_t. */
#define PRIxLEAST16 "x"
+
+/** Hex format specifier for \ref uint_least32_t. */
#define PRIxLEAST32 "x"
+
+/** Hex format specifier for \ref uint_least64_t. */
#define PRIxLEAST64 __PRI64_PREFIX "x"
+/** Hex format specifier for \ref uint_fast8_t. */
#define PRIxFAST8 "x"
+
+/** Hex format specifier for \ref uint_fast16_t. */
#define PRIxFAST16 __PRIPTR_PREFIX "x"
+
+/** Hex format specifier for \ref uint_fast32_t. */
#define PRIxFAST32 __PRIPTR_PREFIX "x"
+
+/** Hex format specifier for \ref uint_fast64_t. */
#define PRIxFAST64 __PRI64_PREFIX "x"
-/* Binary notation */
+/** Hex format specifier for \ref uintmax_t. */
+#define PRIxMAX __PRI64_PREFIX "x"
+
+/** Hex format specifier for \ref uintptr_t. */
+#define PRIxPTR __PRIPTR_PREFIX "x"
+
+/** @} */
+
+/** @name Binary notation */
+/** @{ */
+
+/** Binary format specifier for \ref uint8_t. */
#define PRIX8 "X"
+
+/** Binary format specifier for \ref uint16_t. */
#define PRIX16 "X"
+
+/** Binary format specifier for \ref uint32_t. */
#define PRIX32 "X"
+
+/** Binary format specifier for \ref uint64_t. */
#define PRIX64 __PRI64_PREFIX "X"
+/** Binary format specifier for \ref uint_least8_t. */
#define PRIXLEAST8 "X"
+
+/** Binary format specifier for \ref uint_least16_t. */
#define PRIXLEAST16 "X"
+
+/** Binary format specifier for \ref uint_least32_t. */
#define PRIXLEAST32 "X"
+
+/** Binary format specifier for \ref uint_least64_t. */
#define PRIXLEAST64 __PRI64_PREFIX "X"
+/** Binary format specifier for \ref uint_fast8_t. */
#define PRIXFAST8 "X"
+
+/** Binary format specifier for \ref uint_fast16_t. */
#define PRIXFAST16 __PRIPTR_PREFIX "X"
+
+/** Binary format specifier for \ref uint_fast32_t. */
#define PRIXFAST32 __PRIPTR_PREFIX "X"
+
+/** Binary format specifier for \ref uint_fast64_t. */
#define PRIXFAST64 __PRI64_PREFIX "X"
-/* Macros for printing `intmax_t' and `uintmax_t'. */
-#define PRIdMAX __PRI64_PREFIX "d"
-#define PRIiMAX __PRI64_PREFIX "i"
-#define PRIoMAX __PRI64_PREFIX "o"
-#define PRIuMAX __PRI64_PREFIX "u"
-#define PRIxMAX __PRI64_PREFIX "x"
+/** Binary format specifier for \ref uintmax_t. */
#define PRIXMAX __PRI64_PREFIX "X"
-/* Macros for printing `intptr_t' and `uintptr_t'. */
-#define PRIdPTR __PRIPTR_PREFIX "d"
-#define PRIiPTR __PRIPTR_PREFIX "i"
-#define PRIoPTR __PRIPTR_PREFIX "o"
-#define PRIuPTR __PRIPTR_PREFIX "u"
-#define PRIxPTR __PRIPTR_PREFIX "x"
+/** Binary format specifier for \ref uintptr_t. */
#define PRIXPTR __PRIPTR_PREFIX "X"
+/** @} */
+
#if defined(DEBUG)
+/** Serial devices supported. */
enum serial_dev {
- /* only the NS16550A and compatible at the moment */
+ /** NS16550A and compatible. Currently the only supported serial device. */
NS16550A,
};
-void __fmt(1, 2) dbg(const char *fmt, ...);
+/**
+ * dbg, apos equivalent of printf.
+ *
+ * @param fmt Format string. Integer subset of normal printf formatting.
+ */
+void dbg(const char *fmt, ...) __fmt(1, 2);
+/**
+ * Initialize debugging, set up serial driver etc.
+ *
+ * @param fdt Pointer to global FDT.
+ */
void init_dbg(const void *fdt);
+/**
+ * Setup debugging in direct mapping context.
+ */
void setup_dmap_dbg();
-void setup_io_dbg(struct vmem *b);
-void setup_dbg(pm_t pt, enum serial_dev dev);
-struct dbg_info dbg_from_fdt(const void *fdt);
+/**
+ * Setup debugging in virtual memory context.
+ *
+ * @param vmem Virtual memory space to use.
+ */
+void setup_io_dbg(struct vmem *vmem);
+
+/** @name Internal. */
+/** @{ */
+/**
+ * Format to append to helper debugging classes.
+ * See \ref bug(), \ref warn(), \ref info() and \ref error().
+ */
#define COMMON_FORMAT "[%s] %s:%d\n\t"
+
+/**
+ * Helper for helper classes.
+ * See \ref bug(), \ref warn(), \ref info(), \ref error().
+ */
#define COMMON_ARGS(s) s, __FILE__, __LINE__
+
+/** @} */
+
+/**
+ * Print a bug message to the serial lines.
+ *
+ * @param fmt Message, integer subset of regular printf.
+ */
#define bug(fmt, ...) dbg(COMMON_FORMAT fmt, COMMON_ARGS("BUG"),##__VA_ARGS__)
+
+/**
+ * Print a warning message to the serial lines.
+ *
+ * @param fmt Message, integer subset of regular printf.
+ */
#define warn(fmt, ...) dbg(COMMON_FORMAT fmt, COMMON_ARGS("WARN"),##__VA_ARGS__)
+
+/**
+ * Print an informational message to the serial lines.
+ *
+ * @param fmt Message, integer subset of regular printf.
+ */
#define info(fmt, ...) dbg(COMMON_FORMAT fmt, COMMON_ARGS("INFO"),##__VA_ARGS__)
+
+/**
+ * Prnt an error message to the serial lines.
+ *
+ * @param fmt Message, integer subset of regular printf.
+ */
#define error(fmt, ...) \
dbg(COMMON_FORMAT fmt, COMMON_ARGS("ERROR"),##__VA_ARGS__)
#else
+/* already documented in previous #if block, let's hope Doxygen doesn't start
+ * complaining :) */
#define dbg(...)
#define dbg_init(...)
#define dbg_from_fdt(...)
diff --git a/include/apos/mem.h b/include/apos/mem.h
index b6d76c1..1486400 100644
--- a/include/apos/mem.h
+++ b/include/apos/mem.h
@@ -48,11 +48,11 @@
__page((x) + BASE_PAGE_SIZE))
#define __bytes(x) (__addr(x))
-/** If memory region is used or not */
+/** Memory region is used. */
#define MR_USED (1 << 8)
-/** If memory region is shared */
+/** Memory region is shared. */
#define MR_SHARED (1 << 9)
-/** Owner of shared region */
+/** Owner of shared region. */
#define MR_OWNED (1 << 10)
/** Copy on write. */
#define MR_COW (1 << 11)
diff --git a/include/apos/types.h b/include/apos/types.h
index 97f663b..5f35ee8 100644
--- a/include/apos/types.h
+++ b/include/apos/types.h
@@ -4,207 +4,478 @@
/**
* @file types.h
* Shorthands for types, similar to stdint.h.
+ *
+ * Implementation detail: Note that according to the C spec, intX_t are optional.
+ * Will have to keep an eye out for architectures where they aren't implemented,
+ * but for now this is likely good enough.
*/
+/** Bool. */
typedef _Bool bool;
+/** True. */
#define true 1
+/** False. */
#define false 0
+/** Type capable of holding the difference between two pointers. */
typedef __PTRDIFF_TYPE__ ptrdiff_t;
+
+/** Type capable of holding a wide char. Unused by the kernel. */
typedef __WCHAR_TYPE__ wchar_t;
+
+/** Type capable of holding a \ref wchar_t and WEOF. Unused by the kernel. */
typedef __WINT_TYPE__ wint_t;
+
+/** Maximum width signed integer type. */
typedef __INTMAX_TYPE__ intmax_t;
+
+/** Maximum width unsigned integer type. */
typedef __UINTMAX_TYPE__ uintmax_t;
+
+/** 8bit signed integer type. */
typedef __INT8_TYPE__ int8_t;
+
+/** 16bit signed integer type. */
typedef __INT16_TYPE__ int16_t;
+
+/** 32bit signed integer type. */
typedef __INT32_TYPE__ int32_t;
+
+/** 64bit signed integer type. */
typedef __INT64_TYPE__ int64_t;
+
+/** 8bit unsigned integer type. */
typedef __UINT8_TYPE__ uint8_t;
+
+/** 16bit unsigned integer type. */
typedef __UINT16_TYPE__ uint16_t;
+
+/** 32bit unsigned integer type. */
typedef __UINT32_TYPE__ uint32_t;
+
+/** 64bit unsigned integer type. */
typedef __UINT64_TYPE__ uint64_t;
+
+/** Smallest signed integer type at least 8 bits wide. */
typedef __INT_LEAST8_TYPE__ int_least8_t;
+
+/** Smallest signed integer type at least 16 bits wide. */
typedef __INT_LEAST16_TYPE__ int_least16_t;
+
+/** Smallest signed integer type at least 32 bits wide. */
typedef __INT_LEAST32_TYPE__ int_least32_t;
+
+/** Smallest signed integer type at least 64 bits wide. */
typedef __INT_LEAST64_TYPE__ int_least64_t;
+
+/** Smallest unsigned integer type at least 8 bits wide. */
typedef __UINT_LEAST8_TYPE__ uint_least8_t;
+
+/** Smallest unsigned integer type at least 16 bits wide. */
typedef __UINT_LEAST16_TYPE__ uint_least16_t;
+
+/** Smallest unsigned integer type at least 32 bits wide. */
typedef __UINT_LEAST32_TYPE__ uint_least32_t;
+
+/** Smallest unsigned integer type at least 64 bits wide. */
typedef __UINT_LEAST64_TYPE__ uint_least64_t;
+
+/** Fastest signed integer type at least 8 bits wide. */
typedef __INT_FAST8_TYPE__ int_fast8_t;
+
+/** Fastest signed integer type at least 16 bits wide. */
typedef __INT_FAST16_TYPE__ int_fast16_t;
+
+/** Fastest signed integer type at least 32 bits wide. */
typedef __INT_FAST32_TYPE__ int_fast32_t;
+
+/** Fastest signed integer type at least 64 bits wide. */
typedef __INT_FAST64_TYPE__ int_fast64_t;
+
+/** Fastest unsigned integer type at least 8 bits wide. */
typedef __UINT_FAST8_TYPE__ uint_fast8_t;
+
+/** Fastest unsigned integer type at least 16 bits wide. */
typedef __UINT_FAST16_TYPE__ uint_fast16_t;
+
+/** Fastest unsigned integer type at least 32 bits wide. */
typedef __UINT_FAST32_TYPE__ uint_fast32_t;
+
+/** Fastest unsigned integer type at least 64 bits wide. */
typedef __UINT_FAST64_TYPE__ uint_fast64_t;
+
+/** Signed integer type capable of holding a pointer. */
typedef __INTPTR_TYPE__ intptr_t;
+
+/** Unsigned integer type capable of holding a pointer. */
typedef __UINTPTR_TYPE__ uintptr_t;
#if __SIZE_WIDTH__ == 64
+/** Largest possible unsigned index an array could use. */
typedef uint64_t size_t;
+
+/** Largest possible signed index an array could use. */
typedef int64_t ssize_t;
#else
+/** Largest possible unsigned index an array could use. */
typedef uint32_t size_t;
+
+/** Largest possible signed index an array could use. */
typedef int32_t ssize_t;
#endif
+/** Expands to integer constant of type \ref int8_t. */
#define INT8_C __INT8_C
+
+/** Expands to integer constant of type \ref int16_t. */
#define INT16_C __INT16_C
+
+/** Expands to integer constant of type \ref int32_t. */
#define INT32_C __INT32_C
+/** Expands to integer constant of type \ref int64_t. */
#define INT64_C __INT64_C
+
+/** Expands to integer constant of type \ref uint8_t. */
#define UINT8_C __UINT8_C
+
+/** Expands to integer constant of type \ref uint16_t. */
#define UINT16_C __UINT16_C
+
+/** Expands to integer constant of type \ref uint32_t. */
#define UINT32_C __UINT32_C
+
+/** Expands to integer constant of type \ref uint64_t. */
#define UINT64_C __UINT64_C
+
+/** Expands to integer constant of type \ref intmax_t. */
#define INTMAX_C __INTMAX_C
+
+/** Expands to integer constant of type \ref uintmax_t. */
#define UINTMAX_C __UINTMAX_C
+/** Number of bits in a byte. */
#define CHAR_BIT __CHAR_BIT__
+/** Largest value a signed char can have. */
#define SCHAR_MAX __SCHAR_MAX__
+
+/** Smallest value a signed char can have. */
#define SCHAR_MIN (-__SCHAR_MAX - 1)
+
+/** Largest value an unsigned char can have. */
#define UCHAR_MAX (2 * __SCHAR_MAX__ - 1)
#if defined(__CHAR_UNSIGNED__)
+/** Smallest value a char can have. */
#define CHAR_MIN 0
+
+/** Largest value a char can have. */
#define CHAR_MAX UCHAR_MAX
#else
+/** Smallest value a char can have. */
#define CHAR_MIN SCHAR_MIN
+
+/** Largest value a char can have. */
#define CHAR_MAX SCHAR_MAX
#endif
-/* probably not necessary? */
+/**
+ * Maximum number of bytes in a multibyte character.
+ * Arbitrary, as far as I can tell.
+ */
#define MB_LEN_MAX 16
+/** Largest value a signed short can have. */
#define SHRT_MAX __SHRT_MAX__
+
+/** Smallest value a signed short can have. */
#define SHRT_MIN (-__SHRT_MAX - 1)
+
+/** Largest value an unsigned short can have. */
#define USHRT_MAX (2 * __SHRT_MAX + 1)
+/** Largest value a signed int can have. */
#define INT_MAX __INT_MAX__
+
+/** Smallest value a signed int can have. */
#define INT_MIN (-__INT_MAX__ - 1)
+
+/** Largest value an unsigned int can have. */
#define UINT_MAX (2 * __INT_MAX__ + 1)
+/** Largest value a signed long can have. */
#define LONG_MAX __LONG__MAX__
+
+/** Smallest value a signed long can have. */
#define LONG_MIN (-__LONG_MAX__ - 1)
+
+/** Largest value an unsigned long can have. */
#define ULONG_MAX (2 * __INT_MAX__ + 1)
+/** Largest value a signed long long can have. */
#define LLONG_MAX __LONG_LONG_MAX__
+
+/** Smallest value a signed long long can have. */
#define LLONG_MIN (-__LONG_LONG_MAX__ - 1)
+
+/** Largest value an unsigned long long can have. */
#define ULLONG_MAX (2 * __LONG_LONG_MAX__ + 1)
+/** Largest value an \ref int8_t can have. */
#define INT8_MAX __INT8_MAX__
+
+/** Smallest value an \ref int8_t can have. */
#define INT8_MIN (-__INT8_MAX__ - 1)
+
+/** Largest value an \ref int8_t can have. */
#define UINT8_MAX __UINT8_MAX__
+/** Largest value an \ref int16_t can have. */
#define INT16_MAX __INT16_MAX__
+
+/** Smallest value an \ref int16_t can have. */
#define INT16_MIN (-__INT16_MAX__ - 1)
+
+/** Largest value an \ref uint16_t can have. */
#define UINT16_MAX __UINT16_MAX__
+/** Largest value an \ref int32_t can have. */
#define INT32_MAX __INT32_MAX__
+
+/** Smallest value an \ref int32_t can have. */
#define INT32_MIN (-__INT32_MAX__ - 1)
+
+/** Largest value a \ref uint16_t can have. */
#define UINT32_MAX __UINT32_MAX__
+/** Largest value an \ref int64_t can have. */
#define INT64_MAX __INT64_MAX__
+
+/** Smallest value an \ref int64_t can have. */
#define INT64_MIN (-__INT64_MAX__ - 1)
+
+/** Largest value an \ref uint64_t can have. */
#define UINT64_MAX __UINT64_MAX__
+/** Largest value an \ref int_least8_t can have. */
#define INT_LEAST8_MAX __INT_LEAST8_MAX__
+
+/** Smallest value an \ref int_least8_t can have. */
#define INT_LEAST8_MIN (-__INT_LEAST8_MAX__ - 1)
+
+/** Largest value an \ref int_least8_t can have. */
#define UINT_LEAST8_MAX __UINT_LEAST8_MAX__
+/** Largest value an \ref int_least16_t can have. */
#define INT_LEAST16_MAX __INT_LEAST16_MAX__
+
+/** Smallest value an \ref int_least16_t can have. */
#define INT_LEAST16_MIN (-__INT_LEAST16_MAX__ - 1)
+
+/** Largest value an \ref int_least16_t can have. */
#define UINT_LEAST16_MAX __UINT_LEAST16_MAX__
+/** Largest value an \ref int_least32_t can have. */
#define INT_LEAST32_MAX __INT_LEAST32_MAX__
+
+/** Smallest value an \ref int_least32_t can have. */
#define INT_LEAST32_MIN (-__INT_LEAST32_MAX__ - 1)
+
+/** Largest value a \ref uint_least32_t can have. */
#define UINT_LEAST32_MAX __UINT_LEAST32_MAX__
+/** Largest value an \ref int_least64_t can have. */
#define INT_LEAST64_MAX __INT_LEAST64_MAX__
+
+/** Smallest value an \ref int_least64_t can have. */
#define INT_LEAST64_MIN (-__INT_LEAST64_MAX__ - 1)
+
+/** Largest value a \ref uint_least64_t can have. */
#define UINT_LEAST64_MAX __UINT_LEAST64_MAX__
+/** Largest value an \ref int_fast8_t can have. */
#define INT_FAST8_MAX __INT_FAST8_MAX__
+
+/** Smallest value an \ref int_fast8_t can have. */
#define INT_FAST8_MIN (-__INT_FAST8_MAX__ - 1)
+
+/** Largest value a \ref uint_fast8_t can have. */
#define UINT_FAST8_MAX __UINT_FAST8_MAX__
+/** Largest value an \ref int_fast16_t can have. */
#define INT_FAST16_MAX __INT_FAST16_MAX__
+
+/** Smallest value an \ref int_fast16_t can have. */
#define INT_FAST16_MIN (-__INT_FAST16_MAX__ - 1)
+
+/** Largest value a \ref uint_fast16_t can have. */
#define UINT_FAST16_MAX __UINT_FAST16_MAX__
+/** Largest value an \ref int_fast32_t can have. */
#define INT_FAST32_MAX __INT_FAST32_MAX__
+
+/** Smallest value an \ref int_fast32_t can have. */
#define INT_FAST32_MIN (-__INT_FAST32_MAX__ - 1)
+
+/** Largest value a \ref int_fast32_t can have. */
#define UINT_FAST32_MAX __UINT_FAST32_MAX__
+/** Largest value an \ref int_fast64_t can have. */
#define INT_FAST64_MAX __INT_FAST64_MAX__
+
+/** Smallest value an \ref int_fast64_t can have. */
#define INT_FAST64_MIN (-__INT_FAST64_MAX__ - 1)
+
+/** Largest value a \ref int_fast64_t can have. */
#define UINT_FAST64_MAX __UINT_FAST64_MAX__
+/** Largest value an \ref intptr_t can have. */
#define INTPTR_MAX __INTPTR_MAX__
+
+/** Smallest value an \ref intptr_t can have. */
#define INTPTR_MIN (-__INTPTR_MAX__ - 1)
+
+/** Largest value a \ref uintptr_t can have. */
#define UINTPTR_MAX __UINTPTR_MAX__
+/** Largest value an \ref intmax_t can have. */
#define INTMAX_MAX __INTMAX_MAX__
+
+/** Smallest value an \ref intmax_t can have. */
#define INTMAX_MIN (-__INTMAX_MAX__ - 1)
+
+/** Largest value a \ref uintmax_t can have. */
#define UINTMAX_MAX __UINTMAX_MAX__
+/** Width of \ref int8_t. */
#define INT8_WIDTH 8
+
+/** Width of \ref int16_t. */
#define INT16_WIDTH 16
+
+/** Width of \ref int32_t. */
#define INT32_WIDTH 32
+
+/** Width of \ref int64_t. */
#define INT64_WIDTH 64
+
+/** Width of \ref uint8_t. */
#define UINT8_WIDTH 8
+
+/** Width of \ref uint16_t. */
#define UINT16_WIDTH 16
+
+/** Width of \ref uint32_t. */
#define UINT32_WIDTH 32
+
+/** Width of \ref uint64_t. */
#define UINT64_WIDTH 64
+/** Width of \ref int_fast8_t. */
#define INT_FAST8_WIDTH __INT_FAST8_WIDTH__
+
+/** Width of \ref int_fast16_t. */
#define INT_FAST16_WIDTH __INT_FAST16_WIDTH__
+
+/** Width of \ref int_fast32_t. */
#define INT_FAST32_WIDTH __INT_FAST32_WIDTH__
+
+/** Width of \ref int_fast64_t. */
#define INT_FAST64_WIDTH __INT_FAST64_WIDTH__
+
+/** Width of \ref uint_fast8_t. */
#define UINT_FAST8_WIDTH __INT_FAST8_WIDTH__
+
+/** Width of \ref uint_fast16_t. */
#define UINT_FAST16_WIDTH __INT_FAST16_WIDTH__
+
+/** Width of \ref uint_fast32_t. */
#define UINT_FAST32_WIDTH __INT_FAST32_WIDTH__
+
+/** Width of \ref uint_fast64_t. */
#define UINT_FAST64_WIDTH __INT_FAST64_WIDTH__
+/** Width of \ref int_least8_t. */
#define INT_LEAST8_WIDTH __INT_LEAST8_WIDTH__
+
+/** Width of \ref int_least16_t. */
#define INT_LEAST16_WIDTH __INT_LEAST16_WIDTH__
+
+/** Width of \ref int_least32_t. */
#define INT_LEAST32_WIDTH __INT_LEAST32_WIDTH__
+
+/** Width of \ref int_least64_t. */
#define INT_LEAST64_WIDTH __INT_LEAST64_WIDTH__
+
+/** Width of \ref uint_least8_t. */
#define UINT_LEAST8_WIDTH __INT_LEAST8_WIDTH__
+
+/** Width of \ref uint_least16_t. */
#define UINT_LEAST16_WIDTH __INT_LEAST16_WIDTH__
+
+/** Width of \ref uint_least32_t. */
#define UINT_LEAST32_WIDTH __INT_LEAST32_WIDTH__
+
+/** Width of \ref uint_least64_t. */
#define UINT_LEAST64_WIDTH __INT_LEAST64_WIDTH__
+/** Width of \ref intptr_t. */
#define INTPTR_WIDTH __INTPTR_WIDTH__
+
+/** Width of \ref intmax_t. */
#define INTMAX_WIDTH __INTMAX_WIDTH__
+
+/** Width of \ref uintptr_t. */
#define UINTPTR_WIDTH __INTPTR_WIDTH__
+
+/** Width of \ref uintmax_t. */
#define UINTMAX_WIDTH __INTMAX_WIDTH__
+/** Null. */
#define NULL 0
/* some common types used throughout the kernel */
+/** Status, used with codes in \ref status_codes. */
typedef int_fast8_t stat_t;
+
+/** ID of something. */
typedef uint_fast32_t id_t;
+
+/** Memory region flags. */
typedef uint_fast16_t vmflags_t;
-/* error types (should this go somewhere else? */
-/* negative error codes are reserved for general usage, positive error codes are
- * allowed to be function-specific. */
-enum {
- ERR_MISC = -8, /* something */
- ERR_NOINIT = -7, /* not initialized */
- ERR_INVAL = -6, /* invalid value */
- ERR_EXT = -5, /* already exists */
- ERR_OOMEM = -4, /* out of memory */
- ERR_ADDR = -3, /* illegal address */
- ERR_ALIGN = -2, /* wrong alignment */
- ERR_NF = -1, /* not found */
- OK = 0, /* OK */
- INFO_TRGN = 1, /* try again */
- INFO_SEFF = 2, /* side effects */
- INFO_CONT = 3, /* continue */
+/**
+ * Status codes.
+ * Negative error codes are reserved for general usage, positive error codes are
+ * allowed to be function-specific, although that's sort of difficult to keep
+ * track of.
+ */
+/* should this enum be somewhere else? */
+enum status_codes {
+ /** Something went wrong :/ */
+ ERR_MISC = -8,
+ /** Not initialized. */
+ ERR_NOINIT = -7,
+ /** Invalid value. */
+ ERR_INVAL = -6,
+ /** Already exists. */
+ ERR_EXT = -5,
+ /** Out of memory. */
+ ERR_OOMEM = -4,
+ /** Illegal address. */
+ ERR_ADDR = -3,
+ /** Wrong alignment. */
+ ERR_ALIGN = -2,
+ /** Not found. */
+ ERR_NF = -1,
+ /** OK. */
+ OK = 0,
+ /** Try again. */
+ INFO_TRGN = 1,
+ /** Side effects. */
+ INFO_SEFF = 2,
+ /** Continue. */
+ INFO_CONT = 3,
};
#include <arch/types.h> /* arch-specific type definitions (pm_t/vm_t etc) */