1 /*
2  * Copyright (c) 2010-2014 Wind River Systems, Inc.
3  * Copyright (c) 2017 Oticon A/S
4  *
5  * SPDX-License-Identifier: Apache-2.0
6  */
7 
8 /**
9  * @file
10  * @brief POSIX arch specific kernel interface header
11  * This header contains the POSIX arch specific kernel interface.
12  * It is included by the generic kernel interface header (include/arch/cpu.h)
13  *
14  */
15 
16 
17 #ifndef ZEPHYR_INCLUDE_ARCH_POSIX_ARCH_H_
18 #define ZEPHYR_INCLUDE_ARCH_POSIX_ARCH_H_
19 
20 /* Add include for DTS generated information */
21 #include <zephyr/devicetree.h>
22 
23 #include <zephyr/toolchain.h>
24 #include <zephyr/irq.h>
25 #include <zephyr/arch/posix/exception.h>
26 #include <zephyr/arch/posix/asm_inline.h>
27 #include <zephyr/arch/posix/thread.h>
28 #include <board_irq.h> /* Each board must define this */
29 #include <zephyr/sw_isr_table.h>
30 #include <zephyr/arch/posix/posix_soc_if.h>
31 
32 #ifdef __cplusplus
33 extern "C" {
34 #endif
35 
36 #ifdef CONFIG_64BIT
37 #define ARCH_STACK_PTR_ALIGN 8
38 #else
39 #define ARCH_STACK_PTR_ALIGN 4
40 #endif
41 
42 extern uint32_t sys_clock_cycle_get_32(void);
43 
arch_k_cycle_get_32(void)44 static inline uint32_t arch_k_cycle_get_32(void)
45 {
46 	return sys_clock_cycle_get_32();
47 }
48 
49 extern uint64_t sys_clock_cycle_get_64(void);
50 
arch_k_cycle_get_64(void)51 static inline uint64_t arch_k_cycle_get_64(void)
52 {
53 	return sys_clock_cycle_get_64();
54 }
55 
arch_nop(void)56 static ALWAYS_INLINE void arch_nop(void)
57 {
58 	__asm__ volatile("nop");
59 }
60 
arch_irq_unlocked(unsigned int key)61 static ALWAYS_INLINE bool arch_irq_unlocked(unsigned int key)
62 {
63 	return key == false;
64 }
65 
arch_irq_lock(void)66 static ALWAYS_INLINE unsigned int arch_irq_lock(void)
67 {
68 	return posix_irq_lock();
69 }
70 
71 
arch_irq_unlock(unsigned int key)72 static ALWAYS_INLINE void arch_irq_unlock(unsigned int key)
73 {
74 	posix_irq_unlock(key);
75 }
76 
77 #ifdef __cplusplus
78 }
79 #endif
80 
81 #endif /* ZEPHYR_INCLUDE_ARCH_POSIX_ARCH_H_ */
82