diff --git a/core/main.c b/core/main.c index e1b0dfaab..aa3df4159 100644 --- a/core/main.c +++ b/core/main.c @@ -781,7 +781,7 @@ main(int argc, char *argv[]) pci_irq_init(ctx); atkbdc_init(ctx); ioapic_init(ctx); - ioc_init(); + ioc_init(ctx); vrtc_init(ctx); sci_init(ctx); diff --git a/hw/platform/ioc.c b/hw/platform/ioc.c index 4dddf954d..53f8d1087 100644 --- a/hw/platform/ioc.c +++ b/hw/platform/ioc.c @@ -89,6 +89,7 @@ #include #include "ioc.h" +#include "vmmapi.h" /* For debugging log to a file */ static int ioc_debug; @@ -1051,8 +1052,8 @@ ioc_parse(const char *opts) /* * IOC mediator main entry. */ -struct ioc_dev * -ioc_init(void) +int +ioc_init(struct vmctx *ctx) { int i; struct ioc_dev *ioc; @@ -1161,7 +1162,9 @@ ioc_init(void) (void *)ioc) < 0) goto work_err; - return ioc; + ctx->ioc_dev = ioc; + return 0; + work_err: pthread_mutex_destroy(&ioc->rx_mtx); pthread_cond_destroy(&ioc->rx_cond); @@ -1179,15 +1182,17 @@ alloc_err: ioc_err: IOC_LOG_DEINIT; DPRINTF("%s", "ioc mediator startup failed!!\r\n"); - return NULL; + return -1; } /* * Called by DM in main entry. */ void -ioc_deinit(struct ioc_dev *ioc) +ioc_deinit(struct vmctx *ctx) { + struct ioc_dev *ioc = ctx->ioc_dev; + if (!ioc) { DPRINTF("%s", "ioc deinit parameter is NULL\r\n"); return; @@ -1199,4 +1204,6 @@ ioc_deinit(struct ioc_dev *ioc) free(ioc->pool); free(ioc); IOC_LOG_DEINIT; + + ctx->ioc_dev = NULL; } diff --git a/include/ioc.h b/include/ioc.h index c9b79cab7..1df1bb646 100644 --- a/include/ioc.h +++ b/include/ioc.h @@ -710,9 +710,11 @@ struct ioc_dev { /* Parse IOC parameters */ int ioc_parse(const char *opts); +struct vmctx; + /* IOC mediator common ops */ -struct ioc_dev *ioc_init(void); -void ioc_deinit(struct ioc_dev *dev); +int ioc_init(struct vmctx *ctx); +void ioc_deinit(struct vmctx *ctx); /* Build a cbc_request and send it to CBC protocol stack */ void ioc_build_request(struct ioc_dev *ioc, int32_t link_len, int32_t srv_len); diff --git a/include/vmmapi.h b/include/vmmapi.h index 409621476..2cf9e6c30 100644 --- a/include/vmmapi.h +++ b/include/vmmapi.h @@ -62,6 +62,7 @@ struct vmctx { /* fields to track virtual devices */ void *atkbdc_base; void *vrtc; + void *ioc_dev; }; /*