Patchwork Merge vmmouse and vmport

login
register
mail settings
Submitter Blue Swirl
Date Feb. 18, 2011, 8:45 p.m.
Message ID <AANLkTi=ZyXyTyArCN87UZE0+qh2Nbsmh_PrUGk8Tjt6_@mail.gmail.com>
Download mbox | patch
Permalink /patch/83647/
State New
Headers show

Comments

Blue Swirl - Feb. 18, 2011, 8:45 p.m.
Fix also a typo in default-configs/x86_64-softmmu.

Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
---
 Makefile.objs                      |    1 -
 Makefile.target                    |    3 +-
 default-configs/x86_64-softmmu.mak |    2 +-
 hw/pc.c                            |    1 -
 hw/pc.h                            |    9 --
 hw/vmmouse.c                       |  129 ++++++++++++++++++++++++++++---
 hw/vmport.c                        |  149 ------------------------------------
 7 files changed, 120 insertions(+), 174 deletions(-)
 delete mode 100644 hw/vmport.c

-}
-device_init(vmport_dev_register)
Anthony Liguori - Feb. 18, 2011, 8:51 p.m.
On 02/18/2011 02:45 PM, Blue Swirl wrote:
> Fix also a typo in default-configs/x86_64-softmmu.
>
> Signed-off-by: Blue Swirl<blauwirbel@gmail.com>
>    

Since we never really implemented much of vmport, this seems reasonable 
to me.

Regards,

Anthony Liguori

Patch

diff --git a/Makefile.objs b/Makefile.objs
index b21f9d3..a6f8b31 100644
--- a/Makefile.objs
+++ b/Makefile.objs
@@ -259,7 +259,6 @@  hw-obj-$(CONFIG_VGA_PCI) += vga-pci.o
 hw-obj-$(CONFIG_VGA_ISA) += vga-isa.o
 hw-obj-$(CONFIG_VGA_ISA_MM) += vga-isa-mm.o
 hw-obj-$(CONFIG_VMWARE_VGA) += vmware_vga.o
-hw-obj-$(CONFIG_VMMOUSE) += vmmouse.o

 hw-obj-$(CONFIG_RC4030) += rc4030.o
 hw-obj-$(CONFIG_DP8393X) += dp8393x.o
diff --git a/Makefile.target b/Makefile.target
index 5a0fd40..5f8cf27 100644
--- a/Makefile.target
+++ b/Makefile.target
@@ -215,7 +215,8 @@  obj-$(CONFIG_KVM) += ivshmem.o
 obj-i386-y += vga.o
 obj-i386-y += mc146818rtc.o i8259.o pc.o
 obj-i386-y += cirrus_vga.o apic.o ioapic.o piix_pci.o
-obj-i386-y += vmport.o applesmc.o
+obj-i386-y += applesmc.o
+obj-i386-$(CONFIG_VMMOUSE) += vmmouse.o
 obj-i386-y += device-hotplug.o pci-hotplug.o smbios.o wdt_ib700.o
 obj-i386-y += debugcon.o multiboot.o
 obj-i386-y += pc_piix.o kvmclock.o
diff --git a/default-configs/x86_64-softmmu.mak
b/default-configs/x86_64-softmmu.mak
index 1cc1b61..9192d47 100644
--- a/default-configs/x86_64-softmmu.mak
+++ b/default-configs/x86_64-softmmu.mak
@@ -4,7 +4,7 @@  include pci.mak
 CONFIG_VGA_PCI=y
 CONFIG_VGA_ISA=y
 CONFIG_VMWARE_VGA=y
-CONFIG_VMMMOUSE=y
+CONFIG_VMMOUSE=y
 CONFIG_SERIAL=y
 CONFIG_PARALLEL=y
 CONFIG_I8254=y
diff --git a/hw/pc.c b/hw/pc.c
index 56bf1d6..fe0afb9 100644
--- a/hw/pc.c
+++ b/hw/pc.c
@@ -1136,7 +1136,6 @@  void pc_basic_device_init(qemu_irq *isa_irq,
     a20_line = qemu_allocate_irqs(handle_a20_line_change, first_cpu, 2);
     i8042 = isa_create_simple("i8042");
     i8042_setup_a20_line(i8042, &a20_line[0]);
-    vmport_init();
     vmmouse = isa_try_create("vmmouse");
     if (vmmouse) {
         qdev_prop_set_ptr(&vmmouse->qdev, "ps2_mouse", i8042);
diff --git a/hw/pc.h b/hw/pc.h
index d5d2f42..4537c9c 100644
--- a/hw/pc.h
+++ b/hw/pc.h
@@ -64,15 +64,6 @@  int pit_get_out(PITState *pit, int channel, int64_t
current_time);
 void hpet_pit_disable(void);
 void hpet_pit_enable(void);

-/* vmport.c */
-static inline void vmport_init(void)
-{
-    isa_create_simple("vmport");
-}
-void vmport_register(unsigned char command, IOPortReadFunc *func,
void *opaque);
-void vmmouse_get_data(uint32_t *data);
-void vmmouse_set_data(const uint32_t *data);
-
 /* pckbd.c */

 void i8042_init(qemu_irq kbd_irq, qemu_irq mouse_irq, uint32_t io_base);
diff --git a/hw/vmmouse.c b/hw/vmmouse.c
index ab8dbd6..19a4dfc 100644
--- a/hw/vmmouse.c
+++ b/hw/vmmouse.c
@@ -2,6 +2,7 @@ 
  * QEMU VMMouse emulation
  *
  * Copyright (C) 2007 Anthony Liguori <anthony@codemonkey.ws>
+ * Copyright (C) 2007 HervĂŠ Poussineau
  *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the
"Software"), to deal
@@ -26,10 +27,21 @@ 
 #include "ps2.h"
 #include "pc.h"
 #include "qdev.h"
+#include "isa.h"
+#include "sysemu.h"
+#include "kvm.h"

 /* debug only vmmouse */
 //#define DEBUG_VMMOUSE

+//#define VMPORT_DEBUG
+
+#ifdef DEBUG_VMMOUSE
+#define DPRINTF(fmt, ...) printf(fmt, ## __VA_ARGS__)
+#else
+#define DPRINTF(fmt, ...) do { } while (0)
+#endif
+
 /* VMMouse Commands */
 #define VMMOUSE_GETVERSION	10
 #define VMMOUSE_DATA		39
@@ -45,11 +57,12 @@ 

 #define VMMOUSE_VERSION		0x3442554a

-#ifdef DEBUG_VMMOUSE
-#define DPRINTF(fmt, ...) printf(fmt, ## __VA_ARGS__)
-#else
-#define DPRINTF(fmt, ...) do { } while (0)
-#endif
+/* VMPort Commands */
+#define VMPORT_CMD_GETVERSION 0x0a
+#define VMPORT_CMD_GETRAMSIZE 0x14
+
+#define VMPORT_ENTRIES 0x2c
+#define VMPORT_MAGIC   0x564D5868

 typedef struct _VMMouseState
 {
@@ -63,6 +76,71 @@  typedef struct _VMMouseState
     void *ps2_mouse;
 } VMMouseState;

+typedef struct VMPortState {
+    ISADevice dev;
+    IOPortReadFunc *func[VMPORT_ENTRIES];
+    void *opaque[VMPORT_ENTRIES];
+    VMMouseState mouse;
+} VMPortState;
+
+static void vmport_register(VMPortState *s, unsigned char command,
+                            IOPortReadFunc *func)
+{
+    assert(command < VMPORT_ENTRIES);
+
+    s->func[command] = func;
+}
+
+static uint32_t vmport_ioport_read(void *opaque, uint32_t addr)
+{
+    VMPortState *s = opaque;
+    CPUState *env = cpu_single_env;
+    unsigned char command;
+    uint32_t eax;
+
+    cpu_synchronize_state(env);
+
+    eax = env->regs[R_EAX];
+    if (eax != VMPORT_MAGIC) {
+        return eax;
+    }
+
+    command = env->regs[R_ECX];
+    if (command >= VMPORT_ENTRIES) {
+        return eax;
+    }
+
+    if (!s->func[command]) {
+#ifdef VMPORT_DEBUG
+        fprintf(stderr, "vmport: unknown command %x\n", command);
+#endif
+        return eax;
+    }
+
+    return s->func[command](s, addr);
+}
+
+static void vmport_ioport_write(void *opaque, uint32_t addr, uint32_t val)
+{
+    CPUState *env = cpu_single_env;
+
+    env->regs[R_EAX] = vmport_ioport_read(opaque, addr);
+}
+
+static uint32_t vmport_cmd_get_version(void *opaque, uint32_t addr)
+{
+    CPUState *env = cpu_single_env;
+    env->regs[R_EBX] = VMPORT_MAGIC;
+    return 6;
+}
+
+static uint32_t vmport_cmd_ram_size(void *opaque, uint32_t addr)
+{
+    CPUState *env = cpu_single_env;
+    env->regs[R_EBX] = 0x1177;
+    return ram_size;
+}
+
 static uint32_t vmmouse_get_status(VMMouseState *s)
 {
     DPRINTF("vmmouse_get_status()\n");
@@ -178,9 +256,28 @@  static void vmmouse_data(VMMouseState *s,
uint32_t *data, uint32_t size)
         memmove(s->queue, &s->queue[size], sizeof(s->queue[0]) * s->nb_queue);
 }

+static void vmmouse_get_data(uint32_t *data)
+{
+    CPUState *env = cpu_single_env;
+
+    data[0] = env->regs[R_EAX]; data[1] = env->regs[R_EBX];
+    data[2] = env->regs[R_ECX]; data[3] = env->regs[R_EDX];
+    data[4] = env->regs[R_ESI]; data[5] = env->regs[R_EDI];
+}
+
+static void vmmouse_set_data(const uint32_t *data)
+{
+    CPUState *env = cpu_single_env;
+
+    env->regs[R_EAX] = data[0]; env->regs[R_EBX] = data[1];
+    env->regs[R_ECX] = data[2]; env->regs[R_EDX] = data[3];
+    env->regs[R_ESI] = data[4]; env->regs[R_EDI] = data[5];
+}
+
 static uint32_t vmmouse_ioport_read(void *opaque, uint32_t addr)
 {
-    VMMouseState *s = opaque;
+    VMPortState *d = opaque;
+    VMMouseState *s = &d->mouse;
     uint32_t data[6];
     uint16_t command;

@@ -258,14 +355,22 @@  static void vmmouse_reset(DeviceState *d)

 static int vmmouse_initfn(ISADevice *dev)
 {
-    VMMouseState *s = DO_UPCAST(VMMouseState, dev, dev);
+    VMPortState *s = DO_UPCAST(VMPortState, dev, dev);

     DPRINTF("vmmouse_init\n");
-
-    vmport_register(VMMOUSE_STATUS, vmmouse_ioport_read, s);
-    vmport_register(VMMOUSE_COMMAND, vmmouse_ioport_read, s);
-    vmport_register(VMMOUSE_DATA, vmmouse_ioport_read, s);
-    vmstate_register(NULL, 0, &vmstate_vmmouse, s);
+    register_ioport_read(0x5658, 1, 4, vmport_ioport_read, s);
+    register_ioport_write(0x5658, 1, 4, vmport_ioport_write, s);
+    isa_init_ioport(dev, 0x5658);
+
+    /* Register some generic port commands */
+    vmport_register(s, VMPORT_CMD_GETVERSION, vmport_cmd_get_version);
+    vmport_register(s, VMPORT_CMD_GETRAMSIZE, vmport_cmd_ram_size);
+
+    /* VMMouse */
+    vmport_register(s, VMMOUSE_STATUS, vmmouse_ioport_read);
+    vmport_register(s, VMMOUSE_COMMAND, vmmouse_ioport_read);
+    vmport_register(s, VMMOUSE_DATA, vmmouse_ioport_read);
+    vmstate_register(NULL, 0, &vmstate_vmmouse, &s->mouse);

     return 0;
 }
diff --git a/hw/vmport.c b/hw/vmport.c
deleted file mode 100644
index 19010e4..0000000
--- a/hw/vmport.c
+++ /dev/null
@@ -1,149 +0,0 @@ 
-/*
- * QEMU VMPort emulation
- *
- * Copyright (C) 2007 Hervé Poussineau
- *
- * 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 "hw.h"
-#include "isa.h"
-#include "pc.h"
-#include "sysemu.h"
-#include "kvm.h"
-#include "qdev.h"
-
-//#define VMPORT_DEBUG
-
-#define VMPORT_CMD_GETVERSION 0x0a
-#define VMPORT_CMD_GETRAMSIZE 0x14
-
-#define VMPORT_ENTRIES 0x2c
-#define VMPORT_MAGIC   0x564D5868
-
-typedef struct _VMPortState
-{
-    ISADevice dev;
-    IOPortReadFunc *func[VMPORT_ENTRIES];
-    void *opaque[VMPORT_ENTRIES];
-} VMPortState;
-
-static VMPortState *port_state;
-
-void vmport_register(unsigned char command, IOPortReadFunc *func, void *opaque)
-{
-    if (command >= VMPORT_ENTRIES)
-        return;
-
-    port_state->func[command] = func;
-    port_state->opaque[command] = opaque;
-}
-
-static uint32_t vmport_ioport_read(void *opaque, uint32_t addr)
-{
-    VMPortState *s = opaque;
-    CPUState *env = cpu_single_env;
-    unsigned char command;
-    uint32_t eax;
-
-    cpu_synchronize_state(env);
-
-    eax = env->regs[R_EAX];
-    if (eax != VMPORT_MAGIC)
-        return eax;
-
-    command = env->regs[R_ECX];
-    if (command >= VMPORT_ENTRIES)
-        return eax;
-    if (!s->func[command])
-    {
-#ifdef VMPORT_DEBUG
-        fprintf(stderr, "vmport: unknown command %x\n", command);
-#endif
-        return eax;
-    }
-
-    return s->func[command](s->opaque[command], addr);
-}
-
-static void vmport_ioport_write(void *opaque, uint32_t addr, uint32_t val)
-{
-    CPUState *env = cpu_single_env;
-
-    env->regs[R_EAX] = vmport_ioport_read(opaque, addr);
-}
-
-static uint32_t vmport_cmd_get_version(void *opaque, uint32_t addr)
-{
-    CPUState *env = cpu_single_env;
-    env->regs[R_EBX] = VMPORT_MAGIC;
-    return 6;
-}
-
-static uint32_t vmport_cmd_ram_size(void *opaque, uint32_t addr)
-{
-    CPUState *env = cpu_single_env;
-    env->regs[R_EBX] = 0x1177;
-    return ram_size;
-}
-
-/* vmmouse helpers */
-void vmmouse_get_data(uint32_t *data)
-{
-    CPUState *env = cpu_single_env;
-
-    data[0] = env->regs[R_EAX]; data[1] = env->regs[R_EBX];
-    data[2] = env->regs[R_ECX]; data[3] = env->regs[R_EDX];
-    data[4] = env->regs[R_ESI]; data[5] = env->regs[R_EDI];
-}
-
-void vmmouse_set_data(const uint32_t *data)
-{
-    CPUState *env = cpu_single_env;
-
-    env->regs[R_EAX] = data[0]; env->regs[R_EBX] = data[1];
-    env->regs[R_ECX] = data[2]; env->regs[R_EDX] = data[3];
-    env->regs[R_ESI] = data[4]; env->regs[R_EDI] = data[5];
-}
-
-static int vmport_initfn(ISADevice *dev)
-{
-    VMPortState *s = DO_UPCAST(VMPortState, dev, dev);
-
-    register_ioport_read(0x5658, 1, 4, vmport_ioport_read, s);
-    register_ioport_write(0x5658, 1, 4, vmport_ioport_write, s);
-    isa_init_ioport(dev, 0x5658);
-    port_state = s;
-    /* Register some generic port commands */
-    vmport_register(VMPORT_CMD_GETVERSION, vmport_cmd_get_version, NULL);
-    vmport_register(VMPORT_CMD_GETRAMSIZE, vmport_cmd_ram_size, NULL);
-    return 0;
-}
-
-static ISADeviceInfo vmport_info = {
-    .qdev.name     = "vmport",
-    .qdev.size     = sizeof(VMPortState),
-    .qdev.no_user  = 1,
-    .init          = vmport_initfn,
-};
-
-static void vmport_dev_register(void)
-{
-    isa_qdev_register(&vmport_info);