Line data Source code
1 0 : /* 2 : * Copyright (c) 2023 Intel Corporation 3 : * 4 : * SPDX-License-Identifier: Apache-2.0 5 : */ 6 : 7 : #ifndef ZEPHYR_INCLUDE_KERNEL_SMP_H_ 8 : #define ZEPHYR_INCLUDE_KERNEL_SMP_H_ 9 : 10 : #include <stdbool.h> 11 : 12 0 : typedef void (*smp_init_fn)(void *arg); 13 : 14 : /** 15 : * @brief Start a CPU. 16 : * 17 : * This routine is used to manually start the CPU specified 18 : * by @a id. It may be called to restart a CPU that had been 19 : * stopped or powered down, as well as some other scenario. 20 : * After the CPU has finished initialization, the CPU will be 21 : * ready to participate in thread scheduling and execution. 22 : * 23 : * @note This function must not be used on currently running 24 : * CPU. The target CPU must be in off state, or in 25 : * certain architectural state(s) where the CPU is 26 : * permitted to go through the power up process. 27 : * Detection of such state(s) must be provided by 28 : * the platform layers. 29 : * 30 : * @note This initializes per-CPU kernel structs and also 31 : * initializes timers needed for MP operations. 32 : * Use @ref k_smp_cpu_resume if these are not 33 : * desired. 34 : * 35 : * @param id ID of target CPU. 36 : * @param fn Function to be called before letting scheduler 37 : * run. 38 : * @param arg Argument to @a fn. 39 : */ 40 1 : void k_smp_cpu_start(int id, smp_init_fn fn, void *arg); 41 : 42 : /** 43 : * @brief Resume a previously suspended CPU. 44 : * 45 : * This function works like @ref k_smp_cpu_start, but does not 46 : * re-initialize the kernel's internal tracking data for 47 : * the target CPU. Therefore, @ref k_smp_cpu_start must have 48 : * previously been called for the target CPU, and it must have 49 : * verifiably reached an idle/off state (detection of which 50 : * must be provided by the platform layers). It may be used 51 : * in cases where platform layers require, for example, that 52 : * data on the interrupt or idle stack be preserved. 53 : * 54 : * @note This function must not be used on currently running 55 : * CPU. The target CPU must be in suspended state, or 56 : * in certain architectural state(s) where the CPU is 57 : * permitted to go through the resume process. 58 : * Detection of such state(s) must be provided by 59 : * the platform layers. 60 : * 61 : * @param id ID of target CPU. 62 : * @param fn Function to be called before resuming context. 63 : * @param arg Argument to @a fn. 64 : * @param reinit_timer True if timer needs to be re-initialized. 65 : * @param invoke_sched True if scheduler is invoked after the CPU 66 : * has started. 67 : */ 68 1 : void k_smp_cpu_resume(int id, smp_init_fn fn, void *arg, 69 : bool reinit_timer, bool invoke_sched); 70 : 71 : #endif /* ZEPHYR_INCLUDE_KERNEL_SMP_H_ */