|  | /* | 
|  | * ASPEED INTC Controller | 
|  | * | 
|  | * Copyright (C) 2024 ASPEED Technology Inc. | 
|  | * | 
|  | * SPDX-License-Identifier: GPL-2.0-or-later | 
|  | */ | 
|  | #ifndef ASPEED_INTC_H | 
|  | #define ASPEED_INTC_H | 
|  |  | 
|  | #include "hw/sysbus.h" | 
|  | #include "qom/object.h" | 
|  | #include "hw/or-irq.h" | 
|  |  | 
|  | #define TYPE_ASPEED_INTC "aspeed.intc" | 
|  | #define TYPE_ASPEED_2700_INTC TYPE_ASPEED_INTC "-ast2700" | 
|  | #define TYPE_ASPEED_2700_INTCIO TYPE_ASPEED_INTC "io-ast2700" | 
|  | #define TYPE_ASPEED_2700SSP_INTC TYPE_ASPEED_INTC "-ast2700ssp" | 
|  | #define TYPE_ASPEED_2700SSP_INTCIO TYPE_ASPEED_INTC "io-ast2700ssp" | 
|  | #define TYPE_ASPEED_2700TSP_INTC TYPE_ASPEED_INTC "-ast2700tsp" | 
|  | #define TYPE_ASPEED_2700TSP_INTCIO TYPE_ASPEED_INTC "io-ast2700tsp" | 
|  |  | 
|  | OBJECT_DECLARE_TYPE(AspeedINTCState, AspeedINTCClass, ASPEED_INTC) | 
|  |  | 
|  | #define ASPEED_INTC_MAX_INPINS 10 | 
|  | #define ASPEED_INTC_MAX_OUTPINS 19 | 
|  |  | 
|  | typedef struct AspeedINTCIRQ { | 
|  | int inpin_idx; | 
|  | int outpin_idx; | 
|  | int num_outpins; | 
|  | uint32_t enable_reg; | 
|  | uint32_t status_reg; | 
|  | } AspeedINTCIRQ; | 
|  |  | 
|  | struct AspeedINTCState { | 
|  | /*< private >*/ | 
|  | SysBusDevice parent_obj; | 
|  |  | 
|  | /*< public >*/ | 
|  | MemoryRegion iomem; | 
|  | MemoryRegion iomem_container; | 
|  |  | 
|  | uint32_t *regs; | 
|  | OrIRQState orgates[ASPEED_INTC_MAX_INPINS]; | 
|  | qemu_irq output_pins[ASPEED_INTC_MAX_OUTPINS]; | 
|  |  | 
|  | uint32_t enable[ASPEED_INTC_MAX_INPINS]; | 
|  | uint32_t mask[ASPEED_INTC_MAX_INPINS]; | 
|  | uint32_t pending[ASPEED_INTC_MAX_INPINS]; | 
|  | }; | 
|  |  | 
|  | struct AspeedINTCClass { | 
|  | SysBusDeviceClass parent_class; | 
|  |  | 
|  | uint32_t num_lines; | 
|  | uint32_t num_inpins; | 
|  | uint32_t num_outpins; | 
|  | uint64_t mem_size; | 
|  | uint64_t nr_regs; | 
|  | uint64_t reg_offset; | 
|  | const MemoryRegionOps *reg_ops; | 
|  | const AspeedINTCIRQ *irq_table; | 
|  | int irq_table_count; | 
|  | }; | 
|  |  | 
|  | #endif /* ASPEED_INTC_H */ |