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_ */
|