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

📄 hypervisor-rtc

📁 xen虚拟机源代码安装包
💻
字号:
# HG changeset patch# User kfraser@localhost.localdomain# Node ID 71e2a165aa7f81602c569430b18ba1ea705f0b70# Parent  da66691687dfd90c55420cfdf27f55d18cca7810[HVM] Move RTC emulation into the hypervisor.Signed-off-by: Xiaowei Yang <xiaowei.yang@intel.com>Index: ioemu/Makefile.target===================================================================--- ioemu.orig/Makefile.target	2007-05-09 14:12:44.000000000 +0100+++ ioemu/Makefile.target	2007-05-09 14:14:08.000000000 +0100@@ -324,7 +324,11 @@ endif  # qemu-dm objects+ifeq ($(ARCH),ia64) LIBOBJS=helper2.o exec-dm.o i8259-dm.o+else+LIBOBJS=helper2.o exec-dm.o i8259-dm.o rtc-dm.o+endif  all: $(PROGS) @@ -386,7 +390,11 @@ ifeq ($(TARGET_BASE_ARCH), i386) # Hardware support VL_OBJS+= ide.o pckbd.o ps2.o vga.o $(SOUND_HW) dma.o $(AUDIODRV)+ifeq ($(ARCH),ia64) VL_OBJS+= fdc.o mc146818rtc.o serial.o pc.o+else+VL_OBJS+= fdc.o serial.o pc.o+endif VL_OBJS+= cirrus_vga.o mixeng.o parallel.o acpi.o piix_pci.o VL_OBJS+= usb-uhci.o smbus_eeprom.o VL_OBJS+= piix4acpi.oIndex: ioemu/target-i386-dm/rtc-dm.c===================================================================--- /dev/null	1970-01-01 00:00:00.000000000 +0000+++ ioemu/target-i386-dm/rtc-dm.c	2007-05-09 14:14:13.000000000 +0100@@ -0,0 +1,124 @@+/*+ * QEMU MC146818 RTC emulation+ * + * Copyright (c) 2003-2004 Fabrice Bellard+ * + * Permission is hereby granted, free of charge, to any person obtaining a copy+ * of this software and associated documentation files (the "Software"), to deal+ * in the Software without restriction, including without limitation the rights+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell+ * copies of the Software, and to permit persons to whom the Software is+ * furnished to do so, subject to the following conditions:+ *+ * The above copyright notice and this permission notice shall be included in+ * all copies or substantial portions of the Software.+ *+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN+ * THE SOFTWARE.+ */++#include "vl.h"++// #define DEBUG_CMOS++struct RTCState {+    uint8_t cmos_data[128];+    uint8_t cmos_index;+};++static inline int to_bcd(RTCState *s, int a)+{+    return ((a / 10) << 4) | (a % 10);+}++void rtc_set_memory(RTCState *s, int addr, int val)+{+    if (addr >= 0 && addr <= 127)+        s->cmos_data[addr] = val;+}++static void cmos_ioport_write(void *opaque, uint32_t addr, uint32_t data)+{+    RTCState *s = opaque;++    if ((addr & 1) == 0) {+        s->cmos_index = data & 0x7f;+    } else {+#ifdef DEBUG_CMOS+        printf("cmos: write index=0x%02x val=0x%02x\n",+               s->cmos_index, data);+#endif        +        s->cmos_data[s->cmos_index] = data;+    }+}++static uint32_t cmos_ioport_read(void *opaque, uint32_t addr)+{+    RTCState *s = opaque;+    int ret;+    if ((addr & 1) == 0) {+        return 0xff;+    } else {+        ret = s->cmos_data[s->cmos_index];+#ifdef DEBUG_CMOS+        printf("cmos: read index=0x%02x val=0x%02x\n",+               s->cmos_index, ret);+#endif+        return ret;+    }+}++static void rtc_save(QEMUFile *f, void *opaque)+{+    RTCState *s = opaque;++    qemu_put_buffer(f, s->cmos_data, 128);+    qemu_put_8s(f, &s->cmos_index);+}++static int rtc_load(QEMUFile *f, void *opaque, int version_id)+{+    RTCState *s = opaque;++    if (version_id != 1)+        return -EINVAL;++    qemu_get_buffer(f, s->cmos_data, 128);+    qemu_get_8s(f, &s->cmos_index);++    return 0;+}++RTCState *rtc_init(int base, int irq)+{+    RTCState *s;+    time_t ti;+    struct tm *tm;+    int val;++    s = qemu_mallocz(sizeof(RTCState));+    if (!s)+        return NULL;++/* PC cmos mappings */+#define REG_IBM_CENTURY_BYTE        0x32+#define REG_IBM_PS2_CENTURY_BYTE    0x37+    time(&ti);+    tm = gmtime(&ti);		/* XXX localtime and update from guest? */+    val = to_bcd(s, (tm->tm_year / 100) + 19);+    rtc_set_memory(s, REG_IBM_CENTURY_BYTE, val);+    rtc_set_memory(s, REG_IBM_PS2_CENTURY_BYTE, val);++    register_ioport_write(base, 2, 1, cmos_ioport_write, s);+    register_ioport_read(base, 2, 1, cmos_ioport_read, s);++    register_savevm("mc146818rtc", base, 1, rtc_save, rtc_load, s);+    return s;+}++void rtc_set_date(RTCState *s, const struct tm *tm) {}

⌨️ 快捷键说明

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