[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH V3 13/13] hw/sd.c: introduce "eject" property fo
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [PATCH V3 13/13] hw/sd.c: introduce "eject" property for SD card objects |
Date: |
Sat, 28 Apr 2012 16:27:05 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:11.0) Gecko/20120329 Thunderbird/11.0.1 |
Il 27/04/2012 17:50, Igor Mitsyanko ha scritto:
> Boolean property "eject" could be used to query if virtual media is inserted
> into
> SD card object, or to deattach BlockDriverState from SD card object.
All this is already available in the BlockDriverState object; the eject
monitor command does bdrv_close and calls the change_media_cb on the
attached device. The SD card should just attach callbacks to the BDS.
Paolo
> Signed-off-by: Igor Mitsyanko <address@hidden>
> ---
> hw/sd.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++---------
> 1 files changed, 51 insertions(+), 9 deletions(-)
>
> diff --git a/hw/sd.c b/hw/sd.c
> index d067ffb..de57000 100644
> --- a/hw/sd.c
> +++ b/hw/sd.c
> @@ -508,6 +508,19 @@ static void sd_init_card(SDState *sd, BlockDriverState
> *bdrv, Error **errp)
> }
> }
>
> +static void sd_deinit_card(SDState *sd)
> +{
> + bdrv_close(sd->bdrv);
> + sd->enable = false;
> + bdrv_detach_dev(sd->bdrv, sd);
> + sd_reset(sd, NULL);
> +
> + if (sd->buf) {
> + qemu_vfree(sd->buf);
> + sd->buf = NULL;
> + }
> +}
> +
> static void sd_set_callbacks(SDState *sd, qemu_irq readonly, qemu_irq insert)
> {
> sd->readonly_cb = readonly;
> @@ -1828,15 +1841,7 @@ static void sd_devid_set(Object *obj, const char
> *value, Error **errp)
> return;
> }
>
> - bdrv_close(sd->bdrv);
> - sd->enable = false;
> - bdrv_detach_dev(sd->bdrv, sd);
> - if (sd->buf) {
> - qemu_vfree(sd->buf);
> - sd->buf = NULL;
> - }
> - sd_reset(sd, NULL);
> -
> + sd_deinit_card(sd);
> sd_init_card(sd, bdrv, errp);
> if (error_is_set(errp)) {
> vmstate_unregister(NULL, &sd_vmstate, sd);
> @@ -1850,6 +1855,41 @@ static void sd_devid_set(Object *obj, const char
> *value, Error **errp)
> }
> }
>
> +static void sd_is_ejected(Object *obj, Visitor *v, void *opaque,
> + const char *name, Error **errp)
> +{
> + SDState *sd = SD_CARD(obj);
> + bool ejected = sd->bdrv && bdrv_is_inserted(sd->bdrv) ? false : true;
> +
> + visit_type_bool(v, &ejected, name, errp);
> +}
> +
> +static void sd_eject(Object *obj, Visitor *v, void *opaque,
> + const char *name, Error **errp)
> +{
> + SDState *sd = SD_CARD(obj);
> + bool eject;
> +
> + visit_type_bool(v, &eject, name, errp);
> + if (error_is_set(errp)) {
> + return;
> + }
> +
> + if (eject) {
> + if (!sd->bdrv) {
> + return;
> + }
> +
> + if (bdrv_in_use(sd->bdrv)) {
> + error_set(errp, QERR_DEVICE_IN_USE,
> bdrv_get_device_name(sd->bdrv));
> + return;
> + }
> +
> + vmstate_unregister(NULL, &sd_vmstate, sd);
> + sd_deinit_card(sd);
> + }
> +}
> +
> static void sd_initfn(Object *obj)
> {
> SDState *sd = SD_CARD(obj);
> @@ -1859,6 +1899,8 @@ static void sd_initfn(Object *obj)
> NULL, NULL, NULL);
> object_property_add_str(OBJECT(sd), "device-id", sd_devid_get,
> sd_devid_set,
> NULL);
> + object_property_add(obj, "eject", "boolean", sd_is_ejected, sd_eject,
> + NULL, NULL, NULL);
> }
>
> static const TypeInfo sd_type_info = {
- [Qemu-devel] [PATCH V3 09/13] hw/sd.c: convert SD state to QOM object, (continued)
[Qemu-devel] [PATCH V3 11/13] SD card: introduce "spi" property for SD card objects, Igor Mitsyanko, 2012/04/27
[Qemu-devel] [PATCH V3 10/13] SD card users: optimize access to SDClass methods, Igor Mitsyanko, 2012/04/27
[Qemu-devel] [PATCH V3 13/13] hw/sd.c: introduce "eject" property for SD card objects, Igor Mitsyanko, 2012/04/27
- Re: [Qemu-devel] [PATCH V3 13/13] hw/sd.c: introduce "eject" property for SD card objects,
Paolo Bonzini <=