1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20#ifndef HW_SIFIVE_CLINT_H
21#define HW_SIFIVE_CLINT_H
22
23#include "hw/sysbus.h"
24
25#define TYPE_SIFIVE_CLINT "riscv.sifive.clint"
26
27#define SIFIVE_CLINT(obj) \
28 OBJECT_CHECK(SiFiveCLINTState, (obj), TYPE_SIFIVE_CLINT)
29
30typedef struct SiFiveCLINTState {
31
32 SysBusDevice parent_obj;
33
34
35 MemoryRegion mmio;
36 uint32_t num_harts;
37 uint32_t sip_base;
38 uint32_t timecmp_base;
39 uint32_t time_base;
40 uint32_t aperture_size;
41} SiFiveCLINTState;
42
43DeviceState *sifive_clint_create(hwaddr addr, hwaddr size, uint32_t num_harts,
44 uint32_t sip_base, uint32_t timecmp_base, uint32_t time_base,
45 bool provide_rdtime);
46
47enum {
48 SIFIVE_SIP_BASE = 0x0,
49 SIFIVE_TIMECMP_BASE = 0x4000,
50 SIFIVE_TIME_BASE = 0xBFF8
51};
52
53enum {
54 SIFIVE_CLINT_TIMEBASE_FREQ = 10000000
55};
56
57#endif
58