Kernel utilities

Utilities and data structures used by the kernel. More...

Detailed Description

Files

file  assert.h
 POSIX.1-2008 compliant version of the assert macro.
 
file  bitarithm.h
 Helper functions for bit arithmetic.
 
file  byteorder.h
 Functions to work with different byte orders.
 
file  cib.h
 Circular integer buffer interface.
 
file  clist.h
 Circular linked list.
 
file  debug.h
 Debug-header.
 
file  kernel_types.h
 Types used by the kernel.
 
file  lifo.h
 LIFO buffer API, read long description carefully.
 
file  list.h
 Intrusive linked list.
 
file  log.h
 System logging header.
 
file  panic.h
 Crash handling header.
 
file  priority_queue.h
 A simple priority queue.
 
file  ringbuffer.h
 Ringbuffer header.
 

Data Structures

union  le_uint16_t
 A 16 bit integer in little endian. More...
 
union  le_uint32_t
 A 32 bit integer in little endian. More...
 
union  le_uint64_t
 A 64 bit integer in little endian. More...
 
union  be_uint16_t
 A 16 bit integer in big endian aka network byte order. More...
 
union  be_uint32_t
 A 32 bit integer in big endian aka network byte order. More...
 
union  be_uint64_t
 A 64 bit integer in big endian aka network byte order. More...
 
struct  cib_t
 circular integer buffer structure More...
 
struct  list_node
 List node structure. More...
 
struct  priority_queue_node
 data type for priority queue nodes More...
 
struct  priority_queue_t
 data type for priority queues More...
 

Macros

#define DEBUG_ASSERT_VERBOSE
 Activate verbose output for assert() when defined. More...
 
#define assert(cond)
 abort the program if assertion is false More...
 
#define SETBIT(val, bit)   val |= (bit)
 Sets a bitmask for a bitfield. More...
 
#define CLRBIT(val, bit)   val &= (~(bit))
 Clears bitmask for a bitfield. More...
 
#define ARCH_32_BIT   (__INT_MAX__ == 2147483647)
 1 for 32 bit architectures, 0 otherwise
 
#define _byteorder_swap(V, T)   (byteorder_swap##T((V)))
 Swaps the byteorder according to the endianess.
 
#define CIB_INIT(SIZE)   { 0, 0, (SIZE) - 1 }
 Initialize cib_t to a given size.
 
#define DEBUG_PRINT(...)
 Print debug information if the calling thread stack is large enough. More...
 
#define DEBUG_EXTRA_STACKSIZE   THREAD_EXTRA_STACKSIZE_PRINTF
 Extra stacksize needed when ENABLE_DEBUG==1.
 
#define SSIZE_MAX   ((ssize_t) (SIZE_MAX / 2))
 Maximum value for ssize_t.
 
#define MAXTHREADS   32
 The maximum number of threads to be scheduled.
 
#define KERNEL_PID_UNDEF   0
 Canonical identifier for an invalid PID.
 
#define KERNEL_PID_FIRST   (KERNEL_PID_UNDEF + 1)
 The first valid PID (inclusive).
 
#define KERNEL_PID_LAST   (KERNEL_PID_FIRST + MAXTHREADS - 1)
 The last valid PID (inclusive).
 
#define PRIkernel_pid   PRIi16
 Macro for printing formatter.
 
#define LOG_LEVEL   LOG_INFO
 Default log level define.
 
#define LOG(level, ...)
 Log message if level <= LOG_LEVEL. More...
 
#define log_write(level, ...)   printf(__VA_ARGS__)
 Default log_write function, just maps to printf.
 
#define PRIORITY_QUEUE_NODE_INIT   { NULL, 0, 0 }
 Static initializer for priority_queue_node_t.
 
#define PRIORITY_QUEUE_INIT   { NULL }
 Static initializer for priority_queue_t.
 

Typedefs

typedef be_uint16_t network_uint16_t
 A 16 bit integer in network byte order.
 
typedef be_uint32_t network_uint32_t
 A 32 bit integer in network byte order.
 
typedef be_uint64_t network_uint64_t
 A 64 bit integer in network byte order.
 
typedef list_node_t clist_node_t
 List node structure. More...
 
typedef int16_t kernel_pid_t
 Unique process identifier.
 
typedef struct list_node list_node_t
 List node structure. More...
 
typedef struct priority_queue_node priority_queue_node_t
 data type for priority queue nodes
 

Enumerations

enum  {
  LOG_NONE, LOG_ERROR, LOG_WARNING, LOG_INFO,
  LOG_DEBUG, LOG_ALL
}
 defined log levels More...
 
enum  core_panic_t {
  PANIC_GENERAL_ERROR, PANIC_SOFT_REBOOT, PANIC_HARD_REBOOT, PANIC_ASSERT_FAIL,
  PANIC_UNDEFINED
}
 Definition of available panic modes.
 

Functions

NORETURN void _assert_failure (const char *file, unsigned line)
 Function to handle failed assertion. More...
 
unsigned bitarithm_msb (unsigned v)
 Returns the number of the highest '1' bit in a value. More...
 
unsigned bitarithm_lsb (register unsigned v)
 Returns the number of the lowest '1' bit in a value. More...
 
unsigned bitarithm_bits_set (unsigned v)
 Returns the number of bits set in a value. More...
 
static be_uint16_t byteorder_ltobs (le_uint16_t v)
 Convert from little endian to big endian, 16 bit. More...
 
static be_uint32_t byteorder_ltobl (le_uint32_t v)
 Convert from little endian to big endian, 32 bit. More...
 
static be_uint64_t byteorder_ltobll (le_uint64_t v)
 Convert from little endian to big endian, 64 bit. More...
 
static le_uint16_t byteorder_btols (be_uint16_t v)
 Convert from big endian to little endian, 16 bit. More...
 
static le_uint32_t byteorder_btoll (be_uint32_t v)
 Convert from big endian to little endian, 32 bit. More...
 
static le_uint64_t byteorder_btolll (be_uint64_t v)
 Convert from big endian to little endian, 64 bit. More...
 
static network_uint16_t byteorder_htons (uint16_t v)
 Convert from host byte order to network byte order, 16 bit. More...
 
static network_uint32_t byteorder_htonl (uint32_t v)
 Convert from host byte order to network byte order, 32 bit. More...
 
static network_uint64_t byteorder_htonll (uint64_t v)
 Convert from host byte order to network byte order, 64 bit. More...
 
static uint16_t byteorder_ntohs (network_uint16_t v)
 Convert from network byte order to host byte order, 16 bit. More...
 
static uint32_t byteorder_ntohl (network_uint32_t v)
 Convert from network byte order to host byte order, 32 bit. More...
 
static uint64_t byteorder_ntohll (network_uint64_t v)
 Convert from network byte order to host byte order, 64 bit. More...
 
static uint16_t byteorder_swaps (uint16_t v)
 Swap byte order, 16 bit. More...
 
static uint32_t byteorder_swapl (uint32_t v)
 Swap byte order, 32 bit. More...
 
static uint64_t byteorder_swapll (uint64_t v)
 Swap byte order, 64 bit. More...
 
static uint16_t htons (uint16_t v)
 Convert from host byte order to network byte order, 16 bit. More...
 
static uint32_t htonl (uint32_t v)
 Convert from host byte order to network byte order, 32 bit. More...
 
static uint64_t htonll (uint64_t v)
 Convert from host byte order to network byte order, 64 bit. More...
 
static uint16_t ntohs (uint16_t v)
 Convert from network byte order to host byte order, 16 bit. More...
 
static uint32_t ntohl (uint32_t v)
 Convert from network byte order to host byte order, 32 bit. More...
 
static uint64_t ntohll (uint64_t v)
 Convert from network byte order to host byte order, 64 bit. More...
 
static void cib_init (cib_t *__restrict cib, unsigned int size)
 Initialize cib to 0 and set buffer size to size. More...
 
static unsigned int cib_avail (const cib_t *cib)
 Calculates difference between cib_put() and cib_get() accesses. More...
 
static unsigned int cib_full (const cib_t *cib)
 Check if cib is full. More...
 
static int cib_get (cib_t *__restrict cib)
 Get the index of the next item in buffer. More...
 
static int cib_peek (cib_t *__restrict cib)
 Get the index of the next item in buffer without removing it. More...
 
static int cib_get_unsafe (cib_t *cib)
 Get the index of the next item in buffer. More...
 
static int cib_put (cib_t *__restrict cib)
 Get index for item in buffer to put to. More...
 
static int cib_put_unsafe (cib_t *cib)
 Get index for item in buffer to put to. More...
 
static void clist_rpush (clist_node_t *list, clist_node_t *new_node)
 Appends new_node at the end of *list. More...
 
static void clist_lpush (clist_node_t *list, clist_node_t *new_node)
 Inserts new_node at the beginning of *list. More...
 
static clist_node_tclist_lpop (clist_node_t *list)
 Removes and returns first element from list. More...
 
static void clist_lpoprpush (clist_node_t *list)
 Advances the circle list. More...
 
static clist_node_tclist_lpeek (const clist_node_t *list)
 Returns first element in list. More...
 
static clist_node_tclist_rpeek (const clist_node_t *list)
 Returns last element in list. More...
 
static clist_node_tclist_rpop (clist_node_t *list)
 Removes and returns last element from list. More...
 
static clist_node_tclist_find_before (const clist_node_t *list, const clist_node_t *node)
 Finds node and returns its predecessor. More...
 
static clist_node_tclist_find (const clist_node_t *list, const clist_node_t *node)
 Finds and returns node. More...
 
static clist_node_tclist_remove (clist_node_t *list, clist_node_t *node)
 Finds and removes node. More...
 
static void clist_foreach (clist_node_t *list, int(*func)(clist_node_t *))
 Traverse clist, call function for each member. More...
 
static int pid_is_valid (kernel_pid_t pid)
 Determine if the given pid is valid. More...
 
int lifo_empty (int *array)
 Check if the given lifo is empty. More...
 
void lifo_init (int *array, int n)
 Initialize a lifo array. More...
 
void lifo_insert (int *array, int i)
 Insert an element into the lifo. More...
 
int lifo_get (int *array)
 Extract the least recently inserted element from the lifo. More...
 
static void list_add (list_node_t *node, list_node_t *new_node)
 Insert object into list. More...
 
static list_node_tlist_remove_head (list_node_t *list)
 Removes the head of the list and returns it. More...
 
static list_node_tlist_remove (list_node_t *list, list_node_t *node)
 Removes the node from the list. More...
 
NORETURN void core_panic (core_panic_t crash_code, const char *message)
 Handle an unrecoverable error by halting or rebooting the system. More...
 
static void priority_queue_node_init (priority_queue_node_t *priority_queue_node)
 Initialize a priority queue node object. More...
 
static void priority_queue_init (priority_queue_t *priority_queue)
 Initialize a priority queue object. More...
 
priority_queue_node_tpriority_queue_remove_head (priority_queue_t *root)
 remove the priority queue's head More...
 
void priority_queue_add (priority_queue_t *root, priority_queue_node_t *new_obj)
 insert new_obj into root based on its priority More...
 
void priority_queue_remove (priority_queue_t *root, priority_queue_node_t *node)
 remove node from root More...
 
void priority_queue_print (priority_queue_t *root)
 print the data and priority of every node in the given priority queue More...
 
void priority_queue_print_node (priority_queue_t *root)
 print the data, priority, and successor of a given node More...
 

Variables

const char assert_crash_message []
 the string that is passed to panic in case of a failing assertion
 

Single Bit Defines

#define BIT0   0x00000001
 
#define BIT1   0x00000002
 
#define BIT2   0x00000004
 
#define BIT3   0x00000008
 
#define BIT4   0x00000010
 
#define BIT5   0x00000020
 
#define BIT6   0x00000040
 
#define BIT7   0x00000080
 
#define BIT8   0x00000100
 
#define BIT9   0x00000200
 
#define BIT10   0x00000400
 
#define BIT11   0x00000800
 
#define BIT12   0x00001000
 
#define BIT13   0x00002000
 
#define BIT14   0x00004000
 
#define BIT15   0x00008000
 
#define BIT16   0x00010000
 
#define BIT17   0x00020000
 
#define BIT18   0x00040000
 
#define BIT19   0x00080000
 
#define BIT20   0x00100000
 
#define BIT21   0x00200000
 
#define BIT22   0x00400000
 
#define BIT23   0x00800000
 
#define BIT24   0x01000000
 
#define BIT25   0x02000000
 
#define BIT26   0x04000000
 
#define BIT27   0x08000000
 
#define BIT28   0x10000000
 
#define BIT29   0x20000000
 
#define BIT30   0x40000000
 
#define BIT31   0x80000000
 

Debugging defines

#define DEBUG_FUNC   ""
 Contains the function name if given compiler supports it. More...
 
#define DEBUG(...)   DEBUG_PRINT(__VA_ARGS__)
 Print debug information to stdout. More...
 

Logging convenience defines

#define LOG_ERROR(...)   LOG(LOG_ERROR, __VA_ARGS__)
 
#define LOG_WARNING(...)   LOG(LOG_WARNING, __VA_ARGS__)
 
#define LOG_INFO(...)   LOG(LOG_INFO, __VA_ARGS__)
 
#define LOG_DEBUG(...)   LOG(LOG_DEBUG, __VA_ARGS__)
 

Macro Definition Documentation

#define assert (   cond)
Value:
if (!(cond)) { \
_assert_failure(RIOT_FILE_RELATIVE, __LINE__); \
}
NORETURN void _assert_failure(const char *file, unsigned line)
Function to handle failed assertion.

If the macro NDEBUG was defined at the moment <assert.h> was last included, the macro assert() generates no code, and hence does nothing at all.

Otherwise, the macro assert() prints an error message to standard error and terminates the application by calling core_panic().

The purpose of this macro is to help programmers find bugs in their programs.

With DEBUG_ASSERT_VERBOSE defined this will print also the file, the line and the function this assertion failed in.

If NDEBUG and DEBUG_ASSERT_VERBOSE are not defined, a failed assertion generates output similar to:

0x89abcdef
*** RIOT kernel panic:
FAILED ASSERTION.

...

Where 0x89abcdef is an address. This address can be used with tools like addr2line (or e.g. arm-none-eabi-addr2line for ARM-based code), objdump, or gdb (with the command info line *(0x89abcdef)) to identify the line the assertion failed in.

See also
http://pubs.opengroup.org/onlinepubs/9699919799/functions/assert.html

Definition at line 104 of file assert.h.

#define CLRBIT (   val,
  bit 
)    val &= (~(bit))
Parameters
[in]valThe bitfield
[in]bitSpecifies the bits to be cleared
Returns
The modified bitfield

Definition at line 47 of file bitarithm.h.

#define DEBUG (   ...)    DEBUG_PRINT(__VA_ARGS__)
Note
Another name for DEBUG_PRINT

Definition at line 95 of file debug.h.

#define DEBUG_ASSERT_VERBOSE

Without this macro defined the assert() macro will just print the address of the code line the assertion failed in. With the macro defined the macro will also print the file, the code line and the function this macro failed in.

To define just add it to your CFLAGS in your application's Makefile:

1 CFLAGS += -DDEBUG_ASSERT_VERBOSE

Definition at line 46 of file assert.h.

#define DEBUG_FUNC   ""

Otherwise it is an empty string.

Definition at line 85 of file debug.h.

#define DEBUG_PRINT (   ...)
Value:
do { \
printf(__VA_ARGS__); \
} \
else { \
puts("Cannot debug, stack too small"); \
} \
} while (0)
#define THREAD_EXTRA_STACKSIZE_PRINTF
Size of the task's printf stack in bytes.
Definition: thread.h:242
volatile thread_t * sched_active_thread
Currently active thread.
int stack_size
thread's stack size
Definition: thread.h:198

Use this macro the same as printf. When DEVELHELP is defined inside an implementation file, all usages of DEBUG_PRINT will print the given information to stdout after verifying the stack is big enough. If DEVELHELP is not set, this check is not performed. (CPU exception may occur)

Definition at line 53 of file debug.h.

#define LOG (   level,
  ... 
)
Value:
do { \
if ((level) <= LOG_LEVEL) log_write((level), __VA_ARGS__); } while (0U)
#define LOG_LEVEL
Default log level define.
Definition: log.h:70
#define log_write(level,...)
Default log_write function, just maps to printf.
Definition: log.h:105

Definition at line 83 of file log.h.

#define SETBIT (   val,
  bit 
)    val |= (bit)
Parameters
[in]valThe bitfield
[in]bitSpecifies the bits to be set
Returns
The modified bitfield

Definition at line 36 of file bitarithm.h.

Typedef Documentation

Used as is as reference to a list.

Definition at line 97 of file clist.h.

typedef struct list_node list_node_t

Used as is as reference to a list, or as member of any data structure that should be member of a list.

Actual list objects should have a list_node_t as member and then use the container_of() macro in list operations. See thread_add_to_list() as example.

Enumeration Type Documentation

anonymous enum

These are the logging levels a user can choose. The idea is to set LOG_LEVEL to one of these values in the application's Makefile. That will restrict output of log statements to those with equal or lower log level.

The default log level is LOG_INFO, which will print every message.

The log function calls of filtered messages will be optimized out at compile time, so a lower log level might result in smaller code size.

Enumerator
LOG_NONE 

Lowest log level, will output nothing.

LOG_ERROR 

Error log level, will print only critical, non-recoverable errors like hardware initialization failures.

LOG_WARNING 

Warning log level, will print warning messages for temporary errors.

LOG_INFO 

Informational log level, will print purely informational messages like successful system bootup, network link state, ...

LOG_DEBUG 

Debug log level, printing developer stuff considered too verbose for production use.

LOG_ALL 

print everything

Definition at line 51 of file log.h.

Function Documentation

NORETURN void _assert_failure ( const char *  file,
unsigned  line 
)
Note
This function was introduced for memory size optimization
Warning
this function NEVER returns!
Parameters
[in]fileThe file name of the file the assertion failed in
[in]lineThe code line of file the assertion failed in
unsigned bitarithm_bits_set ( unsigned  v)
Parameters
[in]vInput value
Returns
Number of set bits

Source: http://graphics.stanford.edu/~seander/bithacks.html#IntegerLogObvious

unsigned bitarithm_lsb ( register unsigned  v)
Parameters
[in]vInput value - must be unequal to '0', otherwise the function will produce an infinite loop
Returns
Bit Number

Source: http://graphics.stanford.edu/~seander/bithacks.html#IntegerLogObvious

unsigned bitarithm_msb ( unsigned  v)
Parameters
[in]vInput value
Returns
Bit Number

Source: http://graphics.stanford.edu/~seander/bithacks.html#IntegerLogObvious

static le_uint32_t byteorder_btoll ( be_uint32_t  v)
inlinestatic
Parameters
[in]vThe integer in big endian.
Returns
v converted to little endian.

Definition at line 332 of file byteorder.h.

static le_uint64_t byteorder_btolll ( be_uint64_t  v)
inlinestatic
Parameters
[in]vThe integer in big endian.
Returns
v converted to little endian.

Definition at line 338 of file byteorder.h.

static le_uint16_t byteorder_btols ( be_uint16_t  v)
inlinestatic
Parameters
[in]vThe integer in big endian.
Returns
v converted to little endian.

Definition at line 326 of file byteorder.h.

static network_uint32_t byteorder_htonl ( uint32_t  v)
inlinestatic
Parameters
[in]vThe integer in host byte order.
Returns
v converted to network byte order.

Definition at line 361 of file byteorder.h.

static network_uint64_t byteorder_htonll ( uint64_t  v)
inlinestatic
Parameters
[in]vThe integer in host byte order.
Returns
v converted to network byte order.

Definition at line 367 of file byteorder.h.

static network_uint16_t byteorder_htons ( uint16_t  v)
inlinestatic
Parameters
[in]vThe integer in host byte order.
Returns
v converted to network byte order.

Definition at line 355 of file byteorder.h.

static be_uint32_t byteorder_ltobl ( le_uint32_t  v)
inlinestatic
Parameters
[in]vThe integer in little endian.
Returns
v converted to big endian.

Definition at line 314 of file byteorder.h.

static be_uint64_t byteorder_ltobll ( le_uint64_t  v)
inlinestatic
Parameters
[in]vThe integer in little endian.
Returns
v converted to big endian.

Definition at line 320 of file byteorder.h.

static be_uint16_t byteorder_ltobs ( le_uint16_t  v)
inlinestatic
Parameters
[in]vThe integer in little endian.
Returns
v converted to big endian.

Definition at line 308 of file byteorder.h.

static uint32_t byteorder_ntohl ( network_uint32_t  v)
inlinestatic
Parameters
[in]vThe integer in network byte order.
Returns
v converted to host byte order.

Definition at line 378 of file byteorder.h.

static uint64_t byteorder_ntohll ( network_uint64_t  v)
inlinestatic
Parameters
[in]vThe integer in network byte order.
Returns
v converted to host byte order.

Definition at line 383 of file byteorder.h.

static uint16_t byteorder_ntohs ( network_uint16_t  v)
inlinestatic
Parameters
[in]vThe integer in network byte order.
Returns
v converted to host byte order.

Definition at line 373 of file byteorder.h.

static uint32_t byteorder_swapl ( uint32_t  v)
inlinestatic
Parameters
[in]vThe integer to swap.
Returns
The swapped integer.

Definition at line 298 of file byteorder.h.

static uint64_t byteorder_swapll ( uint64_t  v)
inlinestatic
Parameters
[in]vThe integer to swap.
Returns
The swapped integer.

Definition at line 303 of file byteorder.h.

static uint16_t byteorder_swaps ( uint16_t  v)
inlinestatic
Parameters
[in]vThe integer to swap.
Returns
The swapped integer.

Definition at line 285 of file byteorder.h.

static unsigned int cib_avail ( const cib_t cib)
inlinestatic
Parameters
[in]cibthe cib_t to check. Must not be NULL.
Returns
How often cib_get() can be called before cib is empty.

Definition at line 69 of file cib.h.

static unsigned int cib_full ( const cib_t cib)
inlinestatic
Parameters
[in]cibthe cib_t to check. Must not be NULL.
Returns
1 if cib_put() would return "-1", 0 otherwise

Definition at line 81 of file cib.h.

static int cib_get ( cib_t *__restrict  cib)
inlinestatic
Parameters
[in,out]cibcorresponding cib to buffer. Must not be NULL.
Returns
index of next item, -1 if the buffer is empty

Definition at line 93 of file cib.h.

static int cib_get_unsafe ( cib_t cib)
inlinestatic

Unsafe version, must not be called if buffer is empty!

Parameters
[in,out]cibcorresponding cib to buffer. Must not be NULL.
Returns
index of next item

Definition at line 127 of file cib.h.

static void cib_init ( cib_t *__restrict  cib,
unsigned int  size 
)
inlinestatic
Parameters
[out]cibBuffer to initialize. Must not be NULL.
[in]sizeSize of the buffer, must not exceed MAXINT/2. Should be equal to 0 or power of 2.

Definition at line 53 of file cib.h.

static int cib_peek ( cib_t *__restrict  cib)
inlinestatic
Parameters
[in,out]cibcorresponding cib to buffer. Must not be NULL.
Returns
index of next item, -1 if the buffer is empty

Definition at line 109 of file cib.h.

static int cib_put ( cib_t *__restrict  cib)
inlinestatic
Parameters
[in,out]cibcorresponding cib to buffer. Must not be NULL.
Returns
index of item to put to, -1 if the buffer is full

Definition at line 139 of file cib.h.

static int cib_put_unsafe ( cib_t cib)
inlinestatic

Unsafe version, must not be called if buffer is full!

Parameters
[in,out]cibcorresponding cib to buffer. Must not be NULL.
Returns
index of item to put to

Definition at line 160 of file cib.h.

static clist_node_t* clist_find ( const clist_node_t list,
const clist_node_t node 
)
inlinestatic
Note
Complexity: O(n)
Parameters
[in]listpointer to clist
[in,out]nodeNode to look for Must not be NULL.
Returns
node if found
NULL if node is not a list member

Definition at line 278 of file clist.h.

static clist_node_t* clist_find_before ( const clist_node_t list,
const clist_node_t node 
)
inlinestatic
Note
Complexity: O(n)
Parameters
[in]listpointer to clist
[in,out]nodeNode to look for Must not be NULL.
Returns
predecessor of node if found
NULL if node is not a list member

Definition at line 250 of file clist.h.

static void clist_foreach ( clist_node_t list,
int(*)(clist_node_t *)  func 
)
inlinestatic

If func returns non-zero, traversal will be aborted like when calling break within a for loop.

Parameters
[in]listList to traverse.
[in]funcFunction to call for each member.

Definition at line 331 of file clist.h.

static clist_node_t* clist_lpeek ( const clist_node_t list)
inlinestatic
Note
: Complexity: O(1)
Parameters
[in]listThe list to work upon.
Returns
first (leftmost) list element, or NULL if list is empty

Definition at line 195 of file clist.h.

static clist_node_t* clist_lpop ( clist_node_t list)
inlinestatic
Note
Complexity: O(1)
Parameters
[in,out]listPointer to the list to remove first element from.

Definition at line 150 of file clist.h.

static void clist_lpoprpush ( clist_node_t list)
inlinestatic

The result of this function is will be a list with nodes shifted by one. So second list entry will be first, first is last.

[ A, B, C ] becomes [ B, C, A ]

Note
Complexity: O(1)
Parameters
[in,out]listThe list to work upon.

Definition at line 180 of file clist.h.

static void clist_lpush ( clist_node_t list,
clist_node_t new_node 
)
inlinestatic
Note
Complexity: O(1)
Parameters
[in,out]listPointer to clist
[in,out]new_nodeNode which gets inserted. Must not be NULL.

Definition at line 130 of file clist.h.

static clist_node_t* clist_remove ( clist_node_t list,
clist_node_t node 
)
inlinestatic
Note
Complexity: O(n)
Parameters
[in]listpointer to clist
[in,out]nodeNode to remove for Must not be NULL.
Returns
node if found and removed
NULL if node is not a list member

Definition at line 301 of file clist.h.

static clist_node_t* clist_rpeek ( const clist_node_t list)
inlinestatic
Note
: Complexity: O(1)
Parameters
[in]listThe list to work upon.
Returns
last (rightmost) list element, or NULL if list is empty

Definition at line 211 of file clist.h.

static clist_node_t* clist_rpop ( clist_node_t list)
inlinestatic
Note
Complexity: O(n) with n being the number of elements in the list.
Parameters
[in,out]listPointer to the list to remove last element from.

Definition at line 224 of file clist.h.

static void clist_rpush ( clist_node_t list,
clist_node_t new_node 
)
inlinestatic
Note
Complexity: O(1)
Parameters
[in,out]listPointer to clist
[in,out]new_nodeNode which gets inserted. Must not be NULL.

Definition at line 108 of file clist.h.

NORETURN void core_panic ( core_panic_t  crash_code,
const char *  message 
)

A numeric code indicating the failure reason can be given as the crash_code parameter.

Detailing the failure is possible using the message parameter. This function should serve a similar purpose as the panic() function of Unix/Linux kernels.

If the DEVELHELP macro is defined, the system will be halted; the system will be rebooted otherwise.

Warning
this function NEVER returns!
Parameters
[in]crash_codea unique code for identifying the crash reason
[in]messagea human readable reason for the crash
Returns
this function never returns
static uint32_t htonl ( uint32_t  v)
inlinestatic
See also
byteorder_htonl()
Parameters
[in]vThe integer to convert.
Returns
Converted integer.

Definition at line 393 of file byteorder.h.

static uint64_t htonll ( uint64_t  v)
inlinestatic
See also
byteorder_htonll()
Parameters
[in]vThe integer to convert.
Returns
Converted integer.

Definition at line 398 of file byteorder.h.

static uint16_t htons ( uint16_t  v)
inlinestatic
See also
byteorder_htons()
Parameters
[in]vThe integer to convert.
Returns
Converted integer.

Definition at line 388 of file byteorder.h.

int lifo_empty ( int *  array)
Parameters
[in]arrayThe lifo array to check.
Returns
1, if empty
0, otherwise.
int lifo_get ( int *  array)
Parameters
[in]arrayAn integer array, may not be NULL.
Returns
-1, if the lifo is empty.
the least recently inserted element, otherwise.
void lifo_init ( int *  array,
int  n 
)
Parameters
[in,out]arrayAn array of size n + 1, may not be NULL.
[in]nMaximum integer value the lifo is able to store.
void lifo_insert ( int *  array,
int  i 
)
Parameters
[in,out]arrayAn integer array of least i + 1 size that **does not already contain *i***, may not be NULL.
[in]iThe integer value to store, between 0 and the size of the array - 1, must not be stored already.
static void list_add ( list_node_t node,
list_node_t new_node 
)
inlinestatic

If called with a list reference as node, the new node will become the new list head.

Parameters
[in]nodelist node before new entry
[in]new_nodelist node to insert

Definition at line 53 of file list.h.

static list_node_t* list_remove ( list_node_t list,
list_node_t node 
)
inlinestatic
Parameters
[in]listPointer to the list itself, where list->next points to the root node
[in]nodeList node to remove from the list
Returns
removed node, or NULL if empty or not found

Definition at line 86 of file list.h.

static list_node_t* list_remove_head ( list_node_t list)
inlinestatic
Parameters
[in]listPointer to the list itself, where list->next points to the root node
Returns
removed old list head, or NULL if empty

Definition at line 67 of file list.h.

static uint32_t ntohl ( uint32_t  v)
inlinestatic
See also
byteorder_ntohl()
Parameters
[in]vThe integer to convert.
Returns
Converted integer.

Definition at line 409 of file byteorder.h.

static uint64_t ntohll ( uint64_t  v)
inlinestatic
See also
byteorder_ntohll()
Parameters
[in]vThe integer to convert.
Returns
Converted integer.

Definition at line 415 of file byteorder.h.

static uint16_t ntohs ( uint16_t  v)
inlinestatic
See also
byteorder_ntohs()
Parameters
[in]vThe integer to convert.
Returns
Converted integer.

Definition at line 403 of file byteorder.h.

static int pid_is_valid ( kernel_pid_t  pid)
inlinestatic
Parameters
[in]pidThe pid to check
Returns
true if the pid is valid, false otherwise

Definition at line 92 of file kernel_types.h.

void priority_queue_add ( priority_queue_t root,
priority_queue_node_t new_obj 
)

The new object will be appended after objects with the same priority.

Parameters
[in,out]rootthe queue's root
[in]new_objthe object to prepend
Precondition
The queue does not already contain new_obj.
static void priority_queue_init ( priority_queue_t priority_queue)
inlinestatic

For initialization of variables use PRIORITY_QUEUE_INIT instead. Only use this function for dynamically allocated priority queues.

Parameters
[out]priority_queuepre-allocated priority_queue_t object, must not be NULL.

Definition at line 78 of file priority_queue.h.

static void priority_queue_node_init ( priority_queue_node_t priority_queue_node)
inlinestatic

For initialization of variables use PRIORITY_QUEUE_NODE_INIT instead. Only use this function for dynamically allocated priority queue nodes.

Parameters
[out]priority_queue_nodepre-allocated priority_queue_node_t object, must not be NULL.

Definition at line 58 of file priority_queue.h.

void priority_queue_print ( priority_queue_t root)
Note
requires ENABLE_DEBUG to be set to 1 for this file
void priority_queue_print_node ( priority_queue_t root)
Note
requires ENABLE_DEBUG to be set to 1 for this file
void priority_queue_remove ( priority_queue_t root,
priority_queue_node_t node 
)
Parameters
[in,out]rootthe priority queue's root
[in]nodethe node to remove
priority_queue_node_t* priority_queue_remove_head ( priority_queue_t root)
Parameters
[out]rootthe queue's root
Returns
the old head