1 /*
2  * Copyright (c) 2013-2014 Wind River Systems, Inc.
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 /**
8  * @file
9  * @brief ARM AArch32 public kernel miscellaneous
10  *
11  * ARM AArch32-specific kernel miscellaneous interface. Included by arm/arch.h.
12  */
13 
14 #ifndef ZEPHYR_INCLUDE_ARCH_ARM_MISC_H_
15 #define ZEPHYR_INCLUDE_ARCH_ARM_MISC_H_
16 
17 #ifdef __cplusplus
18 extern "C" {
19 #endif
20 
21 #ifndef _ASMLANGUAGE
22 extern uint32_t sys_clock_cycle_get_32(void);
23 
arch_k_cycle_get_32(void)24 static inline uint32_t arch_k_cycle_get_32(void)
25 {
26 	return sys_clock_cycle_get_32();
27 }
28 
29 extern uint64_t sys_clock_cycle_get_64(void);
30 
arch_k_cycle_get_64(void)31 static inline uint64_t arch_k_cycle_get_64(void)
32 {
33 	return sys_clock_cycle_get_64();
34 }
35 
arch_nop(void)36 static ALWAYS_INLINE void arch_nop(void)
37 {
38 	__asm__ volatile("nop");
39 }
40 
41 #if defined(CONFIG_USERSPACE)
42 extern bool z_arm_thread_is_in_user_mode(void);
43 #endif
44 
45 #if defined(CONFIG_ARM_ON_ENTER_CPU_IDLE_HOOK)
46 /* Prototype of a hook that can be enabled to be called every time the CPU is
47  * made idle (the calls will be done from k_cpu_idle() and k_cpu_atomic_idle()).
48  * If this hook returns false, the CPU is prevented from entering the actual
49  * sleep (the WFE/WFI instruction is skipped).
50  */
51 bool z_arm_on_enter_cpu_idle(void);
52 #endif
53 
54 #if defined(CONFIG_ARM_ON_ENTER_CPU_IDLE_PREPARE_HOOK)
55 /* Prototype of a hook that can be enabled to be called every time the CPU is
56  * made idle (the calls will be done from k_cpu_idle() and k_cpu_atomic_idle()).
57  * The function is called before interrupts are disabled and can prepare to
58  * upcoming call to z_arm_on_enter_cpu_idle.
59  */
60 void z_arm_on_enter_cpu_idle_prepare(void);
61 #endif
62 
63 #endif
64 
65 #ifdef __cplusplus
66 }
67 #endif
68 
69 #endif /* ZEPHYR_INCLUDE_ARCH_ARM_MISC_H_ */
70