qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] OpenStep / Busmouse - correct patch
@ 2006-01-01 18:38 engel
  2006-01-01 22:35 ` Johannes Schindelin
  0 siblings, 1 reply; 8+ messages in thread
From: engel @ 2006-01-01 18:38 UTC (permalink / raw)
  To: qemu-devel

[-- Attachment #1: Type: text/plain, Size: 432 bytes --]

Oops,

I accidentially sent out an old version of the patch with
which the mouse button emulation doesn't work.

I attached the correct version to this mail. Sorry...

Michael
-- 
Dr. rer. nat. Michael Engel   - engel@informatik.uni-marburg.de
University of Marburg         - Dept. of Mathematics and Computer Science
Hans-Meerwein-Str.            - D-35032 Marburg, Germany
Phone: +49 6421 / 28 21562    - Fax: +49 6421 / 28 21573

[-- Attachment #2: qemu-0.8.0-openstep-busmouse-2.diff.gz --]
[-- Type: application/x-gzip, Size: 2677 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] OpenStep / Busmouse - correct patch
  2006-01-01 18:38 [Qemu-devel] OpenStep / Busmouse - correct patch engel
@ 2006-01-01 22:35 ` Johannes Schindelin
       [not found]   ` <Pine.LNX.4.63.0601012333280.32534@wbgn013.biozentrum.uni-wuerzburg.de >
  0 siblings, 1 reply; 8+ messages in thread
From: Johannes Schindelin @ 2006-01-01 22:35 UTC (permalink / raw)
  To: qemu-devel

Hi,

On Sun, 1 Jan 2006, engel@mathematik.uni-marburg.de wrote:

> I attached the correct version to this mail. Sorry...

Impressive! How about this on top (unfortunately untested, since I do not 
have a system handy which supports a busmouse):

---
[PATCH] Add -busmouse switch

Now, you can enable the busmouse (thereby disabling the PS/2 mouse) 
emulation with "qemu -busmouse".

---

 hw/busmouse.c |   21 ++++++++++-----------
 hw/pc.c       |    7 -------
 hw/ps2.c      |   10 +++++++---
 vl.c          |   18 ++++++++++++++++++
 vl.h          |    8 ++------
 5 files changed, 37 insertions(+), 27 deletions(-)

10fcdd858caaaec8e7deaa5d349afbb1d93c4640
diff --git a/hw/busmouse.c b/hw/busmouse.c
index b0eb0e3..a935f5c 100644
--- a/hw/busmouse.c
+++ b/hw/busmouse.c
@@ -29,7 +29,7 @@
  * and internal state
  */
 
-struct BusmouseState {
+typedef struct BusmouseState {
     uint8_t data;
     uint8_t signature;
     uint8_t control;
@@ -38,13 +38,12 @@ struct BusmouseState {
     uint8_t command;
     int irq;
     int irq_pending;
-    CharDriverState *chr;
     int hw_driver;
     uint16_t mouse_dx;
     uint16_t mouse_dy;
     uint16_t mouse_dz;
     uint16_t mouse_buttons;
-};
+} BusmouseState;
 
 static void busmouse_update_irq(BusmouseState *s);
 
@@ -139,22 +138,22 @@ static uint32_t busmouse_ioport_read(voi
     return ret;
 }
 
+#define BUSMOUSE_BASE 0x238
+#define BUSMOUSE_IRQ 5
+
 /* If fd is zero, it means that the busmouse device uses the console */
-BusmouseState *busmouse_init(int base, int irq, CharDriverState *chr)
+void busmouse_init()
 {
     BusmouseState *s;
 
     s = qemu_mallocz(sizeof(BusmouseState));
     if (!s)
-        return NULL;
-    s->chr = chr;
+        return;
     s->hw_driver = 0;
-    s->irq = irq;
+    s->irq = BUSMOUSE_IRQ;
     s->data = 0;
     s->mouse_buttons = 0x0;
-    register_ioport_write(base, 8, 1, busmouse_ioport_write, s);
-    register_ioport_read(base, 8, 1, busmouse_ioport_read, s);
+    register_ioport_write(BUSMOUSE_BASE, 8, 1, busmouse_ioport_write, s);
+    register_ioport_read(BUSMOUSE_BASE, 8, 1, busmouse_ioport_read, s);
     qemu_add_mouse_event_handler(busmouse_event, s);
-
-    return s;
 }
diff --git a/hw/pc.c b/hw/pc.c
index cc3ec3e..8e750b6 100644
--- a/hw/pc.c
+++ b/hw/pc.c
@@ -574,9 +574,6 @@ static int serial_irq[MAX_SERIAL_PORTS] 
 static int parallel_io[MAX_PARALLEL_PORTS] = { 0x378, 0x278, 0x3bc };
 static int parallel_irq[MAX_PARALLEL_PORTS] = { 7, 7, 7 };
 
-static int busmouse_io[MAX_BUSMOUSE_PORTS] = { 0x238 };
-static int busmouse_irq[MAX_BUSMOUSE_PORTS] = { 5 };
-
 #ifdef HAS_AUDIO
 static void audio_init (PCIBus *pci_bus)
 {
@@ -803,10 +800,6 @@ static void pc_init1(int ram_size, int v
         }
     }
 
-    for(i = 0; i < 1; i++) {
-        busmouse_init(busmouse_io[i], busmouse_irq[i], 0);
-    }
-
     if (pci_enabled) {
         for(i = 0; i < nb_nics; i++) {
             pci_ne2000_init(pci_bus, &nd_table[i]);
diff --git a/hw/ps2.c b/hw/ps2.c
index 7fbc535..500da2b 100644
--- a/hw/ps2.c
+++ b/hw/ps2.c
@@ -500,15 +500,19 @@ void *ps2_kbd_init(void (*update_irq)(vo
 
 void *ps2_mouse_init(void (*update_irq)(void *, int), void *update_arg)
 {
-    PS2MouseState *s = (PS2MouseState *)qemu_mallocz(sizeof(PS2MouseState));
+    PS2MouseState *s;
+
+    if (!ps2_mouse_enabled)
+        return NULL;
+
+    s = (PS2MouseState *)qemu_mallocz(sizeof(PS2MouseState));
 
     s->common.update_irq = update_irq;
     s->common.update_arg = update_arg;
     ps2_reset(&s->common);
     register_savevm("ps2mouse", 0, 1, ps2_mouse_save, ps2_mouse_load, s);
 
-    /* disabled for busmouse emulation (req'd for running OpenStep) */
-    /* qemu_add_mouse_event_handler(ps2_mouse_event, s); */
+    qemu_add_mouse_event_handler(ps2_mouse_event, s);
     qemu_register_reset(ps2_reset, &s->common);
     return s;
 }
diff --git a/vl.c b/vl.c
index 794ed22..f82177b 100644
--- a/vl.c
+++ b/vl.c
@@ -144,6 +144,8 @@ int win2k_install_hack = 0;
 int usb_enabled = 0;
 USBPort *vm_usb_ports[MAX_VM_USB_PORTS];
 USBDevice *vm_usb_hub;
+int ps2_mouse_enabled = 1;
+int busmouse_enabled = 0;
 static VLANState *first_vlan;
 int smp_cpus = 1;
 #if defined(TARGET_SPARC)
@@ -3983,6 +3985,9 @@ void help(void)
 #endif
            "-usb            enable the USB driver (will be the default soon)\n"
            "-usbdevice name add the host or guest USB device 'name'\n"
+#ifdef TARGET_I386
+           "-busmouse       emulate busmouse instead of standard PS/2\n"
+#endif
 #if defined(TARGET_PPC) || defined(TARGET_SPARC)
            "-g WxH[xDEPTH]  Set the initial graphical resolution and depth\n"
 #endif
@@ -4125,6 +4130,7 @@ enum {
     QEMU_OPTION_win2k_hack,
     QEMU_OPTION_usb,
     QEMU_OPTION_usbdevice,
+    QEMU_OPTION_busmouse,
     QEMU_OPTION_smp,
 };
 
@@ -4191,6 +4197,7 @@ const QEMUOption qemu_options[] = {
     { "pidfile", HAS_ARG, QEMU_OPTION_pidfile },
     { "win2k-hack", 0, QEMU_OPTION_win2k_hack },
     { "usbdevice", HAS_ARG, QEMU_OPTION_usbdevice },
+    { "busmouse", 0, QEMU_OPTION_busmouse },
     { "smp", HAS_ARG, QEMU_OPTION_smp },
     
     /* temporary options */
@@ -4766,6 +4773,12 @@ int main(int argc, char **argv)
                         optarg);
                 usb_devices_index++;
                 break;
+#ifdef TARGET_I386
+            case QEMU_OPTION_busmouse:
+                busmouse_enabled = 1;
+                ps2_mouse_enabled = 0;
+                break;
+#endif
             case QEMU_OPTION_smp:
                 smp_cpus = atoi(optarg);
                 if (smp_cpus < 1 || smp_cpus > MAX_CPUS) {
@@ -4921,6 +4934,11 @@ int main(int argc, char **argv)
         }
     }
 
+#ifdef TARGET_I386
+    if (busmouse_enabled)
+        busmouse_init();
+#endif
+
     register_savevm("timer", 0, 1, timer_save, timer_load, NULL);
     register_savevm("ram", 0, 1, ram_save, ram_load, NULL);
 
diff --git a/vl.h b/vl.h
index c50ac5d..6d87a6e 100644
--- a/vl.h
+++ b/vl.h
@@ -137,6 +137,7 @@ extern const char *keyboard_layout;
 extern int kqemu_allowed;
 extern int win2k_install_hack;
 extern int usb_enabled;
+extern int ps2_mouse_enabled;
 extern int smp_cpus;
 
 /* XXX: make it dynamic */
@@ -271,10 +272,6 @@ extern CharDriverState *serial_hds[MAX_S
 
 #define MAX_PARALLEL_PORTS 3
 
-/* busmouse ports */
-
-#define MAX_BUSMOUSE_PORTS 1
-
 extern CharDriverState *parallel_hds[MAX_PARALLEL_PORTS];
 
 /* VLANs support */
@@ -761,8 +758,7 @@ ParallelState *parallel_init(int base, i
 
 /* busmouse.c */
 
-typedef struct BusmouseState BusmouseState;
-BusmouseState *busmouse_init(int base, int irq, CharDriverState *chr);
+void busmouse_init();
 
 /* i8259.c */
 
-- 
1.0.GIT

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] OpenStep / Busmouse - correct patch
       [not found]   ` <Pine.LNX.4.63.0601012333280.32534@wbgn013.biozentrum.uni-wuerzburg.de >
@ 2006-01-03 11:58     ` engel
  2006-01-03 13:49       ` Johannes Schindelin
  0 siblings, 1 reply; 8+ messages in thread
From: engel @ 2006-01-03 11:58 UTC (permalink / raw)
  To: qemu-devel


Hi,

> On Sun, 1 Jan 2006, engel@mathematik.uni-marburg.de wrote:
>
>> I attached the correct version to this mail. Sorry...
>
> Impressive!

Thanks! The most difficult problem was actually finding documentation
on the busmouse controller ;-).

> How about this on top (unfortunately untested, since I do not
> have a system handy which supports a busmouse):

Hmm, there seems to be a problem with your patch, though I haven't quite
figured out what exactly the cause is. When using the -busmouse option,
the busmouse_init function is called and seems to register the callbacks for
the provided I/O address ranges successfully (return value is 0 from
register_
ioport_{read,write}) - but the actual callback routines are never being
executed, which results in OpenStep not recognizing the busmouse.

regards,
    Michael

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] OpenStep / Busmouse - correct patch
  2006-01-03 11:58     ` engel
@ 2006-01-03 13:49       ` Johannes Schindelin
  2006-01-03 15:44         ` malc
  2006-01-03 17:47         ` engel
  0 siblings, 2 replies; 8+ messages in thread
From: Johannes Schindelin @ 2006-01-03 13:49 UTC (permalink / raw)
  To: qemu-devel

Hi,

On Tue, 3 Jan 2006, engel@mathematik.uni-marburg.de wrote:

> The most difficult problem was actually finding documentation on the 
> busmouse controller ;-).

That always seems to be the biggest problem...

> > How about this on top (unfortunately untested, since I do not
> > have a system handy which supports a busmouse):
> 
> Hmm, there seems to be a problem with your patch, though I haven't quite 
> figured out what exactly the cause is. When using the -busmouse option, 
> the busmouse_init function is called and seems to register the callbacks 
> for the provided I/O address ranges successfully (return value is 0 from 
> register_ioport_{read,write}) - but the actual callback routines are 
> never being executed, which results in OpenStep not recognizing the 
> busmouse.

I'll investigate.

Ciao,
Dscho

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] OpenStep / Busmouse - correct patch
  2006-01-03 13:49       ` Johannes Schindelin
@ 2006-01-03 15:44         ` malc
  2006-01-03 17:47         ` engel
  1 sibling, 0 replies; 8+ messages in thread
From: malc @ 2006-01-03 15:44 UTC (permalink / raw)
  To: qemu-devel

On Tue, 3 Jan 2006, Johannes Schindelin wrote:

> Hi,
>
> On Tue, 3 Jan 2006, engel@mathematik.uni-marburg.de wrote:
>
>> The most difficult problem was actually finding documentation on the
>> busmouse controller ;-).
>
> That always seems to be the biggest problem...
>
>>> How about this on top (unfortunately untested, since I do not
>>> have a system handy which supports a busmouse):
>>
>> Hmm, there seems to be a problem with your patch, though I haven't quite
>> figured out what exactly the cause is. When using the -busmouse option,
>> the busmouse_init function is called and seems to register the callbacks
>> for the provided I/O address ranges successfully (return value is 0 from
>> register_ioport_{read,write}) - but the actual callback routines are
>> never being executed, which results in OpenStep not recognizing the
>> busmouse.
>
> I'll investigate.
>

FWIW. IRQ 5 is already taken by sb16.

-- 
mailto:malc@pulsesoft.com

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] OpenStep / Busmouse - correct patch
  2006-01-03 13:49       ` Johannes Schindelin
  2006-01-03 15:44         ` malc
@ 2006-01-03 17:47         ` engel
  2006-05-15 13:53           ` Christian Brunschen
  1 sibling, 1 reply; 8+ messages in thread
From: engel @ 2006-01-03 17:47 UTC (permalink / raw)
  To: qemu-devel


Hi,

>> Hmm, there seems to be a problem with your patch, though I haven't quite
>> figured out what exactly the cause is. When using the -busmouse option,
>> the busmouse_init function is called and seems to register the callbacks
>> for the provided I/O address ranges successfully (return value is 0 from
>> register_ioport_{read,write}) - but the actual callback routines are
>> never being executed, which results in OpenStep not recognizing the
>> busmouse.
>
> I'll investigate.

Got it! Your patch calls busmouse_init() before calling init_ioports() in
vl.c.
I moved the sequence some lines down (below cpu_calibrate_ticks), and
now the mouse works as expected.

malc's remark, however, is correct - the SB16 emulation also uses IRQ 5.
I have to check if OpenStep is able to use a different IRQ for either the
Soundblaster or the busmouse driver...

Btw., networking now works fine using an open source NE2k PCI driver
for OpenStep. I'll post a unified patch later this evening and set up a web
page describing how to install OpenStep in qemu.

Michael

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] OpenStep / Busmouse - correct patch
  2006-01-03 17:47         ` engel
@ 2006-05-15 13:53           ` Christian Brunschen
  2006-05-15 15:26             ` Natalia Portillo
  0 siblings, 1 reply; 8+ messages in thread
From: Christian Brunschen @ 2006-05-15 13:53 UTC (permalink / raw)
  To: qemu-devel


Hi,

On Tue, 3 Jan 2006, engel@mathematik.uni-marburg.de wrote:

> Btw., networking now works fine using an open source NE2k PCI driver
> for OpenStep. I'll post a unified patch later this evening and set up a web
> page describing how to install OpenStep in qemu.

Did this ever come to fruition? Did the busmouse driver get incorporated 
into mainline Qemu?

> Michael

Best wishes,

// Christian Brunschen

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] OpenStep / Busmouse - correct patch
  2006-05-15 13:53           ` Christian Brunschen
@ 2006-05-15 15:26             ` Natalia Portillo
  0 siblings, 0 replies; 8+ messages in thread
From: Natalia Portillo @ 2006-05-15 15:26 UTC (permalink / raw)
  To: qemu-devel

Nope,


However is not the best solution.

OpenStep should work with PS/2 mice as real hardware and VirtualPC  
works.
So there should be a problem with our PS/2 mouse emulation.


Regards

El 15/05/2006, a las 15:53, Christian Brunschen escribió:

>
> Hi,
>
> On Tue, 3 Jan 2006, engel@mathematik.uni-marburg.de wrote:
>
>> Btw., networking now works fine using an open source NE2k PCI driver
>> for OpenStep. I'll post a unified patch later this evening and set  
>> up a web
>> page describing how to install OpenStep in qemu.
>
> Did this ever come to fruition? Did the busmouse driver get  
> incorporated into mainline Qemu?
>
>> Michael
>
> Best wishes,
>
> // Christian Brunschen
>
>
> _______________________________________________
> Qemu-devel mailing list
> Qemu-devel@nongnu.org
> http://lists.nongnu.org/mailman/listinfo/qemu-devel
>

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2006-05-15 15:27 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-01-01 18:38 [Qemu-devel] OpenStep / Busmouse - correct patch engel
2006-01-01 22:35 ` Johannes Schindelin
     [not found]   ` <Pine.LNX.4.63.0601012333280.32534@wbgn013.biozentrum.uni-wuerzburg.de >
2006-01-03 11:58     ` engel
2006-01-03 13:49       ` Johannes Schindelin
2006-01-03 15:44         ` malc
2006-01-03 17:47         ` engel
2006-05-15 13:53           ` Christian Brunschen
2006-05-15 15:26             ` Natalia Portillo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).