1 
2 /*
3  * Copyright (C) 2017-2019 Alibaba Group Holding Limited
4  *
5  * SPDX-License-Identifier: Apache-2.0
6  *
7  * Change Logs:
8  * Date           Author       Notes
9  * 2020-08-20     zx.chen      CSI Source File for IRQ Driver
10  */
11 
12 #include <stdint.h>
13 #include <soc.h>
14 #include <csi_core.h>
15 #include <csi_config.h>
16 
17 extern void Default_Handler(void);
18 extern void (*g_irqvector[])(void);
19 extern void (*g_nmivector)(void);
20 
21 /**
22   \brief       enable irq.
23   \param[in]   irq_num Number of IRQ.
24   \return      None.
25 */
drv_irq_enable(uint32_t irq_num)26 void drv_irq_enable(uint32_t irq_num)
27 {
28     if (NMI_EXPn != irq_num)
29     {
30     #ifdef CONFIG_SYSTEM_SECURE
31         csi_vic_enable_sirq(irq_num);
32     #else
33         csi_vic_enable_irq(irq_num);
34     #endif
35     }
36 }
37 
38 /**
39   \brief       disable irq.
40   \param[in]   irq_num Number of IRQ.
41   \return      None.
42 */
drv_irq_disable(uint32_t irq_num)43 void drv_irq_disable(uint32_t irq_num)
44 {
45     if (NMI_EXPn != irq_num)
46     {
47     #ifdef CONFIG_SYSTEM_SECURE
48         csi_vic_disable_sirq(irq_num);
49     #else
50         csi_vic_disable_irq(irq_num);
51     #endif
52     }
53 }
54 
55 /**
56   \brief       register irq handler.
57   \param[in]   irq_num Number of IRQ.
58   \param[in]   irq_handler IRQ Handler.
59   \return      None.
60 */
drv_irq_register(uint32_t irq_num,void * irq_handler)61 void drv_irq_register(uint32_t irq_num, void *irq_handler)
62 {
63     if (NMI_EXPn != irq_num)
64     {
65         g_irqvector[irq_num] = irq_handler;
66     }
67     else
68     {
69         g_nmivector = irq_handler;
70     }
71 }
72 
73 /**
74   \brief       unregister irq handler.
75   \param[in]   irq_num Number of IRQ.
76   \return      None.
77 */
drv_irq_unregister(uint32_t irq_num)78 void drv_irq_unregister(uint32_t irq_num)
79 {
80     if (NMI_EXPn != irq_num)
81     {
82         g_irqvector[irq_num] = (void *)Default_Handler;
83     }
84     else
85     {
86         g_nmivector = (void *)Default_Handler;
87     }
88 }
89