⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ioemu-save-restore-usb

📁 xen 3.2.2 源码
💻
字号:
Index: ioemu/hw/usb-hid.c===================================================================--- ioemu.orig/hw/usb-hid.c	2007-05-09 14:10:50.000000000 +0100+++ ioemu/hw/usb-hid.c	2007-05-09 14:11:27.000000000 +0100@@ -510,6 +510,51 @@     qemu_free(s); } +void usb_mouse_save(QEMUFile *f, void *opaque)+{+    USBMouseState *s = (USBMouseState*)opaque;++    qemu_put_be32s(f, &s->dx);+    qemu_put_be32s(f, &s->dy);+    qemu_put_be32s(f, &s->dz);+    qemu_put_be32s(f, &s->buttons_state);+    qemu_put_be32s(f, &s->x);+    qemu_put_be32s(f, &s->y);+    qemu_put_be32s(f, &s->kind);+    qemu_put_be32s(f, &s->mouse_grabbed);+    qemu_put_be32s(f, &s->status_changed);++}++int usb_mouse_load(QEMUFile *f, void *opaque, int version_id)+{+    USBMouseState *s = (USBMouseState*)opaque;++    if (version_id != 1)+        return -EINVAL;++    qemu_get_be32s(f, &s->dx);+    qemu_get_be32s(f, &s->dy);+    qemu_get_be32s(f, &s->dz);+    qemu_get_be32s(f, &s->buttons_state);+    qemu_get_be32s(f, &s->x);+    qemu_get_be32s(f, &s->y);+    qemu_get_be32s(f, &s->kind);+    qemu_get_be32s(f, &s->mouse_grabbed);+    qemu_get_be32s(f, &s->status_changed);++    if ( s->kind == USB_TABLET) {+        fprintf(logfile, "usb_mouse_load:add usb_tablet_event.\n");+        qemu_add_mouse_event_handler(usb_tablet_event, s, 1, "QEMU USB Tablet");+    } else if ( s->kind == USB_MOUSE) {+        fprintf(logfile, "usb_mouse_load:add usb_mouse_event.\n");+        qemu_add_mouse_event_handler(usb_mouse_event, s, 0, "QEMU USB MOUSE");+    }++    return 0;+}++ USBDevice *usb_tablet_init(void) {     USBMouseState *s;@@ -528,6 +573,8 @@      pstrcpy(s->dev.devname, sizeof(s->dev.devname), "QEMU USB Tablet"); +    register_savevm("USB tablet dev", 0, 1, usb_mouse_save, usb_mouse_load, s);+     return (USBDevice *)s; } @@ -549,5 +596,7 @@      pstrcpy(s->dev.devname, sizeof(s->dev.devname), "QEMU USB Mouse"); +    register_savevm("USB mouse dev", 0, 1, usb_mouse_save, usb_mouse_load, s);+     return (USBDevice *)s; }Index: ioemu/vl.c===================================================================--- ioemu.orig/vl.c	2007-05-09 14:10:50.000000000 +0100+++ ioemu/vl.c	2007-05-09 14:11:19.000000000 +0100@@ -4076,6 +4076,7 @@     const char *p;     USBDevice *dev;     USBPort *port;+    char usb_name[256] = "USB ";      if (!free_usb_ports)         return -1;@@ -4112,6 +4113,12 @@     free_usb_ports = port->next;     port->next = used_usb_ports;     used_usb_ports = port;++    pstrcpy(usb_name + strlen(usb_name), +            sizeof(usb_name) - strlen(usb_name), +            devname);+    register_savevm(usb_name, 0, 1, generic_usb_save, generic_usb_load, dev);+         usb_attach(port, dev);     return 0; }Index: ioemu/hw/usb.c===================================================================--- ioemu.orig/hw/usb.c	2007-05-09 14:10:50.000000000 +0100+++ ioemu/hw/usb.c	2007-05-09 14:11:01.000000000 +0100@@ -201,3 +201,42 @@     dev->handle_packet(dev, &p); } +void generic_usb_save(QEMUFile* f, void *opaque)+{+    USBDevice *s = (USBDevice*)opaque;++    qemu_put_be32s(f, &s->speed);+    qemu_put_8s(f, &s->addr);+    qemu_put_be32s(f, &s->state);++    qemu_put_buffer(f, s->setup_buf, 8);+    qemu_put_buffer(f, s->data_buf, 1024);++    qemu_put_be32s(f, &s->remote_wakeup);+    qemu_put_be32s(f, &s->setup_state);+    qemu_put_be32s(f, &s->setup_len);+    qemu_put_be32s(f, &s->setup_index);++}++int generic_usb_load(QEMUFile* f, void *opaque, int version_id)+{+    USBDevice *s = (USBDevice*)opaque;++    if (version_id != 1)+        return -EINVAL;++    qemu_get_be32s(f, &s->speed);+    qemu_get_8s(f, &s->addr);+    qemu_get_be32s(f, &s->state);++    qemu_get_buffer(f, s->setup_buf, 8);+    qemu_get_buffer(f, s->data_buf, 1024);++    qemu_get_be32s(f, &s->remote_wakeup);+    qemu_get_be32s(f, &s->setup_state);+    qemu_get_be32s(f, &s->setup_len);+    qemu_get_be32s(f, &s->setup_index);++    return 0;+}Index: ioemu/hw/usb-ohci.c===================================================================--- ioemu.orig/hw/usb-ohci.c	2007-05-09 14:10:50.000000000 +0100+++ ioemu/hw/usb-ohci.c	2007-05-09 14:11:01.000000000 +0100@@ -1215,6 +1215,20 @@     cpu_register_physical_memory(addr, size, ohci->mem); } +static void ohci_usb_save(QEMUFile *f, void *opaque)+{+    OHCIState *ohci = opaque;++    pci_device_save(&ohci->pci_dev, f);+}++static int ohci_usb_load(QEMUFile *f, void *opaque, int version_id)+{+    OHCIState *ohci = opaque;++    return pci_device_load(&ohci->pci_dev, f);+}+ void usb_ohci_init(struct PCIBus *bus, int num_ports, int devfn) {     OHCIState *ohci;@@ -1265,6 +1279,8 @@         qemu_register_usb_port(&ohci->rhport[i].port, ohci, i, ohci_attach);     } +    register_savevm("OHCI USB", 0, 1, ohci_usb_save, ohci_usb_load, ohci);+     ohci->async_td = 0;     ohci_reset(ohci); }Index: ioemu/hw/usb.h===================================================================--- ioemu.orig/hw/usb.h	2007-05-09 14:10:50.000000000 +0100+++ ioemu/hw/usb.h	2007-05-09 14:11:01.000000000 +0100@@ -218,3 +218,9 @@  /* usb-msd.c */ USBDevice *usb_msd_init(const char *filename);++/* usb.c */+void generic_usb_save(QEMUFile* f, void *opaque);+int generic_usb_load(QEMUFile* f, void *opaque, int version_id);++Index: ioemu/hw/usb-uhci.c===================================================================--- ioemu.orig/hw/usb-uhci.c	2007-05-09 14:10:50.000000000 +0100+++ ioemu/hw/usb-uhci.c	2007-05-09 14:11:18.000000000 +0100@@ -760,6 +760,57 @@     register_ioport_read(addr, 32, 1, uhci_ioport_readb, s); } +void uhci_usb_save(QEMUFile *f, void *opaque)+{+    int i;+    UHCIState *s = (UHCIState*)opaque;++    pci_device_save(&s->dev, f);++    qemu_put_be16s(f, &s->cmd);+    qemu_put_be16s(f, &s->status);+    qemu_put_be16s(f, &s->intr);+    qemu_put_be16s(f, &s->frnum);+    qemu_put_be32s(f, &s->fl_base_addr);+    qemu_put_8s(f, &s->sof_timing);+    qemu_put_8s(f, &s->status2);++    for(i = 0; i < NB_PORTS; i++) {+        qemu_put_be16s(f, &s->ports[i].ctrl);+    }++    qemu_put_timer(f, s->frame_timer);+}++int uhci_usb_load(QEMUFile *f, void *opaque, int version_id)+{+    int i;+    UHCIState *s = (UHCIState*)opaque;++    if (version_id != 1)+        return -EINVAL;++    i = pci_device_load(&s->dev, f);+    if (i < 0)+	return i;++    qemu_get_be16s(f, &s->cmd);+    qemu_get_be16s(f, &s->status);+    qemu_get_be16s(f, &s->intr);+    qemu_get_be16s(f, &s->frnum);+    qemu_get_be32s(f, &s->fl_base_addr);+    qemu_get_8s(f, &s->sof_timing);+    qemu_get_8s(f, &s->status2);++    for(i = 0; i < NB_PORTS; i++) {+        qemu_get_be16s(f, &s->ports[i].ctrl);+    }++    qemu_get_timer(f, s->frame_timer);++    return 0;+}+ void usb_uhci_init(PCIBus *bus, int devfn) {     UHCIState *s;@@ -793,4 +844,6 @@        to rely on this.  */     pci_register_io_region(&s->dev, 4, 0x20,                             PCI_ADDRESS_SPACE_IO, uhci_map);++    register_savevm("UHCI usb controller", 0, 1, uhci_usb_save, uhci_usb_load, s); }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -