1 /*
2  * Copyright (c) 2006-2021, RT-Thread Development Team
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Change Logs:
7  * Date           Author       Notes
8  * 2013-07-06     Bernard      first version
9  */
10 
11 #ifndef __INTERRUPT_H__
12 #define __INTERRUPT_H__
13 
14 #include <rthw.h>
15 #include <board.h>
16 
17 #define INT_IRQ     0x00
18 #define INT_FIQ     0x01
19 
20 #define IRQ_MODE_TRIG_LEVEL         (0x00) /* Trigger: level triggered interrupt */
21 #define IRQ_MODE_TRIG_EDGE          (0x01) /* Trigger: edge triggered interrupt */
22 #define IRQ_MODE_MASK               (0x01)
23 
24 void rt_hw_vector_init(void);
25 
26 void rt_hw_interrupt_init(void);
27 void rt_hw_interrupt_mask(int vector);
28 void rt_hw_interrupt_umask(int vector);
29 
30 int rt_hw_interrupt_get_irq(void);
31 void rt_hw_interrupt_ack(int vector);
32 
33 void rt_hw_interrupt_set_target_cpus(int vector, unsigned int cpu_mask);
34 unsigned int rt_hw_interrupt_get_target_cpus(int vector);
35 
36 void rt_hw_interrupt_set_triger_mode(int vector, unsigned int mode);
37 unsigned int rt_hw_interrupt_get_triger_mode(int vector);
38 
39 void rt_hw_interrupt_set_pending(int vector);
40 unsigned int rt_hw_interrupt_get_pending(int vector);
41 void rt_hw_interrupt_clear_pending(int vector);
42 
43 void rt_hw_interrupt_set_priority(int vector, unsigned int priority);
44 unsigned int rt_hw_interrupt_get_priority(int vector);
45 
46 void rt_hw_interrupt_set_priority_mask(unsigned int priority);
47 unsigned int rt_hw_interrupt_get_priority_mask(void);
48 
49 int rt_hw_interrupt_set_prior_group_bits(unsigned int bits);
50 unsigned int rt_hw_interrupt_get_prior_group_bits(void);
51 
52 rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler,
53         void *param, const char *name);
54 
55 #ifdef RT_USING_SMP
56 void rt_hw_ipi_send(int ipi_vector, unsigned int cpu_mask);
57 void rt_hw_ipi_handler_install(int ipi_vector, rt_isr_handler_t ipi_isr_handler);
58 #endif
59 
60 #endif
61 
62