mirror of
https://github.com/qemu/qemu.git
synced 2025-08-09 01:50:43 +00:00
usb-net: use qdev for -usbdevice
Rebased to master, adapted to device renaming by armbru, no other changes. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
15ff770544
commit
42be86ce95
78
hw/usb-net.c
78
hw/usb-net.c
@ -1420,8 +1420,7 @@ static void usbnet_cleanup(VLANClientState *nc)
|
|||||||
{
|
{
|
||||||
USBNetState *s = DO_UPCAST(NICState, nc, nc)->opaque;
|
USBNetState *s = DO_UPCAST(NICState, nc, nc)->opaque;
|
||||||
|
|
||||||
rndis_clear_responsequeue(s);
|
s->nic = NULL;
|
||||||
qemu_free(s);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void usb_net_handle_destroy(USBDevice *dev)
|
static void usb_net_handle_destroy(USBDevice *dev)
|
||||||
@ -1429,9 +1428,18 @@ static void usb_net_handle_destroy(USBDevice *dev)
|
|||||||
USBNetState *s = (USBNetState *) dev;
|
USBNetState *s = (USBNetState *) dev;
|
||||||
|
|
||||||
/* TODO: remove the nd_table[] entry */
|
/* TODO: remove the nd_table[] entry */
|
||||||
|
rndis_clear_responsequeue(s);
|
||||||
qemu_del_vlan_client(&s->nic->nc);
|
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)
|
static int usb_net_initfn(USBDevice *dev)
|
||||||
{
|
{
|
||||||
USBNetState *s = DO_UPCAST(USBNetState, dev, dev);
|
USBNetState *s = DO_UPCAST(USBNetState, dev, dev);
|
||||||
@ -1447,43 +1455,45 @@ static int usb_net_initfn(USBDevice *dev)
|
|||||||
s->media_state = 0; /* NDIS_MEDIA_STATE_CONNECTED */;
|
s->media_state = 0; /* NDIS_MEDIA_STATE_CONNECTED */;
|
||||||
s->filter = 0;
|
s->filter = 0;
|
||||||
s->vendorid = 0x1234;
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static NetClientInfo net_usbnet_info = {
|
static USBDevice *usb_net_init(const char *cmdline)
|
||||||
.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)
|
|
||||||
{
|
{
|
||||||
USBDevice *dev;
|
USBDevice *dev;
|
||||||
USBNetState *s;
|
QemuOpts *opts;
|
||||||
|
int idx;
|
||||||
|
|
||||||
dev = usb_create_simple(NULL /* FIXME */, "usb-net");
|
opts = qemu_opts_parse(&qemu_net_opts, cmdline, NULL);
|
||||||
s = DO_UPCAST(USBNetState, dev, dev);
|
if (!opts) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
qemu_opt_set(opts, "type", "nic");
|
||||||
|
qemu_opt_set(opts, "model", "usb");
|
||||||
|
|
||||||
memcpy(s->conf.macaddr.a, nd->macaddr, sizeof(nd->macaddr));
|
idx = net_client_init(NULL, opts, 0);
|
||||||
s->conf.vlan = nd->vlan;
|
if (idx == -1) {
|
||||||
s->conf.peer = nd->netdev;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
s->nic = qemu_new_nic(&net_usbnet_info, &s->conf,
|
dev = usb_create(NULL /* FIXME */, "usb-net");
|
||||||
nd->model, nd->name, s);
|
qdev_set_nic_properties(&dev->qdev, &nd_table[idx]);
|
||||||
|
qdev_init(&dev->qdev);
|
||||||
qemu_format_nic_info_str(&s->nic->nc, s->conf.macaddr.a);
|
return dev;
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct USBDeviceInfo net_info = {
|
static struct USBDeviceInfo net_info = {
|
||||||
@ -1496,6 +1506,12 @@ static struct USBDeviceInfo net_info = {
|
|||||||
.handle_control = usb_net_handle_control,
|
.handle_control = usb_net_handle_control,
|
||||||
.handle_data = usb_net_handle_data,
|
.handle_data = usb_net_handle_data,
|
||||||
.handle_destroy = usb_net_handle_destroy,
|
.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)
|
static void usb_net_register_devices(void)
|
||||||
|
3
hw/usb.h
3
hw/usb.h
@ -258,9 +258,6 @@ void usb_host_info(Monitor *mon);
|
|||||||
/* usb-hid.c */
|
/* usb-hid.c */
|
||||||
void usb_hid_datain_cb(USBDevice *dev, void *opaque, void (*datain)(void *));
|
void usb_hid_datain_cb(USBDevice *dev, void *opaque, void (*datain)(void *));
|
||||||
|
|
||||||
/* usb-net.c */
|
|
||||||
USBDevice *usb_net_init(NICInfo *nd);
|
|
||||||
|
|
||||||
/* usb-bt.c */
|
/* usb-bt.c */
|
||||||
USBDevice *usb_bt_init(HCIInfo *hci);
|
USBDevice *usb_bt_init(HCIInfo *hci);
|
||||||
|
|
||||||
|
18
vl.c
18
vl.c
@ -2654,24 +2654,6 @@ static int usb_device_add(const char *devname, int is_hotplug)
|
|||||||
/* the other ones */
|
/* the other ones */
|
||||||
if (strstart(devname, "host:", &p)) {
|
if (strstart(devname, "host:", &p)) {
|
||||||
dev = usb_host_device_open(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)) {
|
} else if (!strcmp(devname, "bt") || strstart(devname, "bt:", &p)) {
|
||||||
dev = usb_bt_init(devname[2] ? hci_init(p) :
|
dev = usb_bt_init(devname[2] ? hci_init(p) :
|
||||||
bt_new_hci(qemu_find_bt_vlan(0)));
|
bt_new_hci(qemu_find_bt_vlan(0)));
|
||||||
|
Loading…
Reference in New Issue
Block a user