11#ifndef ZEPHYR_INCLUDE_ARCH_ARM_ASM_INLINE_GCC_H_
12#define ZEPHYR_INCLUDE_ARCH_ARM_ASM_INLINE_GCC_H_
24#include <cmsis_core.h>
26#if defined(CONFIG_CPU_AARCH32_CORTEX_R) || defined(CONFIG_CPU_AARCH32_CORTEX_A)
48#if defined(CONFIG_ARMV6_M_ARMV8_M_BASELINE)
49#if CONFIG_MP_MAX_NUM_CPUS == 1 || defined(CONFIG_ARMV8_M_BASELINE)
50 key = __get_PRIMASK();
53#error "Cortex-M0 and Cortex-M0+ require SoC specific support for cross core synchronisation."
55#elif defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE)
56 key = __get_BASEPRI();
57 __set_BASEPRI_MAX(_EXC_IRQ_DEFAULT_PRIO);
58#if defined(CONFIG_CORTEX_M_ERRATUM_440977_WORKAROUND)
69#elif defined(CONFIG_ARMV7_R) || defined(CONFIG_AARCH32_ARMV8_R) || \
70 defined(CONFIG_ARM_A_PROFILE_AARCH32)
79#error Unknown ARM architecture
99#if defined(CONFIG_ARMV6_M_ARMV8_M_BASELINE)
104#elif defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE)
106#elif defined(CONFIG_ARMV7_R) || defined(CONFIG_AARCH32_ARMV8_R) || \
107 defined(CONFIG_ARM_A_PROFILE_AARCH32)
113#error Unknown ARM architecture
126#if defined(CONFIG_ARMV6_M_ARMV8_M_BASELINE)
127 return __get_PRIMASK() == 0U;
128#elif defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE)
129 return __get_BASEPRI() == 0U;
130#elif defined(CONFIG_ARMV7_R) || defined(CONFIG_AARCH32_ARMV8_R) || \
131 defined(CONFIG_ARM_A_PROFILE_AARCH32)
134 __asm__
volatile(
"mrs %0, cpsr" :
"=r" (cpsr));
135 return (cpsr &
I_BIT) == 0U;
137#error Unknown ARM architecture
141#ifdef CONFIG_ZERO_LATENCY_IRQS
147 key = __get_PRIMASK();
#define I_BIT
Definition cpu.h:33
static ALWAYS_INLINE unsigned int arch_irq_lock(void)
Definition asm_inline_gcc.h:44
static ALWAYS_INLINE void arch_irq_unlock(unsigned int key)
Definition asm_inline_gcc.h:90
static ALWAYS_INLINE bool arch_cpu_irqs_are_enabled(void)
Implementation of arch_cpu_irqs_are_enabled.
Definition asm_inline_gcc.h:124
static ALWAYS_INLINE bool arch_irq_unlocked(unsigned int key)
Definition asm_inline_gcc.h:117