New state members will be used for async IO implementation later. Signed-off-by: Igor Mitsyanko <i.mitsya...@gmail.com> --- hw/sd/sd.c | 13 +++++++++++++ 1 file changed, 13 insertions(+)
diff --git a/hw/sd/sd.c b/hw/sd/sd.c index 2e0ef3e..1dd1331 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -112,6 +112,10 @@ struct SDState { uint8_t *buf; bool enable; + + QEMUIOVector qiov; + struct iovec iov; + BlockDriverAIOCB *aiocb; }; static void sd_set_mode(SDState *sd) @@ -403,6 +407,11 @@ static void sd_reset(SDState *sd, BlockDriverState *bdrv) uint64_t size; uint64_t sect; + if (sd->aiocb) { + bdrv_aio_cancel(sd->aiocb); + sd->aiocb = NULL; + } + if (bdrv) { bdrv_get_geometry(bdrv, §); } else { @@ -496,11 +505,15 @@ SDState *sd_init(BlockDriverState *bs, bool is_spi) sd->buf = qemu_blockalign(bs, 512); sd->spi = is_spi; sd->enable = true; + sd->aiocb = NULL; + sd->iov.iov_base = NULL; + sd->iov.iov_len = BDRV_SECTOR_SIZE; sd_reset(sd, bs); if (sd->bdrv) { bdrv_attach_dev_nofail(sd->bdrv, sd); bdrv_set_dev_ops(sd->bdrv, &sd_block_ops, sd); } + qemu_iovec_init_external(&sd->qiov, &sd->iov, 1); vmstate_register(NULL, -1, &sd_vmstate, sd); return sd; } -- 1.8.1.4