1 /*
2  * Copyright 2022 IoT.bzh
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #ifndef ZEPHYR_INCLUDE_ARCH_ARM_ARCH_INLINES_H
8 #define ZEPHYR_INCLUDE_ARCH_ARM_ARCH_INLINES_H
9 
10 #include <zephyr/kernel_structs.h>
11 #if defined(CONFIG_CPU_AARCH32_CORTEX_R) || defined(CONFIG_CPU_AARCH32_CORTEX_A)
12 #include <zephyr/arch/arm/cortex_a_r/lib_helpers.h>
13 #include <zephyr/arch/arm/cortex_a_r/tpidruro.h>
14 
arch_curr_cpu(void)15 static ALWAYS_INLINE _cpu_t *arch_curr_cpu(void)
16 {
17 	return (_cpu_t *)(read_tpidruro() & TPIDRURO_CURR_CPU);
18 }
19 #else
20 
21 #ifndef CONFIG_SMP
arch_curr_cpu(void)22 static ALWAYS_INLINE _cpu_t *arch_curr_cpu(void)
23 {
24 	/* Dummy implementation always return the first cpu */
25 	return &_kernel.cpus[0];
26 }
27 #endif
28 #endif
29 
arch_proc_id(void)30 static ALWAYS_INLINE uint32_t arch_proc_id(void)
31 {
32 	/*
33 	 * Placeholder implementation to be replaced with an architecture
34 	 * specific call to get processor ID
35 	 */
36 	return arch_curr_cpu()->id;
37 }
38 
arch_num_cpus(void)39 static ALWAYS_INLINE unsigned int arch_num_cpus(void)
40 {
41 	return CONFIG_MP_MAX_NUM_CPUS;
42 }
43 
44 #endif /* ZEPHYR_INCLUDE_ARCH_ARM_ARCH_INLINES_H */
45