1 /*
2  * Copyright (c) 2006-2023, RT-Thread Development Team
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Change Logs:
7  * Date           Author       Notes
8  * 2024/01/11     flyingcys    The first version
9  */
10 
11 #ifndef __INTERRUPT_H__
12 #define __INTERRUPT_H__
13 
14 #include <rtconfig.h>
15 
16 #define NR_CPUS       1
17 
18 #define IRQ_OFFSET          16
19 #define INTERRUPTS_MAX      (IRQ_OFFSET + IRQ_MAX_NR)
20 
21 #define PLIC_BASE               0x70000000
22 #define PLIC_PRIORITY0          (PLIC_BASE + 0x0)
23 #define PLIC_PRIORITY1          (PLIC_BASE + 0x4)
24 #define PLIC_PRIORITY2          (PLIC_BASE + 0x8)
25 #define PLIC_PRIORITY3          (PLIC_BASE + 0xc)
26 #define PLIC_PRIORITY4          (PLIC_BASE + 0x10)
27 
28 #define PLIC_PENDING1           (PLIC_BASE + 0x1000)
29 #define PLIC_PENDING2           (PLIC_BASE + 0x1004)
30 #define PLIC_PENDING3           (PLIC_BASE + 0x1008)
31 #define PLIC_PENDING4           (PLIC_BASE + 0x100C)
32 
33 #define PLIC_ENABLE1            (PLIC_BASE + 0x2000)
34 #define PLIC_ENABLE2            (PLIC_BASE + 0x2004)
35 #define PLIC_ENABLE3            (PLIC_BASE + 0x2008)
36 #define PLIC_ENABLE4            (PLIC_BASE + 0x200C)
37 
38 #define PLIC_THRESHOLD          (PLIC_BASE + 0x200000)
39 #define PLIC_CLAIM              (PLIC_BASE + 0x200004)
40 
41 #define PLIC_PRIORITY_OFFSET            (0x0)
42 #define PLIC_PENDING_OFFSET             (0x1000)
43 #define PLIC_ENABLE_OFFSET              (0x2000)
44 
45 #define PLIC_ENABLE_STRIDE              0x80
46 #define PLIC_CONTEXT_STRIDE             0x1000
47 
48 #define PLIC_PRIORITY(id)               (BSP_PLIC_PHY_ADDR + PLIC_PRIORITY_OFFSET + (id) * 4)
49 #define PLIC_PENDING(id)                (BSP_PLIC_PHY_ADDR + PLIC_PENDING_OFFSET + ((id) / 32))
50 #define PLIC_ENABLE(id)                 (BSP_PLIC_PHY_ADDR + PLIC_ENABLE_OFFSET + ((id) / 32))
51 
52 void rt_hw_interrupt_init(void);
53 void rt_hw_interrupt_mask(int vector);
54 void rt_hw_interrupt_umask(int vector);
55 rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler, void *param, const char *name);
56 
57 #endif
58