mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 07:43:54 -06:00
hw: Convert from BlockDriverState to BlockBackend, mostly
Device models should access their block backends only through the block-backend.h API. Convert them, and drop direct includes of inappropriate headers. Just four uses of BlockDriverState are left: * The Xen paravirtual block device backend (xen_disk.c) opens images itself when set up via xenbus, bypassing blockdev.c. I figure it should go through qmp_blockdev_add() instead. * Device model "usb-storage" prompts for keys. No other device model does, and this one probably shouldn't do it, either. * ide_issue_trim_cb() uses bdrv_aio_discard() instead of blk_aio_discard() because it fishes its backend out of a BlockAIOCB, which has only the BlockDriverState. * PC87312State has an unused BlockDriverState[] member. The next two commits take care of the latter two. Signed-off-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Max Reitz <mreitz@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
2a30307f70
commit
4be746345f
110 changed files with 1127 additions and 798 deletions
|
@ -20,7 +20,7 @@
|
|||
|
||||
# include "hw/hw.h"
|
||||
# include "hw/block/flash.h"
|
||||
# include "sysemu/blockdev.h"
|
||||
#include "sysemu/block-backend.h"
|
||||
#include "hw/qdev.h"
|
||||
#include "qemu/error-report.h"
|
||||
|
||||
|
@ -61,7 +61,7 @@ struct NANDFlashState {
|
|||
int size, pages;
|
||||
int page_shift, oob_shift, erase_shift, addr_shift;
|
||||
uint8_t *storage;
|
||||
BlockDriverState *bdrv;
|
||||
BlockBackend *blk;
|
||||
int mem_oob;
|
||||
|
||||
uint8_t cle, ale, ce, wp, gnd;
|
||||
|
@ -400,12 +400,12 @@ static void nand_realize(DeviceState *dev, Error **errp)
|
|||
|
||||
pagesize = 1 << s->oob_shift;
|
||||
s->mem_oob = 1;
|
||||
if (s->bdrv) {
|
||||
if (bdrv_is_read_only(s->bdrv)) {
|
||||
if (s->blk) {
|
||||
if (blk_is_read_only(s->blk)) {
|
||||
error_setg(errp, "Can't use a read-only drive");
|
||||
return;
|
||||
}
|
||||
if (bdrv_getlength(s->bdrv) >=
|
||||
if (blk_getlength(s->blk) >=
|
||||
(s->pages << s->page_shift) + (s->pages << s->oob_shift)) {
|
||||
pagesize = 0;
|
||||
s->mem_oob = 0;
|
||||
|
@ -424,7 +424,7 @@ static void nand_realize(DeviceState *dev, Error **errp)
|
|||
static Property nand_properties[] = {
|
||||
DEFINE_PROP_UINT8("manufacturer_id", NANDFlashState, manf_id, 0),
|
||||
DEFINE_PROP_UINT8("chip_id", NANDFlashState, chip_id, 0),
|
||||
DEFINE_PROP_DRIVE("drive", NANDFlashState, bdrv),
|
||||
DEFINE_PROP_DRIVE("drive", NANDFlashState, blk),
|
||||
DEFINE_PROP_END_OF_LIST(),
|
||||
};
|
||||
|
||||
|
@ -624,7 +624,7 @@ uint32_t nand_getbuswidth(DeviceState *dev)
|
|||
return s->buswidth << 3;
|
||||
}
|
||||
|
||||
DeviceState *nand_init(BlockDriverState *bdrv, int manf_id, int chip_id)
|
||||
DeviceState *nand_init(BlockBackend *blk, int manf_id, int chip_id)
|
||||
{
|
||||
DeviceState *dev;
|
||||
|
||||
|
@ -634,8 +634,8 @@ DeviceState *nand_init(BlockDriverState *bdrv, int manf_id, int chip_id)
|
|||
dev = DEVICE(object_new(TYPE_NAND));
|
||||
qdev_prop_set_uint8(dev, "manufacturer_id", manf_id);
|
||||
qdev_prop_set_uint8(dev, "chip_id", chip_id);
|
||||
if (bdrv) {
|
||||
qdev_prop_set_drive_nofail(dev, "drive", bdrv);
|
||||
if (blk) {
|
||||
qdev_prop_set_drive_nofail(dev, "drive", blk);
|
||||
}
|
||||
|
||||
qdev_init_nofail(dev);
|
||||
|
@ -654,14 +654,14 @@ static void glue(nand_blk_write_, PAGE_SIZE)(NANDFlashState *s)
|
|||
if (PAGE(s->addr) >= s->pages)
|
||||
return;
|
||||
|
||||
if (!s->bdrv) {
|
||||
if (!s->blk) {
|
||||
mem_and(s->storage + PAGE_START(s->addr) + (s->addr & PAGE_MASK) +
|
||||
s->offset, s->io, s->iolen);
|
||||
} else if (s->mem_oob) {
|
||||
sector = SECTOR(s->addr);
|
||||
off = (s->addr & PAGE_MASK) + s->offset;
|
||||
soff = SECTOR_OFFSET(s->addr);
|
||||
if (bdrv_read(s->bdrv, sector, iobuf, PAGE_SECTORS) < 0) {
|
||||
if (blk_read(s->blk, sector, iobuf, PAGE_SECTORS) < 0) {
|
||||
printf("%s: read error in sector %" PRIu64 "\n", __func__, sector);
|
||||
return;
|
||||
}
|
||||
|
@ -673,21 +673,21 @@ static void glue(nand_blk_write_, PAGE_SIZE)(NANDFlashState *s)
|
|||
MIN(OOB_SIZE, off + s->iolen - PAGE_SIZE));
|
||||
}
|
||||
|
||||
if (bdrv_write(s->bdrv, sector, iobuf, PAGE_SECTORS) < 0) {
|
||||
if (blk_write(s->blk, sector, iobuf, PAGE_SECTORS) < 0) {
|
||||
printf("%s: write error in sector %" PRIu64 "\n", __func__, sector);
|
||||
}
|
||||
} else {
|
||||
off = PAGE_START(s->addr) + (s->addr & PAGE_MASK) + s->offset;
|
||||
sector = off >> 9;
|
||||
soff = off & 0x1ff;
|
||||
if (bdrv_read(s->bdrv, sector, iobuf, PAGE_SECTORS + 2) < 0) {
|
||||
if (blk_read(s->blk, sector, iobuf, PAGE_SECTORS + 2) < 0) {
|
||||
printf("%s: read error in sector %" PRIu64 "\n", __func__, sector);
|
||||
return;
|
||||
}
|
||||
|
||||
mem_and(iobuf + soff, s->io, s->iolen);
|
||||
|
||||
if (bdrv_write(s->bdrv, sector, iobuf, PAGE_SECTORS + 2) < 0) {
|
||||
if (blk_write(s->blk, sector, iobuf, PAGE_SECTORS + 2) < 0) {
|
||||
printf("%s: write error in sector %" PRIu64 "\n", __func__, sector);
|
||||
}
|
||||
}
|
||||
|
@ -705,7 +705,7 @@ static void glue(nand_blk_erase_, PAGE_SIZE)(NANDFlashState *s)
|
|||
return;
|
||||
}
|
||||
|
||||
if (!s->bdrv) {
|
||||
if (!s->blk) {
|
||||
memset(s->storage + PAGE_START(addr),
|
||||
0xff, (PAGE_SIZE + OOB_SIZE) << s->erase_shift);
|
||||
} else if (s->mem_oob) {
|
||||
|
@ -714,17 +714,17 @@ static void glue(nand_blk_erase_, PAGE_SIZE)(NANDFlashState *s)
|
|||
i = SECTOR(addr);
|
||||
page = SECTOR(addr + (ADDR_SHIFT + s->erase_shift));
|
||||
for (; i < page; i ++)
|
||||
if (bdrv_write(s->bdrv, i, iobuf, 1) < 0) {
|
||||
if (blk_write(s->blk, i, iobuf, 1) < 0) {
|
||||
printf("%s: write error in sector %" PRIu64 "\n", __func__, i);
|
||||
}
|
||||
} else {
|
||||
addr = PAGE_START(addr);
|
||||
page = addr >> 9;
|
||||
if (bdrv_read(s->bdrv, page, iobuf, 1) < 0) {
|
||||
if (blk_read(s->blk, page, iobuf, 1) < 0) {
|
||||
printf("%s: read error in sector %" PRIu64 "\n", __func__, page);
|
||||
}
|
||||
memset(iobuf + (addr & 0x1ff), 0xff, (~addr & 0x1ff) + 1);
|
||||
if (bdrv_write(s->bdrv, page, iobuf, 1) < 0) {
|
||||
if (blk_write(s->blk, page, iobuf, 1) < 0) {
|
||||
printf("%s: write error in sector %" PRIu64 "\n", __func__, page);
|
||||
}
|
||||
|
||||
|
@ -732,18 +732,18 @@ static void glue(nand_blk_erase_, PAGE_SIZE)(NANDFlashState *s)
|
|||
i = (addr & ~0x1ff) + 0x200;
|
||||
for (addr += ((PAGE_SIZE + OOB_SIZE) << s->erase_shift) - 0x200;
|
||||
i < addr; i += 0x200) {
|
||||
if (bdrv_write(s->bdrv, i >> 9, iobuf, 1) < 0) {
|
||||
if (blk_write(s->blk, i >> 9, iobuf, 1) < 0) {
|
||||
printf("%s: write error in sector %" PRIu64 "\n",
|
||||
__func__, i >> 9);
|
||||
}
|
||||
}
|
||||
|
||||
page = i >> 9;
|
||||
if (bdrv_read(s->bdrv, page, iobuf, 1) < 0) {
|
||||
if (blk_read(s->blk, page, iobuf, 1) < 0) {
|
||||
printf("%s: read error in sector %" PRIu64 "\n", __func__, page);
|
||||
}
|
||||
memset(iobuf, 0xff, ((addr - 1) & 0x1ff) + 1);
|
||||
if (bdrv_write(s->bdrv, page, iobuf, 1) < 0) {
|
||||
if (blk_write(s->blk, page, iobuf, 1) < 0) {
|
||||
printf("%s: write error in sector %" PRIu64 "\n", __func__, page);
|
||||
}
|
||||
}
|
||||
|
@ -756,9 +756,9 @@ static void glue(nand_blk_load_, PAGE_SIZE)(NANDFlashState *s,
|
|||
return;
|
||||
}
|
||||
|
||||
if (s->bdrv) {
|
||||
if (s->blk) {
|
||||
if (s->mem_oob) {
|
||||
if (bdrv_read(s->bdrv, SECTOR(addr), s->io, PAGE_SECTORS) < 0) {
|
||||
if (blk_read(s->blk, SECTOR(addr), s->io, PAGE_SECTORS) < 0) {
|
||||
printf("%s: read error in sector %" PRIu64 "\n",
|
||||
__func__, SECTOR(addr));
|
||||
}
|
||||
|
@ -767,8 +767,8 @@ static void glue(nand_blk_load_, PAGE_SIZE)(NANDFlashState *s,
|
|||
OOB_SIZE);
|
||||
s->ioaddr = s->io + SECTOR_OFFSET(s->addr) + offset;
|
||||
} else {
|
||||
if (bdrv_read(s->bdrv, PAGE_START(addr) >> 9,
|
||||
s->io, (PAGE_SECTORS + 2)) < 0) {
|
||||
if (blk_read(s->blk, PAGE_START(addr) >> 9,
|
||||
s->io, (PAGE_SECTORS + 2)) < 0) {
|
||||
printf("%s: read error in sector %" PRIu64 "\n",
|
||||
__func__, PAGE_START(addr) >> 9);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue