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

📄 ioemu-save-restore-ide

📁 xen虚拟机源代码安装包
💻
字号:
Index: ioemu/hw/ide.c===================================================================--- ioemu.orig/hw/ide.c	2007-05-03 19:24:12.000000000 +0100+++ ioemu/hw/ide.c	2007-05-03 19:24:43.000000000 +0100@@ -2623,9 +2623,124 @@     ide_init_ioport(&d->ide_if[0], 0x1f0, 0x3f6);     ide_init_ioport(&d->ide_if[2], 0x170, 0x376); +    register_savevm("ide_pci", 0, 1, pci_device_save, pci_device_load, d);     register_savevm("ide", 0, 1, pci_ide_save, pci_ide_load, d); } +static void pci_ide_save(QEMUFile* f, void *opaque)+{+    PCIIDEState *d = opaque;+    int i;++    for(i = 0; i < 2; i++) {+        BMDMAState *bm = &d->bmdma[i];+        qemu_put_8s(f, &bm->cmd);+        qemu_put_8s(f, &bm->status);+        qemu_put_be32s(f, &bm->addr);+        /* XXX: if a transfer is pending, we do not save it yet */+    }++    /* per IDE interface data */+    for(i = 0; i < 2; i++) {+        IDEState *s = &d->ide_if[i * 2];+        uint8_t drive1_selected;+        qemu_put_8s(f, &s->cmd);+        drive1_selected = (s->cur_drive != s);+        qemu_put_8s(f, &drive1_selected);+    }++    /* per IDE drive data */+    for(i = 0; i < 4; i++) {+        IDEState *s = &d->ide_if[i];+        qemu_put_be32s(f, &s->mult_sectors);+        qemu_put_be32s(f, &s->identify_set);+        if (s->identify_set) {+            qemu_put_buffer(f, (const uint8_t *)s->identify_data, 512);+        }+        qemu_put_8s(f, &s->write_cache);+        qemu_put_8s(f, &s->feature);+        qemu_put_8s(f, &s->error);+        qemu_put_be32s(f, &s->nsector);+        qemu_put_8s(f, &s->sector);+        qemu_put_8s(f, &s->lcyl);+        qemu_put_8s(f, &s->hcyl);+        qemu_put_8s(f, &s->hob_feature);+        qemu_put_8s(f, &s->hob_nsector);+        qemu_put_8s(f, &s->hob_sector);+        qemu_put_8s(f, &s->hob_lcyl);+        qemu_put_8s(f, &s->hob_hcyl);+        qemu_put_8s(f, &s->select);+        qemu_put_8s(f, &s->status);+        qemu_put_8s(f, &s->lba48);++        qemu_put_8s(f, &s->sense_key);+        qemu_put_8s(f, &s->asc);+        /* XXX: if a transfer is pending, we do not save it yet */+    }+}++static int pci_ide_load(QEMUFile* f, void *opaque, int version_id)+{+    PCIIDEState *d = opaque;+    int ret, i;++    if (version_id != 1)+        return -EINVAL;++    for(i = 0; i < 2; i++) {+        BMDMAState *bm = &d->bmdma[i];+        qemu_get_8s(f, &bm->cmd);+        qemu_get_8s(f, &bm->status);+        qemu_get_be32s(f, &bm->addr);+        /* XXX: if a transfer is pending, we do not save it yet */+    }++    /* per IDE interface data */+    for(i = 0; i < 2; i++) {+        IDEState *s = &d->ide_if[i * 2];+        uint8_t drive1_selected;+        qemu_get_8s(f, &s->cmd);+        qemu_get_8s(f, &drive1_selected);+        s->cur_drive = &d->ide_if[i * 2 + (drive1_selected != 0)];+    }++    /* per IDE drive data */+    for(i = 0; i < 4; i++) {+        IDEState *s = &d->ide_if[i];+        qemu_get_be32s(f, &s->mult_sectors);+        qemu_get_be32s(f, &s->identify_set);+        if (s->identify_set) {+            qemu_get_buffer(f, (uint8_t *)s->identify_data, 512);+        }+        qemu_get_8s(f, &s->write_cache);+        qemu_get_8s(f, &s->feature);+        qemu_get_8s(f, &s->error);+        qemu_get_be32s(f, &s->nsector);+        qemu_get_8s(f, &s->sector);+        qemu_get_8s(f, &s->lcyl);+        qemu_get_8s(f, &s->hcyl);+        qemu_get_8s(f, &s->hob_feature);+        qemu_get_8s(f, &s->hob_nsector);+        qemu_get_8s(f, &s->hob_sector);+        qemu_get_8s(f, &s->hob_lcyl);+        qemu_get_8s(f, &s->hob_hcyl);+        qemu_get_8s(f, &s->select);+        qemu_get_8s(f, &s->status);+        qemu_get_8s(f, &s->lba48);++        qemu_get_8s(f, &s->sense_key);+        qemu_get_8s(f, &s->asc);+        /* XXX: if a transfer is pending, we do not save it yet */+        if (s->status & (DRQ_STAT|BUSY_STAT)) {+            /* Tell the guest that its transfer has gone away */+            ide_abort_command(s);+            ide_set_irq(s);+        }+    }+    return 0;+}++ /* hd_table must contain 4 block drivers */ /* NOTE: for the PIIX3, the IRQs and IOports are hardcoded */ void pci_piix3_ide_init(PCIBus *bus, BlockDriverState **hd_table, int devfn)@@ -2662,6 +2777,7 @@     ide_init_ioport(&d->ide_if[0], 0x1f0, 0x3f6);     ide_init_ioport(&d->ide_if[2], 0x170, 0x376); +    register_savevm("ide_pci", 0, 1, pci_device_save, pci_device_load, d);     register_savevm("ide", 0, 1, pci_ide_save, pci_ide_load, d); } 

⌨️ 快捷键说明

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