8#ifndef __SOF_DRIVERS_INTERRUPT_H__
9#define __SOF_DRIVERS_INTERRUPT_H__
11#include <platform/drivers/interrupt.h>
13#if !defined(__ASSEMBLER__) && !defined(LINKER)
14#include <arch/drivers/interrupt.h>
19#include <sof/trace/trace.h>
125#if defined(__ZEPHYR__) && (defined(CONFIG_IMX) || defined(CONFIG_AMD))
126int mux_interrupt_get_irq(
unsigned int irq,
const char *cascade);
127int mux_interrupt_register(uint32_t irq,
void(*handler)(
void *arg),
void *arg);
128void mux_interrupt_unregister(uint32_t irq,
const void *arg);
129uint32_t mux_interrupt_enable(uint32_t irq,
void *arg);
130uint32_t mux_interrupt_disable(uint32_t irq,
void *arg);
139#if !defined(__ZEPHYR__)
140#define arch_irq_lock() arch_interrupt_disable_mask(0xffffffff)
155#define interrupt_is_dsp_direct(irq) (!PLATFORM_IRQ_CHILDREN || \
156 irq < PLATFORM_IRQ_HW_NUM)
180 return arch_interrupt_global_disable();
185 arch_interrupt_global_enable(flags);
193static inline void __irq_local_disable(
unsigned long flags) {}
194static inline void __irq_local_enable(
unsigned long flags) {}
197#define irq_local_disable(flags) \
200 __irq_local_disable(flags); \
204#define irq_local_enable(flags) \
205 __irq_local_enable(flags)
209#define irq_local_disable(flags) \
210 (flags = interrupt_global_disable())
213#define irq_local_enable(flags) \
214 interrupt_global_enable(flags)
#define list_item(item, type, member)
Definition list.h:80
struct sof * sof_get(void)
Cascading interrupt controller root.
Definition interrupt.h:111
struct k_spinlock lock
locking mechanism
Definition interrupt.h:112
int last_irq
last registered cascade irq
Definition interrupt.h:114
struct irq_cascade_desc * list
list of child cascade irqs
Definition interrupt.h:113
cascading interrupt controller descriptor.
Definition interrupt.h:60
const struct irq_cascade_ops * ops
cascading interrupt controller driver operations
Definition interrupt.h:68
struct k_spinlock lock
protect child lists, enable and child counters
Definition interrupt.h:84
unsigned int num_children[CONFIG_CORE_COUNT]
number of children
Definition interrupt.h:91
struct irq_cascade_desc * next
link to the global list of interrupt controllers
Definition interrupt.h:76
const char * name
name of the controller
Definition interrupt.h:61
int enable_count[CONFIG_CORE_COUNT]
enabled child interrupt counter
Definition interrupt.h:88
int irq_base
first virtual IRQ number, assigned to this controller
Definition interrupt.h:64
struct irq_child child[PLATFORM_IRQ_CHILDREN]
array of child lists - one per multiplexed IRQ
Definition interrupt.h:93
struct irq_desc desc
the interrupt, that this controller is generating
Definition interrupt.h:72
bool global_mask
the controller cannot mask input interrupts per core
Definition interrupt.h:80
cascading IRQ controller operations.
Definition interrupt.h:50
void(* mask)(struct irq_desc *desc, uint32_t irq, unsigned int cpu)
mask
Definition interrupt.h:51
void(* unmask)(struct irq_desc *desc, uint32_t irq, unsigned int cpu)
unmask
Definition interrupt.h:53
Definition interrupt.h:100
bool global_mask
Definition interrupt.h:105
const char * name
Definition interrupt.h:101
const struct irq_cascade_ops * ops
Definition interrupt.h:102
int irq
Definition interrupt.h:103
void(* handler)(void *arg)
Definition interrupt.h:104
child IRQ descriptor for cascading IRQ controllers.
Definition interrupt.h:27
struct list_item list
head for IRQ descriptors, sharing this interrupt
Definition interrupt.h:29
int enable_count[CONFIG_CORE_COUNT]
IRQ enable counter.
Definition interrupt.h:28
interrupt client descriptor
Definition interrupt.h:37
struct list_item irq_list
to link to other irq_desc
Definition interrupt.h:44
void(* handler)(void *arg)
interrupt handler function
Definition interrupt.h:39
void * handler_arg
interrupt handler argument
Definition interrupt.h:40
uint32_t cpu_mask
a mask of CPUs on which this interrupt is enabled
Definition interrupt.h:41
int irq
virtual IRQ number
Definition interrupt.h:38
General firmware context.
Definition sof.h:44
struct cascade_root * cascade_root
Definition sof.h:94
void interrupt_unregister(uint32_t irq, const void *arg)
static uint32_t interrupt_global_disable(void)
Definition interrupt.h:178
void platform_interrupt_init(void)
void interrupt_init(struct sof *sof)
void platform_interrupt_set(uint32_t irq)
static void interrupt_clear(int irq)
Definition interrupt.h:173
uint32_t platform_interrupt_get_enabled(void)
uint32_t interrupt_enable(uint32_t irq, void *arg)
void platform_interrupt_clear(uint32_t irq, uint32_t mask)
struct irq_cascade_desc * interrupt_get_parent(uint32_t irq)
int interrupt_cascade_register(const struct irq_cascade_tmpl *tmpl)
void interrupt_mask(uint32_t irq, unsigned int cpu)
static void interrupt_global_enable(uint32_t flags)
Definition interrupt.h:183
int interrupt_register(uint32_t irq, void(*handler)(void *arg), void *arg)
static void interrupt_set(int irq)
Definition interrupt.h:163
uint32_t interrupt_disable(uint32_t irq, void *arg)
static struct cascade_root * cascade_root_get(void)
Definition interrupt.h:117
void interrupt_unmask(uint32_t irq, unsigned int cpu)
int interrupt_get_irq(unsigned int irq, const char *cascade)
static void interrupt_clear_mask(int irq, uint32_t mask)
Definition interrupt.h:168