11#ifndef ZEPHYR_INCLUDE_ARCH_ARM_ASM_INLINE_GCC_H_
12#define ZEPHYR_INCLUDE_ARCH_ARM_ASM_INLINE_GCC_H_
24#if defined(CONFIG_CPU_AARCH32_ARM9)
26static inline void __enable_irq(
void)
30 __asm__
volatile(
"mrs %0, cpsr" :
"=r"(cpsr));
31 __asm__
volatile(
"msr cpsr_c, %0" ::
"r"(cpsr & ~I_BIT));
34static inline void __disable_irq(
void)
38 __asm__
volatile(
"mrs %0, cpsr" :
"=r"(cpsr));
39 __asm__
volatile(
"msr cpsr_c, %0" ::
"r"(cpsr |
I_BIT));
43#include <cmsis_core.h>
46#if defined(CONFIG_CPU_AARCH32_CORTEX_R) || defined(CONFIG_CPU_AARCH32_CORTEX_A)
67#if defined(CONFIG_ARMV5)
71#if defined(CONFIG_ARMV6_M_ARMV8_M_BASELINE)
72#if CONFIG_MP_MAX_NUM_CPUS == 1 || defined(CONFIG_ARMV8_M_BASELINE)
73 key = __get_PRIMASK();
76#error "Cortex-M0 and Cortex-M0+ require SoC specific support for cross core synchronisation."
78#elif defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE)
79 key = __get_BASEPRI();
80 __set_BASEPRI_MAX(_EXC_IRQ_DEFAULT_PRIO);
82#elif defined(CONFIG_ARMV7_R) || defined(CONFIG_AARCH32_ARMV8_R) \
83 || defined(CONFIG_ARMV7_A)
91#elif defined(CONFIG_ARMV5)
97 :
"=r" (key),
"=r" (tmp)
101#error Unknown ARM architecture
114#if defined(CONFIG_ARMV6_M_ARMV8_M_BASELINE)
120#elif defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE)
123#elif defined(CONFIG_ARMV7_R) || defined(CONFIG_AARCH32_ARMV8_R) \
124 || defined(CONFIG_ARMV7_A) || defined(CONFIG_ARMV5)
130#error Unknown ARM architecture
143#if defined(CONFIG_ARMV6_M_ARMV8_M_BASELINE)
144 return __get_PRIMASK() == 0U;
145#elif defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE)
146 return __get_BASEPRI() == 0U;
147#elif defined(CONFIG_ARMV7_R) || defined(CONFIG_AARCH32_ARMV8_R) \
148 || defined(CONFIG_ARMV7_A) || defined(CONFIG_ARMV5)
151 __asm__
volatile(
"mrs %0, cpsr" :
"=r" (cpsr));
152 return (cpsr &
I_BIT) == 0U;
154#error Unknown ARM architecture
158#ifdef CONFIG_ZERO_LATENCY_IRQS
164 key = __get_PRIMASK();
#define I_BIT
Definition cpu.h:32
static ALWAYS_INLINE unsigned int arch_irq_lock(void)
Definition asm_inline_gcc.h:26
static ALWAYS_INLINE void arch_irq_unlock(unsigned int key)
Definition asm_inline_gcc.h:40
static ALWAYS_INLINE bool arch_cpu_irqs_are_enabled(void)
Implementation of arch_cpu_irqs_are_enabled.
Definition asm_inline_gcc.h:52
static ALWAYS_INLINE bool arch_irq_unlocked(unsigned int key)
Definition asm_inline_gcc.h:45
__UINT32_TYPE__ uint32_t
Definition stdint.h:90