2 * SiFive PLIC (Platform Level Interrupt Controller) interface
4 * Copyright (c) 2017 SiFive, Inc.
6 * This provides a RISC-V PLIC device
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms and conditions of the GNU General Public License,
10 * version 2 or later, as published by the Free Software Foundation.
12 * This program is distributed in the hope it will be useful, but WITHOUT
13 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
17 * You should have received a copy of the GNU General Public License along with
18 * this program. If not, see <http://www.gnu.org/licenses/>.
21 #ifndef HW_SIFIVE_PLIC_H
22 #define HW_SIFIVE_PLIC_H
24 #include "hw/sysbus.h"
26 #define TYPE_SIFIVE_PLIC "riscv.sifive.plic"
28 #define SIFIVE_PLIC(obj) \
29 OBJECT_CHECK(SiFivePLICState, (obj), TYPE_SIFIVE_PLIC)
31 typedef enum PLICMode
{
38 typedef struct PLICAddr
{
44 typedef struct SiFivePLICState
{
46 SysBusDevice parent_obj
;
52 uint32_t bitfield_words
;
53 PLICAddr
*addr_config
;
54 uint32_t *source_priority
;
55 uint32_t *target_priority
;
64 uint32_t num_priorities
;
65 uint32_t priority_base
;
66 uint32_t pending_base
;
68 uint32_t enable_stride
;
69 uint32_t context_base
;
70 uint32_t context_stride
;
71 uint32_t aperture_size
;
74 DeviceState
*sifive_plic_create(hwaddr addr
, char *hart_config
,
75 uint32_t hartid_base
, uint32_t num_sources
,
76 uint32_t num_priorities
, uint32_t priority_base
,
77 uint32_t pending_base
, uint32_t enable_base
,
78 uint32_t enable_stride
, uint32_t context_base
,
79 uint32_t context_stride
, uint32_t aperture_size
);