From: Gerd Hoffmann <kraxel@redhat.com>
To: Anthony Liguori <anthony@codemonkey.ws>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH] usb-net: use qdev for -usbdevice
Date: Thu, 03 Dec 2009 11:34:46 +0100 [thread overview]
Message-ID: <4B179446.3030000@redhat.com> (raw)
In-Reply-To: <4B169605.5030002@codemonkey.ws>
[-- Attachment #1: Type: text/plain, Size: 338 bytes --]
On 12/02/09 17:29, Anthony Liguori wrote:
> Can you update this against staging (or master if you want 24 hours) to
> take into account Mark's nic refactoring series? The changes looked
> non-trivial to me.
Attached. Based on the commit just after marks nic series, because full
staging tree doesn't build right now.
cheers,
Gerd
[-- Attachment #2: 0001-usb-net-use-qdev-for-usbdevice.patch --]
[-- Type: text/plain, Size: 5910 bytes --]
>From fbca083ffcc1271bf41f35345dd8533930147ea0 Mon Sep 17 00:00:00 2001
From: Gerd Hoffmann <kraxel@redhat.com>
Date: Wed, 28 Oct 2009 11:21:27 +0100
Subject: [PATCH 1/2] usb-net: use qdev for -usbdevice
---
hw/usb-net.c | 79 +++++++++++++++++++++++++++++++++++----------------------
hw/usb.h | 3 --
vl.c | 18 -------------
3 files changed, 48 insertions(+), 52 deletions(-)
diff --git a/hw/usb-net.c b/hw/usb-net.c
index 2556e05..450cf1e 100644
--- a/hw/usb-net.c
+++ b/hw/usb-net.c
@@ -1420,8 +1420,7 @@ static void usbnet_cleanup(VLANClientState *nc)
{
USBNetState *s = DO_UPCAST(NICState, nc, nc)->opaque;
- rndis_clear_responsequeue(s);
- qemu_free(s);
+ s->nic = NULL;
}
static void usb_net_handle_destroy(USBDevice *dev)
@@ -1429,9 +1428,18 @@ static void usb_net_handle_destroy(USBDevice *dev)
USBNetState *s = (USBNetState *) dev;
/* TODO: remove the nd_table[] entry */
+ rndis_clear_responsequeue(s);
qemu_del_vlan_client(&s->nic->nc);
}
+static NetClientInfo net_usbnet_info = {
+ .type = NET_CLIENT_TYPE_NIC,
+ .size = sizeof(NICState),
+ .can_receive = usbnet_can_receive,
+ .receive = usbnet_receive,
+ .cleanup = usbnet_cleanup,
+};
+
static int usb_net_initfn(USBDevice *dev)
{
USBNetState *s = DO_UPCAST(USBNetState, dev, dev);
@@ -1447,47 +1455,50 @@ static int usb_net_initfn(USBDevice *dev)
s->media_state = 0; /* NDIS_MEDIA_STATE_CONNECTED */;
s->filter = 0;
s->vendorid = 0x1234;
+
+ qemu_macaddr_default_if_unset(&s->conf.macaddr);
+ s->nic = qemu_new_nic(&net_usbnet_info, &s->conf,
+ s->dev.qdev.info->name, s->dev.qdev.id, s);
+ qemu_format_nic_info_str(&s->nic->nc, s->conf.macaddr.a);
+ snprintf(s->usbstring_mac, sizeof(s->usbstring_mac),
+ "%02x%02x%02x%02x%02x%02x",
+ 0x40,
+ s->conf.macaddr.a[1],
+ s->conf.macaddr.a[2],
+ s->conf.macaddr.a[3],
+ s->conf.macaddr.a[4],
+ s->conf.macaddr.a[5]);
+
return 0;
}
-static NetClientInfo net_usbnet_info = {
- .type = NET_CLIENT_TYPE_NIC,
- .size = sizeof(NICState),
- .can_receive = usbnet_can_receive,
- .receive = usbnet_receive,
- .cleanup = usbnet_cleanup,
-};
-
-USBDevice *usb_net_init(NICInfo *nd)
+static USBDevice *usb_net_init(const char *cmdline)
{
USBDevice *dev;
- USBNetState *s;
-
- dev = usb_create_simple(NULL /* FIXME */, "QEMU USB Network Interface");
- s = DO_UPCAST(USBNetState, dev, dev);
+ QemuOpts *opts;
+ int idx;
- memcpy(s->conf.macaddr.a, nd->macaddr, sizeof(nd->macaddr));
- s->conf.vlan = nd->vlan;
- s->conf.peer = nd->netdev;
-
- s->nic = qemu_new_nic(&net_usbnet_info, &s->conf,
- nd->model, nd->name, s);
+ opts = qemu_opts_parse(&qemu_net_opts, cmdline, NULL);
+ if (!opts) {
+ return NULL;
+ }
+ qemu_opt_set(opts, "type", "nic");
+ qemu_opt_set(opts, "model", "usb");
- qemu_format_nic_info_str(&s->nic->nc, s->conf.macaddr.a);
+ idx = net_client_init(NULL, opts, 0);
+ if (idx == -1) {
+ return NULL;
+ }
- snprintf(s->usbstring_mac, sizeof(s->usbstring_mac),
- "%02x%02x%02x%02x%02x%02x",
- 0x40, s->conf.macaddr.a[1], s->conf.macaddr.a[2],
- s->conf.macaddr.a[3], s->conf.macaddr.a[4], s->conf.macaddr.a[5]);
- fprintf(stderr, "usbnet: initialized mac %02x:%02x:%02x:%02x:%02x:%02x\n",
- s->conf.macaddr.a[0], s->conf.macaddr.a[1], s->conf.macaddr.a[2],
- s->conf.macaddr.a[3], s->conf.macaddr.a[4], s->conf.macaddr.a[5]);
-
- return (USBDevice *) s;
+ dev = usb_create(NULL /* FIXME */, "QEMU USB Network Interface");
+ qdev_set_nic_properties(&dev->qdev, &nd_table[idx]);
+ qdev_init(&dev->qdev);
+ return dev;
}
static struct USBDeviceInfo net_info = {
.qdev.name = "QEMU USB Network Interface",
+ .qdev.alias = "usb-net",
.qdev.size = sizeof(USBNetState),
.init = usb_net_initfn,
.handle_packet = usb_generic_handle_packet,
@@ -1495,6 +1506,12 @@ static struct USBDeviceInfo net_info = {
.handle_control = usb_net_handle_control,
.handle_data = usb_net_handle_data,
.handle_destroy = usb_net_handle_destroy,
+ .usbdevice_name = "net",
+ .usbdevice_init = usb_net_init,
+ .qdev.props = (Property[]) {
+ DEFINE_NIC_PROPERTIES(USBNetState, conf),
+ DEFINE_PROP_END_OF_LIST(),
+ }
};
static void usb_net_register_devices(void)
diff --git a/hw/usb.h b/hw/usb.h
index 7d46931..5e04cab 100644
--- a/hw/usb.h
+++ b/hw/usb.h
@@ -264,9 +264,6 @@ void usb_host_info(Monitor *mon);
/* usb-hid.c */
void usb_hid_datain_cb(USBDevice *dev, void *opaque, void (*datain)(void *));
-/* usb-net.c */
-USBDevice *usb_net_init(NICInfo *nd);
-
/* usb-bt.c */
USBDevice *usb_bt_init(HCIInfo *hci);
diff --git a/vl.c b/vl.c
index ba5bd3d..e48b6ef 100644
--- a/vl.c
+++ b/vl.c
@@ -2544,24 +2544,6 @@ static int usb_device_add(const char *devname, int is_hotplug)
/* the other ones */
if (strstart(devname, "host:", &p)) {
dev = usb_host_device_open(p);
- } else if (strstart(devname, "net:", &p)) {
- QemuOpts *opts;
- int idx;
-
- opts = qemu_opts_parse(&qemu_net_opts, p, NULL);
- if (!opts) {
- return -1;
- }
-
- qemu_opt_set(opts, "type", "nic");
- qemu_opt_set(opts, "model", "usb");
-
- idx = net_client_init(NULL, opts, 0);
- if (idx == -1) {
- return -1;
- }
-
- dev = usb_net_init(&nd_table[idx]);
} else if (!strcmp(devname, "bt") || strstart(devname, "bt:", &p)) {
dev = usb_bt_init(devname[2] ? hci_init(p) :
bt_new_hci(qemu_find_bt_vlan(0)));
--
1.6.5.2
prev parent reply other threads:[~2009-12-03 10:35 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-11-17 10:26 [Qemu-devel] [PATCH] usb-net: use qdev for -usbdevice Gerd Hoffmann
2009-12-02 16:29 ` Anthony Liguori
2009-12-03 10:34 ` Gerd Hoffmann [this message]
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=4B179446.3030000@redhat.com \
--to=kraxel@redhat.com \
--cc=anthony@codemonkey.ws \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.