mirror of https://github.com/xemu-project/xemu.git
xive: Add a "presenter" link property to the TCTX object
This will be used in subsequent patches to access the XIVE associated to a TCTX without reaching out to the machine through qdev_get_machine(). Signed-off-by: Cédric Le Goater <clg@kaod.org> [ groug: - split patch - write subject and changelog ] Signed-off-by: Greg Kurz <groug@kaod.org> Signed-off-by: Cédric Le Goater <clg@kaod.org> Message-Id: <20200106145645.4539-9-clg@kaod.org> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
d8137bb729
commit
479509463b
|
@ -601,7 +601,7 @@ static int spapr_xive_cpu_intc_create(SpaprInterruptController *intc,
|
||||||
Object *obj;
|
Object *obj;
|
||||||
SpaprCpuState *spapr_cpu = spapr_cpu_state(cpu);
|
SpaprCpuState *spapr_cpu = spapr_cpu_state(cpu);
|
||||||
|
|
||||||
obj = xive_tctx_create(OBJECT(cpu), XIVE_ROUTER(xive), errp);
|
obj = xive_tctx_create(OBJECT(cpu), XIVE_PRESENTER(xive), errp);
|
||||||
if (!obj) {
|
if (!obj) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -654,6 +654,7 @@ static void xive_tctx_realize(DeviceState *dev, Error **errp)
|
||||||
Error *local_err = NULL;
|
Error *local_err = NULL;
|
||||||
|
|
||||||
assert(tctx->cs);
|
assert(tctx->cs);
|
||||||
|
assert(tctx->xptr);
|
||||||
|
|
||||||
cpu = POWERPC_CPU(tctx->cs);
|
cpu = POWERPC_CPU(tctx->cs);
|
||||||
env = &cpu->env;
|
env = &cpu->env;
|
||||||
|
@ -727,6 +728,8 @@ static const VMStateDescription vmstate_xive_tctx = {
|
||||||
|
|
||||||
static Property xive_tctx_properties[] = {
|
static Property xive_tctx_properties[] = {
|
||||||
DEFINE_PROP_LINK("cpu", XiveTCTX, cs, TYPE_CPU, CPUState *),
|
DEFINE_PROP_LINK("cpu", XiveTCTX, cs, TYPE_CPU, CPUState *),
|
||||||
|
DEFINE_PROP_LINK("presenter", XiveTCTX, xptr, TYPE_XIVE_PRESENTER,
|
||||||
|
XivePresenter *),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
DEFINE_PROP_END_OF_LIST(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -752,7 +755,7 @@ static const TypeInfo xive_tctx_info = {
|
||||||
.class_init = xive_tctx_class_init,
|
.class_init = xive_tctx_class_init,
|
||||||
};
|
};
|
||||||
|
|
||||||
Object *xive_tctx_create(Object *cpu, XiveRouter *xrtr, Error **errp)
|
Object *xive_tctx_create(Object *cpu, XivePresenter *xptr, Error **errp)
|
||||||
{
|
{
|
||||||
Error *local_err = NULL;
|
Error *local_err = NULL;
|
||||||
Object *obj;
|
Object *obj;
|
||||||
|
@ -761,6 +764,7 @@ Object *xive_tctx_create(Object *cpu, XiveRouter *xrtr, Error **errp)
|
||||||
object_property_add_child(cpu, TYPE_XIVE_TCTX, obj, &error_abort);
|
object_property_add_child(cpu, TYPE_XIVE_TCTX, obj, &error_abort);
|
||||||
object_unref(obj);
|
object_unref(obj);
|
||||||
object_property_set_link(obj, cpu, "cpu", &error_abort);
|
object_property_set_link(obj, cpu, "cpu", &error_abort);
|
||||||
|
object_property_set_link(obj, OBJECT(xptr), "presenter", &error_abort);
|
||||||
object_property_set_bool(obj, true, "realized", &local_err);
|
object_property_set_bool(obj, true, "realized", &local_err);
|
||||||
if (local_err) {
|
if (local_err) {
|
||||||
goto error;
|
goto error;
|
||||||
|
|
|
@ -925,7 +925,8 @@ static void pnv_chip_power9_intc_create(PnvChip *chip, PowerPCCPU *cpu,
|
||||||
* controller object is initialized afterwards. Hopefully, it's
|
* controller object is initialized afterwards. Hopefully, it's
|
||||||
* only used at runtime.
|
* only used at runtime.
|
||||||
*/
|
*/
|
||||||
obj = xive_tctx_create(OBJECT(cpu), XIVE_ROUTER(&chip9->xive), &local_err);
|
obj = xive_tctx_create(OBJECT(cpu), XIVE_PRESENTER(&chip9->xive),
|
||||||
|
&local_err);
|
||||||
if (local_err) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -311,6 +311,8 @@ void xive_source_set_irq(void *opaque, int srcno, int val);
|
||||||
#define XIVE_TM_RING_COUNT 4
|
#define XIVE_TM_RING_COUNT 4
|
||||||
#define XIVE_TM_RING_SIZE 0x10
|
#define XIVE_TM_RING_SIZE 0x10
|
||||||
|
|
||||||
|
typedef struct XivePresenter XivePresenter;
|
||||||
|
|
||||||
typedef struct XiveTCTX {
|
typedef struct XiveTCTX {
|
||||||
DeviceState parent_obj;
|
DeviceState parent_obj;
|
||||||
|
|
||||||
|
@ -319,6 +321,8 @@ typedef struct XiveTCTX {
|
||||||
qemu_irq os_output;
|
qemu_irq os_output;
|
||||||
|
|
||||||
uint8_t regs[XIVE_TM_RING_COUNT * XIVE_TM_RING_SIZE];
|
uint8_t regs[XIVE_TM_RING_COUNT * XIVE_TM_RING_SIZE];
|
||||||
|
|
||||||
|
XivePresenter *xptr;
|
||||||
} XiveTCTX;
|
} XiveTCTX;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -378,8 +382,6 @@ typedef struct XiveTCTXMatch {
|
||||||
uint8_t ring;
|
uint8_t ring;
|
||||||
} XiveTCTXMatch;
|
} XiveTCTXMatch;
|
||||||
|
|
||||||
typedef struct XivePresenter XivePresenter;
|
|
||||||
|
|
||||||
#define TYPE_XIVE_PRESENTER "xive-presenter"
|
#define TYPE_XIVE_PRESENTER "xive-presenter"
|
||||||
#define XIVE_PRESENTER(obj) \
|
#define XIVE_PRESENTER(obj) \
|
||||||
INTERFACE_CHECK(XivePresenter, (obj), TYPE_XIVE_PRESENTER)
|
INTERFACE_CHECK(XivePresenter, (obj), TYPE_XIVE_PRESENTER)
|
||||||
|
@ -467,7 +469,7 @@ uint64_t xive_tctx_tm_read(XivePresenter *xptr, XiveTCTX *tctx, hwaddr offset,
|
||||||
unsigned size);
|
unsigned size);
|
||||||
|
|
||||||
void xive_tctx_pic_print_info(XiveTCTX *tctx, Monitor *mon);
|
void xive_tctx_pic_print_info(XiveTCTX *tctx, Monitor *mon);
|
||||||
Object *xive_tctx_create(Object *cpu, XiveRouter *xrtr, Error **errp);
|
Object *xive_tctx_create(Object *cpu, XivePresenter *xptr, Error **errp);
|
||||||
void xive_tctx_reset(XiveTCTX *tctx);
|
void xive_tctx_reset(XiveTCTX *tctx);
|
||||||
void xive_tctx_destroy(XiveTCTX *tctx);
|
void xive_tctx_destroy(XiveTCTX *tctx);
|
||||||
void xive_tctx_ipb_update(XiveTCTX *tctx, uint8_t ring, uint8_t ipb);
|
void xive_tctx_ipb_update(XiveTCTX *tctx, uint8_t ring, uint8_t ipb);
|
||||||
|
|
Loading…
Reference in New Issue