mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-31 22:11:53 -06:00

Currently, the size of the regs array is 0x2000, which is too large. So far, it only use GICINT128 - GICINT134, and the offsets from 0 to 0x1000 are unused. To save code size, introduce a new class attribute "reg_size" to set the different register sizes for the INTC models in AST2700 and add a regs sub-region in the memory container. Signed-off-by: Jamin Lin <jamin_lin@aspeedtech.com> Reviewed-by: Cédric Le Goater <clg@redhat.com> Link: https://lore.kernel.org/qemu-devel/20250307035945.3698802-5-jamin_lin@aspeedtech.com Signed-off-by: Cédric Le Goater <clg@redhat.com>
47 lines
1,021 B
C
47 lines
1,021 B
C
/*
|
|
* 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"
|
|
OBJECT_DECLARE_TYPE(AspeedINTCState, AspeedINTCClass, ASPEED_INTC)
|
|
|
|
#define ASPEED_INTC_NR_INTS 9
|
|
|
|
struct AspeedINTCState {
|
|
/*< private >*/
|
|
SysBusDevice parent_obj;
|
|
|
|
/*< public >*/
|
|
MemoryRegion iomem;
|
|
MemoryRegion iomem_container;
|
|
|
|
uint32_t *regs;
|
|
OrIRQState orgates[ASPEED_INTC_NR_INTS];
|
|
qemu_irq output_pins[ASPEED_INTC_NR_INTS];
|
|
|
|
uint32_t enable[ASPEED_INTC_NR_INTS];
|
|
uint32_t mask[ASPEED_INTC_NR_INTS];
|
|
uint32_t pending[ASPEED_INTC_NR_INTS];
|
|
};
|
|
|
|
struct AspeedINTCClass {
|
|
SysBusDeviceClass parent_class;
|
|
|
|
uint32_t num_lines;
|
|
uint32_t num_ints;
|
|
uint64_t mem_size;
|
|
uint64_t nr_regs;
|
|
};
|
|
|
|
#endif /* ASPEED_INTC_H */
|