From: Gerd Hoffmann <kraxel@redhat.com>
To: qemu-devel@nongnu.org
Cc: Gonglei <arei.gonglei@huawei.com>, Gerd Hoffmann <kraxel@redhat.com>
Subject: [Qemu-devel] [PULL 29/34] usb-storage: add bootindex to qom property
Date: Wed, 15 Oct 2014 11:06:02 +0200 [thread overview]
Message-ID: <1413363967-2489-30-git-send-email-kraxel@redhat.com> (raw)
In-Reply-To: <1413363967-2489-1-git-send-email-kraxel@redhat.com>
From: Gonglei <arei.gonglei@huawei.com>
Add a qom property with the same name 'bootindex',
when we remove it form qdev property, things will
continue to work just fine, and we can use qom features
which are not supported by qdev property.
Because usb-storage rely on scsi-disk which is created
in usb_msg_realize_storage(), so we should store the SCSIDevice
pointer in MSDState struct. Only in this way, we can change
the global boot_order_list when we want to change the bootindex
during vm rebooting by calling object_property_set_int(Object(SCSIDevice),).
Signed-off-by: Gonglei <arei.gonglei@huawei.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/usb/dev-storage.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 52 insertions(+)
diff --git a/hw/usb/dev-storage.c b/hw/usb/dev-storage.c
index bd7cc53..7406fdd 100644
--- a/hw/usb/dev-storage.c
+++ b/hw/usb/dev-storage.c
@@ -17,6 +17,7 @@
#include "monitor/monitor.h"
#include "sysemu/sysemu.h"
#include "sysemu/blockdev.h"
+#include "qapi/visitor.h"
//#define DEBUG_MSD
@@ -59,6 +60,7 @@ typedef struct {
/* usb-storage only */
BlockConf conf;
uint32_t removable;
+ SCSIDevice *scsi_dev;
} MSDState;
struct usb_msd_cbw {
@@ -634,6 +636,7 @@ static void usb_msd_realize_storage(USBDevice *dev, Error **errp)
}
s->bus.qbus.allow_hotplug = 0;
usb_msd_handle_reset(dev);
+ s->scsi_dev = scsi_dev;
if (bdrv_key_required(bs)) {
if (cur_mon) {
@@ -767,6 +770,54 @@ static void usb_msd_class_initfn_storage(ObjectClass *klass, void *data)
usb_msd_class_initfn_common(klass);
}
+static void usb_msd_get_bootindex(Object *obj, Visitor *v, void *opaque,
+ const char *name, Error **errp)
+{
+ USBDevice *dev = USB_DEVICE(obj);
+ MSDState *s = DO_UPCAST(MSDState, dev, dev);
+
+ visit_type_int32(v, &s->conf.bootindex, name, errp);
+}
+
+static void usb_msd_set_bootindex(Object *obj, Visitor *v, void *opaque,
+ const char *name, Error **errp)
+{
+ USBDevice *dev = USB_DEVICE(obj);
+ MSDState *s = DO_UPCAST(MSDState, dev, dev);
+ int32_t boot_index;
+ Error *local_err = NULL;
+
+ visit_type_int32(v, &boot_index, name, &local_err);
+ if (local_err) {
+ goto out;
+ }
+ /* check whether bootindex is present in fw_boot_order list */
+ check_boot_index(boot_index, &local_err);
+ if (local_err) {
+ goto out;
+ }
+ /* change bootindex to a new one */
+ s->conf.bootindex = boot_index;
+
+ if (s->scsi_dev) {
+ object_property_set_int(OBJECT(s->scsi_dev), boot_index, "bootindex",
+ &error_abort);
+ }
+
+out:
+ if (local_err) {
+ error_propagate(errp, local_err);
+ }
+}
+
+static void usb_msd_instance_init(Object *obj)
+{
+ object_property_add(obj, "bootindex", "int32",
+ usb_msd_get_bootindex,
+ usb_msd_set_bootindex, NULL, NULL, NULL);
+ object_property_set_int(obj, -1, "bootindex", NULL);
+}
+
static void usb_msd_class_initfn_bot(ObjectClass *klass, void *data)
{
USBDeviceClass *uc = USB_DEVICE_CLASS(klass);
@@ -780,6 +831,7 @@ static const TypeInfo msd_info = {
.parent = TYPE_USB_DEVICE,
.instance_size = sizeof(MSDState),
.class_init = usb_msd_class_initfn_storage,
+ .instance_init = usb_msd_instance_init,
};
static const TypeInfo bot_info = {
--
1.8.3.1
next prev parent reply other threads:[~2014-10-15 9:07 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-15 9:05 [Qemu-devel] [PULL 00/34] allow changing bootorder via monitor Gerd Hoffmann
2014-10-15 9:05 ` [Qemu-devel] [PULL 01/34] bootdevice: move bootdevice related code to new file bootdevice.c Gerd Hoffmann
2014-10-15 9:05 ` [Qemu-devel] [PULL 02/34] bootindex: add check bootindex function Gerd Hoffmann
2014-10-15 9:05 ` [Qemu-devel] [PULL 03/34] bootindex: add del_boot_device_path function Gerd Hoffmann
2014-10-16 10:04 ` Peter Maydell
2014-10-16 10:11 ` Gonglei
2014-10-15 9:05 ` [Qemu-devel] [PULL 04/34] fw_cfg: add fw_cfg_machine_reset function Gerd Hoffmann
2014-10-15 9:05 ` [Qemu-devel] [PULL 05/34] bootindex: rework add_boot_device_path function Gerd Hoffmann
2014-10-15 9:05 ` [Qemu-devel] [PULL 06/34] bootindex: support to set a existent device's bootindex to -1 Gerd Hoffmann
2014-10-15 9:05 ` [Qemu-devel] [PULL 07/34] bootindex: add a setter/getter functions wrapper for bootindex property Gerd Hoffmann
2014-10-15 9:05 ` [Qemu-devel] [PULL 08/34] virtio-net: add bootindex to qom property Gerd Hoffmann
2014-10-15 9:05 ` [Qemu-devel] [PULL 09/34] e1000: " Gerd Hoffmann
2014-10-15 9:05 ` [Qemu-devel] [PULL 10/34] eepro100: " Gerd Hoffmann
2014-10-15 9:05 ` [Qemu-devel] [PULL 11/34] ne2000: " Gerd Hoffmann
2014-10-15 9:05 ` [Qemu-devel] [PULL 12/34] pcnet: " Gerd Hoffmann
2014-10-15 9:05 ` [Qemu-devel] [PULL 13/34] rtl8139: " Gerd Hoffmann
2014-10-15 9:05 ` [Qemu-devel] [PULL 14/34] spapr_lian: " Gerd Hoffmann
2014-10-15 9:05 ` [Qemu-devel] [PULL 15/34] vmxnet3: " Gerd Hoffmann
2014-10-15 9:05 ` [Qemu-devel] [PULL 16/34] usb-net: " Gerd Hoffmann
2014-10-15 9:05 ` [Qemu-devel] [PULL 17/34] net: remove bootindex property from qdev to qom Gerd Hoffmann
2014-10-15 9:05 ` [Qemu-devel] [PULL 18/34] virtio-net: alias bootindex property explicitly for virt-net-pci/ccw/s390 Gerd Hoffmann
2014-10-15 9:05 ` [Qemu-devel] [PULL 19/34] host-libusb: remove bootindex property from qdev to qom Gerd Hoffmann
2014-10-15 9:05 ` [Qemu-devel] [PULL 20/34] pci-assign: " Gerd Hoffmann
2014-10-15 9:05 ` [Qemu-devel] [PULL 21/34] vfio: " Gerd Hoffmann
2014-10-15 9:05 ` [Qemu-devel] [PULL 22/34] redirect: " Gerd Hoffmann
2014-10-15 9:05 ` [Qemu-devel] [PULL 23/34] isa-fdc: remove bootindexA/B " Gerd Hoffmann
2014-10-15 9:05 ` [Qemu-devel] [PULL 24/34] scsi: add bootindex to qom property Gerd Hoffmann
2014-10-15 9:05 ` [Qemu-devel] [PULL 25/34] ide: " Gerd Hoffmann
2014-10-15 9:05 ` [Qemu-devel] [PULL 26/34] virtio-blk: " Gerd Hoffmann
2014-10-15 9:06 ` [Qemu-devel] [PULL 27/34] block: remove bootindex property from qdev to qom Gerd Hoffmann
2014-10-15 9:06 ` [Qemu-devel] [PULL 28/34] virtio-blk: alias bootindex property explicitly for virt-blk-pci/ccw/s390 Gerd Hoffmann
2014-10-15 9:06 ` Gerd Hoffmann [this message]
2014-10-15 9:06 ` [Qemu-devel] [PULL 30/34] nvma: ide: add bootindex to qom property Gerd Hoffmann
2014-10-15 9:06 ` [Qemu-devel] [PULL 31/34] ide: add calling add_boot_device_patch in bootindex setter function Gerd Hoffmann
2014-10-15 9:06 ` [Qemu-devel] [PULL 32/34] bootindex: move calling add_boot_device_patch to " Gerd Hoffmann
2014-10-15 9:06 ` [Qemu-devel] [PULL 33/34] bootindex: delete bootindex when device is removed Gerd Hoffmann
2014-10-15 9:06 ` [Qemu-devel] [PULL 34/34] bootindex: change fprintf to error_report Gerd Hoffmann
2014-10-16 8:25 ` [Qemu-devel] [PULL 00/34] allow changing bootorder via monitor Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1413363967-2489-30-git-send-email-kraxel@redhat.com \
--to=kraxel@redhat.com \
--cc=arei.gonglei@huawei.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).