Zephyr API Documentation 4.4.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
irq.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2015 Intel corporation
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
11#ifndef ZEPHYR_INCLUDE_IRQ_H_
12#define ZEPHYR_INCLUDE_IRQ_H_
13
14/* Pull in the arch-specific implementations */
15#include <zephyr/arch/cpu.h>
16
17#ifndef _ASMLANGUAGE
18#include <limits.h>
19#include <stdbool.h>
20#include <zephyr/toolchain.h>
21#include <zephyr/types.h>
22
23#ifdef __cplusplus
24extern "C" {
25#endif
26
32
50#define IRQ_CONNECT(irq_p, priority_p, isr_p, isr_param_p, flags_p) \
51 ARCH_IRQ_CONNECT(irq_p, priority_p, isr_p, isr_param_p, flags_p)
52
66static inline int
67irq_connect_dynamic(unsigned int irq, unsigned int priority,
68 void (*routine)(const void *parameter),
69 const void *parameter, uint32_t flags)
70{
71 return arch_irq_connect_dynamic(irq, priority, routine, parameter,
72 flags);
73}
74
91static inline int
92irq_disconnect_dynamic(unsigned int irq, unsigned int priority,
93 void (*routine)(const void *parameter),
94 const void *parameter, uint32_t flags)
95{
96 return arch_irq_disconnect_dynamic(irq, priority, routine,
97 parameter, flags);
98}
99
142#define IRQ_DIRECT_CONNECT(irq_p, priority_p, isr_p, flags_p) \
143 ARCH_IRQ_DIRECT_CONNECT(irq_p, priority_p, isr_p, flags_p)
144
152#define ISR_DIRECT_HEADER() ARCH_ISR_DIRECT_HEADER()
153
169#define ISR_DIRECT_FOOTER(check_reschedule) \
170 ARCH_ISR_DIRECT_FOOTER(check_reschedule)
171
184#define ISR_DIRECT_PM() ARCH_ISR_DIRECT_PM()
185
219#define ISR_DIRECT_DECLARE(name) ARCH_ISR_DIRECT_DECLARE(name)
220
258#ifdef CONFIG_SMP
259unsigned int z_smp_global_lock(void);
260#define irq_lock() z_smp_global_lock()
261#else
262#define irq_lock() arch_irq_lock()
263#endif
264
286#ifdef CONFIG_SMP
287void z_smp_global_unlock(unsigned int key);
288#define irq_unlock(key) z_smp_global_unlock(key)
289#else
290#define irq_unlock(key) arch_irq_unlock(key)
291#endif
292
300#define irq_enable(irq) arch_irq_enable(irq)
301
309#define irq_disable(irq) arch_irq_disable(irq)
310
320#define irq_is_enabled(irq) arch_irq_is_enabled(irq)
321
322/*
323 * Namespaced equivalents of the interrupt APIs above. New code should
324 * prefer these. The unprefixed names remain fully supported and must stay
325 * function-like macros: vendor HAL headers declare functions with those
326 * names, and a macro coexists with such a declaration where a function
327 * definition would conflict.
328 */
329
335static ALWAYS_INLINE unsigned int k_irq_lock(void)
336{
337 return irq_lock();
338}
339
345static ALWAYS_INLINE void k_irq_unlock(unsigned int key)
346{
347 irq_unlock(key);
348}
349
355static ALWAYS_INLINE void k_irq_enable(unsigned int irq)
356{
357 irq_enable(irq);
358}
359
365static ALWAYS_INLINE void k_irq_disable(unsigned int irq)
366{
367 irq_disable(irq);
368}
369
377static ALWAYS_INLINE int k_irq_is_enabled(unsigned int irq)
378{
379 return irq_is_enabled(irq);
380}
381
394static ALWAYS_INLINE int k_irq_connect_dynamic(unsigned int irq, unsigned int priority,
395 void (*routine)(const void *parameter),
396 const void *parameter, uint32_t flags)
397{
398 return irq_connect_dynamic(irq, priority, routine, parameter, flags);
399}
400
413static ALWAYS_INLINE int k_irq_disconnect_dynamic(unsigned int irq, unsigned int priority,
414 void (*routine)(const void *parameter),
415 const void *parameter, uint32_t flags)
416{
417 return irq_disconnect_dynamic(irq, priority, routine, parameter, flags);
418}
419
420#if defined(CONFIG_ARCH_HAS_IRQ_PENDING_OPS) || defined(__DOXYGEN__)
432static ALWAYS_INLINE void k_irq_clear_pending(unsigned int irq)
433{
435}
436
448static ALWAYS_INLINE void k_irq_set_pending(unsigned int irq)
449{
451}
452
466static ALWAYS_INLINE bool k_irq_is_pending(unsigned int irq)
467{
468 return arch_irq_is_pending(irq);
469}
470#endif /* CONFIG_ARCH_HAS_IRQ_PENDING_OPS */
471
472#if defined(CONFIG_ARCH_HAS_IRQ_GET_ACTIVE) || defined(__DOXYGEN__)
476#define K_IRQ_ACTIVE_NONE UINT_MAX
477
491static ALWAYS_INLINE unsigned int k_irq_get_active(void)
492{
493 return arch_irq_get_active();
494}
495#endif /* CONFIG_ARCH_HAS_IRQ_GET_ACTIVE */
496
500
501#ifdef __cplusplus
502}
503#endif
504
505#endif /* ASMLANGUAGE */
506#endif /* ZEPHYR_INCLUDE_IRQ_H_ */
int arch_irq_disconnect_dynamic(unsigned int irq, unsigned int priority, void(*routine)(const void *parameter), const void *parameter, uint32_t flags)
Arch-specific hook to dynamically uninstall a shared interrupt.
void arch_irq_clear_pending(unsigned int irq)
Clear the pending state of the specified interrupt line.
bool arch_irq_is_pending(unsigned int irq)
Test if the specified interrupt line is pending.
int arch_irq_connect_dynamic(unsigned int irq, unsigned int priority, void(*routine)(const void *parameter), const void *parameter, uint32_t flags)
Arch-specific hook to install a dynamic interrupt.
void arch_irq_set_pending(unsigned int irq)
Set the pending state of the specified interrupt line.
unsigned int arch_irq_get_active(void)
Report the interrupt line being serviced on the current CPU.
#define irq_lock()
Lock interrupts.
Definition irq.h:260
static ALWAYS_INLINE bool k_irq_is_pending(unsigned int irq)
Get IRQ pending state.
Definition irq.h:466
static ALWAYS_INLINE int k_irq_connect_dynamic(unsigned int irq, unsigned int priority, void(*routine)(const void *parameter), const void *parameter, uint32_t flags)
Configure a dynamic interrupt; namespaced equivalent of irq_connect_dynamic().
Definition irq.h:394
static ALWAYS_INLINE void k_irq_disable(unsigned int irq)
Disable an IRQ; namespaced equivalent of irq_disable().
Definition irq.h:365
static ALWAYS_INLINE void k_irq_unlock(unsigned int key)
Unlock interrupts; namespaced equivalent of irq_unlock().
Definition irq.h:345
static int irq_connect_dynamic(unsigned int irq, unsigned int priority, void(*routine)(const void *parameter), const void *parameter, uint32_t flags)
Configure a dynamic interrupt.
Definition irq.h:67
static ALWAYS_INLINE void k_irq_enable(unsigned int irq)
Enable an IRQ; namespaced equivalent of irq_enable().
Definition irq.h:355
#define irq_unlock(key)
Unlock interrupts.
Definition irq.h:288
#define irq_is_enabled(irq)
Get IRQ enable state.
Definition irq.h:320
#define irq_enable(irq)
Enable an IRQ.
Definition irq.h:300
#define irq_disable(irq)
Disable an IRQ.
Definition irq.h:309
static ALWAYS_INLINE void k_irq_clear_pending(unsigned int irq)
Clear the pending state of an IRQ.
Definition irq.h:432
static ALWAYS_INLINE unsigned int k_irq_get_active(void)
Get the IRQ currently being serviced on this CPU.
Definition irq.h:491
static ALWAYS_INLINE void k_irq_set_pending(unsigned int irq)
Set the pending state of an IRQ.
Definition irq.h:448
static ALWAYS_INLINE int k_irq_is_enabled(unsigned int irq)
Get IRQ enable state; namespaced equivalent of irq_is_enabled().
Definition irq.h:377
static int irq_disconnect_dynamic(unsigned int irq, unsigned int priority, void(*routine)(const void *parameter), const void *parameter, uint32_t flags)
Disconnect a dynamic interrupt.
Definition irq.h:92
static ALWAYS_INLINE unsigned int k_irq_lock(void)
Lock interrupts; namespaced equivalent of irq_lock().
Definition irq.h:335
static ALWAYS_INLINE int k_irq_disconnect_dynamic(unsigned int irq, unsigned int priority, void(*routine)(const void *parameter), const void *parameter, uint32_t flags)
Disconnect a dynamic interrupt; namespaced equivalent of irq_disconnect_dynamic().
Definition irq.h:413
flags
Definition parser.h:97
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
Macros to abstract toolchain specific capabilities.