mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 08:13:54 -06:00
xics: split to xics and xics-common
The upcoming XICS-KVM support will use bits of emulated XICS code. So this introduces new level of hierarchy - "xics-common" class. Both emulated XICS and XICS-KVM will inherit from it and override class callbacks when required. The new "xics-common" class implements: 1. replaces static "nr_irqs" and "nr_servers" properties with the dynamic ones and adds callbacks to be executed when properties are set. 2. xics_cpu_setup() callback renamed to xics_common_cpu_setup() as it is a common part for both XICS'es 3. xics_reset() renamed to xics_common_reset() for the same reason. The emulated XICS changes: 1. the part of xics_realize() which creates ICPs is moved to the "nr_servers" property callback as realize() is too late to create/initialize devices and instance_init() is too early to create devices as the number of child devices comes via the "nr_servers" property. 2. added ics_initfn() which does a little part of what xics_realize() did. Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru> Reviewed-by: Alexander Graf <agraf@suse.de> Signed-off-by: Alexander Graf <agraf@suse.de>
This commit is contained in:
parent
456df19cf7
commit
5a3d7b23ba
3 changed files with 157 additions and 21 deletions
|
@ -29,9 +29,21 @@
|
|||
|
||||
#include "hw/sysbus.h"
|
||||
|
||||
#define TYPE_XICS_COMMON "xics-common"
|
||||
#define XICS_COMMON(obj) OBJECT_CHECK(XICSState, (obj), TYPE_XICS_COMMON)
|
||||
|
||||
#define TYPE_XICS "xics"
|
||||
#define XICS(obj) OBJECT_CHECK(XICSState, (obj), TYPE_XICS)
|
||||
|
||||
#define XICS_COMMON_CLASS(klass) \
|
||||
OBJECT_CLASS_CHECK(XICSStateClass, (klass), TYPE_XICS_COMMON)
|
||||
#define XICS_CLASS(klass) \
|
||||
OBJECT_CLASS_CHECK(XICSStateClass, (klass), TYPE_XICS)
|
||||
#define XICS_COMMON_GET_CLASS(obj) \
|
||||
OBJECT_GET_CLASS(XICSStateClass, (obj), TYPE_XICS_COMMON)
|
||||
#define XICS_GET_CLASS(obj) \
|
||||
OBJECT_GET_CLASS(XICSStateClass, (obj), TYPE_XICS)
|
||||
|
||||
#define XICS_IPI 0x2
|
||||
#define XICS_BUID 0x1
|
||||
#define XICS_IRQ_BASE (XICS_BUID << 12)
|
||||
|
@ -41,6 +53,7 @@
|
|||
* (the kernel implementation supports more but we don't exploit
|
||||
* that yet)
|
||||
*/
|
||||
typedef struct XICSStateClass XICSStateClass;
|
||||
typedef struct XICSState XICSState;
|
||||
typedef struct ICPStateClass ICPStateClass;
|
||||
typedef struct ICPState ICPState;
|
||||
|
@ -48,6 +61,13 @@ typedef struct ICSStateClass ICSStateClass;
|
|||
typedef struct ICSState ICSState;
|
||||
typedef struct ICSIRQState ICSIRQState;
|
||||
|
||||
struct XICSStateClass {
|
||||
DeviceClass parent_class;
|
||||
|
||||
void (*set_nr_irqs)(XICSState *icp, uint32_t nr_irqs, Error **errp);
|
||||
void (*set_nr_servers)(XICSState *icp, uint32_t nr_servers, Error **errp);
|
||||
};
|
||||
|
||||
struct XICSState {
|
||||
/*< private >*/
|
||||
SysBusDevice parent_obj;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue