|
|
- #ifndef __LIBS_DEFS_H__
- #define __LIBS_DEFS_H__
-
- #ifndef NULL
- #define NULL ((void *)0)
- #endif
-
- #define __always_inline inline __attribute__((always_inline))
- #define __noinline __attribute__((noinline))
- #define __noreturn __attribute__((noreturn))
-
- /* Represents true-or-false values */
- typedef int bool;
-
- /* Explicitly-sized versions of integer types */
- typedef char int8_t;
- typedef unsigned char uint8_t;
- typedef short int16_t;
- typedef unsigned short uint16_t;
- typedef int int32_t;
- typedef unsigned int uint32_t;
- typedef long long int64_t;
- typedef unsigned long long uint64_t;
-
- /* *
- * Pointers and addresses are 32 bits long.
- * We use pointer types to represent addresses,
- * uintptr_t to represent the numerical values of addresses.
- * */
- typedef int32_t intptr_t;
- typedef uint32_t uintptr_t;
-
- /* size_t is used for memory object sizes */
- typedef uintptr_t size_t;
-
- /* used for page numbers */
- typedef size_t ppn_t;
-
- /* *
- * Rounding operations (efficient when n is a power of 2)
- * Round down to the nearest multiple of n
- * */
- #define ROUNDDOWN(a, n) ({ \
- size_t __a = (size_t)(a); \
- (typeof(a))(__a - __a % (n)); \
- })
-
- /* Round up to the nearest multiple of n */
- #define ROUNDUP(a, n) ({ \
- size_t __n = (size_t)(n); \
- (typeof(a))(ROUNDDOWN((size_t)(a) + __n - 1, __n)); \
- })
-
- /* Return the offset of 'member' relative to the beginning of a struct type */
- #define offsetof(type, member) \
- ((size_t)(&((type *)0)->member))
-
- /* *
- * to_struct - get the struct from a ptr
- * @ptr: a struct pointer of member
- * @type: the type of the struct this is embedded in
- * @member: the name of the member within the struct
- * */
- #define to_struct(ptr, type, member) \
- ((type *)((char *)(ptr) - offsetof(type, member)))
-
- #endif /* !__LIBS_DEFS_H__ */
-
|