From fa879d62eb51253d00b6920ce1d1d9d261370a49 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Wed, 3 Aug 2011 15:07:40 +0200 Subject: block: Attach non-qdev devices as well For now, this just protects against programming errors like having the same drive back multiple non-qdev devices, or untimely bdrv_delete(). Later commits will add other interesting uses. While there, rename BlockDriverState member peer to dev, bdrv_attach() to bdrv_attach_dev(), bdrv_detach() to bdrv_detach_dev(), and bdrv_get_attached() to bdrv_get_attached_dev(). Signed-off-by: Markus Armbruster Signed-off-by: Kevin Wolf --- hw/sd.c | 1 + 1 file changed, 1 insertion(+) (limited to 'hw/sd.c') diff --git a/hw/sd.c b/hw/sd.c index bb8c2ff..ab52634 100644 --- a/hw/sd.c +++ b/hw/sd.c @@ -449,6 +449,7 @@ SDState *sd_init(BlockDriverState *bs, int is_spi) sd->enable = 1; sd_reset(sd, bs); if (sd->bdrv) { + bdrv_attach_dev_nofail(sd->bdrv, sd); bdrv_set_change_cb(sd->bdrv, sd_cardchange, sd); } return sd; -- cgit v1.1 From 0e49de5232f47c9e58adb82c28d4f42be933d891 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Wed, 3 Aug 2011 15:07:41 +0200 Subject: block: Generalize change_cb() to BlockDevOps So we can more easily add device model callbacks. Signed-off-by: Markus Armbruster Signed-off-by: Kevin Wolf --- hw/sd.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'hw/sd.c') diff --git a/hw/sd.c b/hw/sd.c index ab52634..1f00910 100644 --- a/hw/sd.c +++ b/hw/sd.c @@ -435,6 +435,10 @@ static void sd_cardchange(void *opaque, int reason) } } +static const BlockDevOps sd_block_ops = { + .change_cb = sd_cardchange, +}; + /* We do not model the chip select pin, so allow the board to select whether card should be in SSI or MMC/SD mode. It is also up to the board to ensure that ssi transfers only occur when the chip select @@ -450,7 +454,7 @@ SDState *sd_init(BlockDriverState *bs, int is_spi) sd_reset(sd, bs); if (sd->bdrv) { bdrv_attach_dev_nofail(sd->bdrv, sd); - bdrv_set_change_cb(sd->bdrv, sd_cardchange, sd); + bdrv_set_dev_ops(sd->bdrv, &sd_block_ops, sd); } return sd; } -- cgit v1.1 From 145feb176ffe6de1db6d05af064c841d7c16633c Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Wed, 3 Aug 2011 15:07:42 +0200 Subject: block: Split change_cb() into change_media_cb(), resize_cb() Multiplexing callbacks complicates matters needlessly. Signed-off-by: Markus Armbruster Signed-off-by: Kevin Wolf --- hw/sd.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) (limited to 'hw/sd.c') diff --git a/hw/sd.c b/hw/sd.c index 1f00910..45e95f9 100644 --- a/hw/sd.c +++ b/hw/sd.c @@ -420,14 +420,10 @@ static void sd_reset(SDState *sd, BlockDriverState *bdrv) sd->pwd_len = 0; } -static void sd_cardchange(void *opaque, int reason) +static void sd_cardchange(void *opaque) { SDState *sd = opaque; - if (!(reason & CHANGE_MEDIA)) { - return; - } - qemu_set_irq(sd->inserted_cb, bdrv_is_inserted(sd->bdrv)); if (bdrv_is_inserted(sd->bdrv)) { sd_reset(sd, sd->bdrv); @@ -436,7 +432,7 @@ static void sd_cardchange(void *opaque, int reason) } static const BlockDevOps sd_block_ops = { - .change_cb = sd_cardchange, + .change_media_cb = sd_cardchange, }; /* We do not model the chip select pin, so allow the board to select -- cgit v1.1 From ba5b7ad4495a9788d0af67133186bbc7a553008f Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Wed, 3 Aug 2011 15:08:19 +0200 Subject: block: Declare qemu_blockalign() in block.h, not block_int.h Device models should be able to use it without an unclean include of block_int.h. Signed-off-by: Markus Armbruster Signed-off-by: Kevin Wolf --- hw/sd.c | 1 - 1 file changed, 1 deletion(-) (limited to 'hw/sd.c') diff --git a/hw/sd.c b/hw/sd.c index 45e95f9..1af62b2 100644 --- a/hw/sd.c +++ b/hw/sd.c @@ -31,7 +31,6 @@ #include "hw.h" #include "block.h" -#include "block_int.h" #include "sd.h" //#define DEBUG_SD 1 -- cgit v1.1