/* * Copyright (c) 2010-2012, 2014-2015 Wind River Systems, Inc. * * SPDX-License-Identifier: Apache-2.0 */ /** * @file * @brief Architecture-independent private kernel APIs * * This file contains private kernel APIs that are not architecture-specific. */ #ifndef ZEPHYR_KERNEL_INCLUDE_KERNEL_INTERNAL_H_ #define ZEPHYR_KERNEL_INCLUDE_KERNEL_INTERNAL_H_ #include #include #ifndef _ASMLANGUAGE #ifdef __cplusplus extern "C" { #endif /* Early boot functions */ void z_bss_zero(void); #ifdef CONFIG_XIP void z_data_copy(void); #else static inline void z_data_copy(void) { /* Do nothing */ } #endif FUNC_NORETURN void z_cstart(void); extern FUNC_NORETURN void z_thread_entry(k_thread_entry_t entry, void *p1, void *p2, void *p3); extern void z_setup_new_thread(struct k_thread *new_thread, k_thread_stack_t *stack, size_t stack_size, k_thread_entry_t entry, void *p1, void *p2, void *p3, int prio, u32_t options, const char *name); #ifdef CONFIG_USERSPACE /** * @brief Zero out BSS sections for application shared memory * * This isn't handled by any platform bss zeroing, and is called from * z_cstart() if userspace is enabled. */ extern void z_app_shmem_bss_zero(void); #endif /* CONFIG_USERSPACE */ /** * @brief Allocate some memory from the current thread's resource pool * * Threads may be assigned a resource pool, which will be used to allocate * memory on behalf of certain kernel and driver APIs. Memory reserved * in this way should be freed with k_free(). * * @param size Memory allocation size * @return A pointer to the allocated memory, or NULL if there is insufficient * RAM in the pool or the thread has no resource pool assigned */ void *z_thread_malloc(size_t size); /* set and clear essential thread flag */ extern void z_thread_essential_set(void); extern void z_thread_essential_clear(void); /* clean up when a thread is aborted */ #if defined(CONFIG_THREAD_MONITOR) extern void z_thread_monitor_exit(struct k_thread *thread); #else #define z_thread_monitor_exit(thread) \ do {/* nothing */ \ } while (false) #endif /* CONFIG_THREAD_MONITOR */ extern void z_smp_init(void); extern void smp_timer_init(void); extern u32_t z_early_boot_rand32_get(void); #if CONFIG_STACK_POINTER_RANDOM extern int z_stack_adjust_initialized; #endif #ifdef CONFIG_BOOT_TIME_MEASUREMENT extern u32_t z_timestamp_main; /* timestamp when main task starts */ extern u32_t z_timestamp_idle; /* timestamp when CPU goes idle */ #endif extern struct k_thread z_main_thread; extern struct k_thread z_idle_thread; extern K_THREAD_STACK_DEFINE(z_main_stack, CONFIG_MAIN_STACK_SIZE); extern K_THREAD_STACK_DEFINE(z_idle_stack, CONFIG_IDLE_STACK_SIZE); #ifdef __cplusplus } #endif #endif /* _ASMLANGUAGE */ #endif /* ZEPHYR_KERNEL_INCLUDE_KERNEL_INTERNAL_H_ */