master
h 69 lines 1.82 KB
Raw
1 /*
2 * ASPEED INTC Controller
3 *
4 * Copyright (C) 2024 ASPEED Technology Inc.
5 *
6 * SPDX-License-Identifier: GPL-2.0-or-later
7 */
8 #ifndef ASPEED_INTC_H
9 #define ASPEED_INTC_H
10
11 #include "hw/core/sysbus.h"
12 #include "qom/object.h"
13 #include "hw/core/or-irq.h"
14
15 #define TYPE_ASPEED_INTC "aspeed.intc"
16 #define TYPE_ASPEED_2700_INTC TYPE_ASPEED_INTC "-ast2700"
17 #define TYPE_ASPEED_2700_INTCIO TYPE_ASPEED_INTC "io-ast2700"
18 #define TYPE_ASPEED_2700_INTCIOEXP1 TYPE_ASPEED_INTC "-ast2700-ioexp1"
19 #define TYPE_ASPEED_2700_INTCIOEXP2 TYPE_ASPEED_INTC "-ast2700-ioexp2"
20 #define TYPE_ASPEED_2700SSP_INTC TYPE_ASPEED_INTC "-ast2700ssp"
21 #define TYPE_ASPEED_2700SSP_INTCIO TYPE_ASPEED_INTC "io-ast2700ssp"
22 #define TYPE_ASPEED_2700TSP_INTC TYPE_ASPEED_INTC "-ast2700tsp"
23 #define TYPE_ASPEED_2700TSP_INTCIO TYPE_ASPEED_INTC "io-ast2700tsp"
24
25 OBJECT_DECLARE_TYPE(AspeedINTCState, AspeedINTCClass, ASPEED_INTC)
26
27 #define ASPEED_INTC_MAX_INPINS 10
28 #define ASPEED_INTC_MAX_OUTPINS 19
29
30 typedef struct AspeedINTCIRQ {
31 int inpin_idx;
32 int outpin_idx;
33 int num_outpins;
34 uint32_t enable_reg;
35 uint32_t status_reg;
36 } AspeedINTCIRQ;
37
38 struct AspeedINTCState {
39 /*< private >*/
40 SysBusDevice parent_obj;
41
42 /*< public >*/
43 MemoryRegion iomem;
44 MemoryRegion iomem_container;
45
46 uint32_t *regs;
47 OrIRQState orgates[ASPEED_INTC_MAX_INPINS];
48 qemu_irq output_pins[ASPEED_INTC_MAX_OUTPINS];
49
50 uint32_t enable[ASPEED_INTC_MAX_INPINS];
51 uint32_t mask[ASPEED_INTC_MAX_INPINS];
52 uint32_t pending[ASPEED_INTC_MAX_INPINS];
53 };
54
55 struct AspeedINTCClass {
56 SysBusDeviceClass parent_class;
57
58 uint32_t num_lines;
59 uint32_t num_inpins;
60 uint32_t num_outpins;
61 uint64_t mem_size;
62 uint64_t nr_regs;
63 uint64_t reg_offset;
64 const MemoryRegionOps *reg_ops;
65 const AspeedINTCIRQ *irq_table;
66 int irq_table_count;
67 };
68
69 #endif /* ASPEED_INTC_H */