Zephyr API Documentation  3.0.0
A Scalable Open Source RTOS
3.0.0
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
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 <arch/cpu.h>
16
17#ifndef _ASMLANGUAGE
18#include <toolchain.h>
19#include <zephyr/types.h>
20
21#ifdef __cplusplus
22extern "C" {
23#endif
24
48#define IRQ_CONNECT(irq_p, priority_p, isr_p, isr_param_p, flags_p) \
49 ARCH_IRQ_CONNECT(irq_p, priority_p, isr_p, isr_param_p, flags_p)
50
64static inline int
65irq_connect_dynamic(unsigned int irq, unsigned int priority,
66 void (*routine)(const void *parameter),
67 const void *parameter, uint32_t flags)
68{
69 return arch_irq_connect_dynamic(irq, priority, routine, parameter,
70 flags);
71}
72
111#define IRQ_DIRECT_CONNECT(irq_p, priority_p, isr_p, flags_p) \
112 ARCH_IRQ_DIRECT_CONNECT(irq_p, priority_p, isr_p, flags_p)
113
121#define ISR_DIRECT_HEADER() ARCH_ISR_DIRECT_HEADER()
122
138#define ISR_DIRECT_FOOTER(check_reschedule) \
139 ARCH_ISR_DIRECT_FOOTER(check_reschedule)
140
149#define ISR_DIRECT_PM() ARCH_ISR_DIRECT_PM()
150
180#define ISR_DIRECT_DECLARE(name) ARCH_ISR_DIRECT_DECLARE(name)
181
223#ifdef CONFIG_SMP
224unsigned int z_smp_global_lock(void);
225#define irq_lock() z_smp_global_lock()
226#else
227#define irq_lock() arch_irq_lock()
228#endif
229
251#ifdef CONFIG_SMP
252void z_smp_global_unlock(unsigned int key);
253#define irq_unlock(key) z_smp_global_unlock(key)
254#else
255#define irq_unlock(key) arch_irq_unlock(key)
256#endif
257
268static inline unsigned int irq_get_level(unsigned int irq)
269{
270#if defined(CONFIG_3RD_LEVEL_INTERRUPTS)
271 return ((irq >> 16) & 0xFF) != 0 ? 3 :
272 (((irq >> 8) & 0xFF) == 0 ? 1 : 2);
273#elif defined(CONFIG_2ND_LEVEL_INTERRUPTS)
274 return ((irq >> 8) & 0xFF) == 0 ? 1 : 2;
275#else
276 ARG_UNUSED(irq);
277
278 return 1;
279#endif
280}
281
282#ifdef CONFIG_2ND_LEVEL_INTERRUPTS
294static inline unsigned int irq_from_level_2(unsigned int irq)
295{
296#ifdef CONFIG_3RD_LEVEL_INTERRUPTS
297 return ((irq >> 8) & 0xFF) - 1;
298#else
299 return (irq >> 8) - 1;
300#endif
301}
302
315static inline unsigned int irq_to_level_2(unsigned int irq)
316{
317 return (irq + 1) << 8;
318}
319
330static inline unsigned int irq_parent_level_2(unsigned int irq)
331{
332 return irq & 0xFF;
333}
334#endif
335
336#ifdef CONFIG_3RD_LEVEL_INTERRUPTS
348static inline unsigned int irq_from_level_3(unsigned int irq)
349{
350 return (irq >> 16) - 1;
351}
352
365static inline unsigned int irq_to_level_3(unsigned int irq)
366{
367 return (irq + 1) << 16;
368}
369
380static inline unsigned int irq_parent_level_3(unsigned int irq)
381{
382 return (irq >> 8) & 0xFF;
383}
384#endif
385
393#define irq_enable(irq) arch_irq_enable(irq)
394
402#define irq_disable(irq) arch_irq_disable(irq)
403
413#define irq_is_enabled(irq) arch_irq_is_enabled(irq)
414
419#ifdef __cplusplus
420}
421#endif
422
423#endif /* ASMLANGUAGE */
424#endif /* ZEPHYR_INCLUDE_IRQ_H_ */
int arch_irq_connect_dynamic(unsigned int irq, unsigned int priority, void(*routine)(const void *parameter), const void *parameter, uint32_t flags)
static unsigned int irq_get_level(unsigned int irq)
Definition: irq.h:268
static int irq_connect_dynamic(unsigned int irq, unsigned int priority, void(*routine)(const void *parameter), const void *parameter, uint32_t flags)
Definition: irq.h:65
flags
Definition: http_parser.h:131
static k_spinlock_key_t key
Definition: spinlock_error_case.c:14
__UINT32_TYPE__ uint32_t
Definition: stdint.h:60
Macros to abstract toolchain specific capabilities.