qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Anthony Liguori <anthony@codemonkey.ws>
To: Brian Wheeler <bdwheele@indiana.edu>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] Can't compile ISA device...
Date: Wed, 20 Oct 2010 13:07:34 -0500	[thread overview]
Message-ID: <4CBF2FE6.1050709@codemonkey.ws> (raw)
In-Reply-To: <1287597687.2393.63.camel@nibbler.dlib.indiana.edu>

On 10/20/2010 01:01 PM, Brian Wheeler wrote:
> I'm trying to write a busmouse driver and I can't get it to compile.  It
> seems like there's a header issue of some sort that I can't work out.
>
> Of course, if someone has a working busmouse driver for qemu, that would
> be great:  OpenStep won't work with the ps/2 emulation and even after
> pounding on it for a few days I can't seem to narrow down why it OS
> stops paying attention to it.  The consensus in 2006 was "fix the ps/2
> emulation" but apparently nobody has been able to figure out how its
> broken and this seems like a reasonable solution.
>
> My code is based on the pc98 busmouse driver by TAKEDA, toshiya and the
> busmouse patches that floated around the list over the last few years.
>
> Anyway, it seems like a typedef is wrong.  Did I miss something obvious?
>
> Thanks
> Brian
>
> I'm getting:
> ==============================
> In file included from /home/bdwheele/Projects/qemu/hw/pc.h:7,
>                   from /home/bdwheele/Projects/qemu/hw/busmouse.c:30:
> /home/bdwheele/Projects/qemu/hw/isa.h:33: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘isa_mem_base’
> /home/bdwheele/Projects/qemu/hw/isa.h:35: error: expected ‘)’ before ‘base’
> In file included from /home/bdwheele/Projects/qemu/hw/pc.h:8,
>                   from /home/bdwheele/Projects/qemu/hw/busmouse.c:30:
> /home/bdwheele/Projects/qemu/hw/fdc.h:11: error: expected declaration specifiers or ‘...’ before ‘target_phys_addr_t’
> /home/bdwheele/Projects/qemu/hw/fdc.h:12: error: expected declaration specifiers or ‘...’ before ‘target_phys_addr_t’
> In file included from /home/bdwheele/Projects/qemu/hw/busmouse.c:30:
> /home/bdwheele/Projects/qemu/hw/pc.h:15: error: expected ‘)’ before ‘base’
> /home/bdwheele/Projects/qemu/hw/pc.h:26: error: expected ‘)’ before ‘base’
> /home/bdwheele/Projects/qemu/hw/pc.h:78: error: expected declaration specifiers or ‘...’ before ‘target_phys_addr_t’
> /home/bdwheele/Projects/qemu/hw/pc.h:78: error: expected declaration specifiers or ‘...’ before ‘ram_addr_t’
> /home/bdwheele/Projects/qemu/hw/pc.h:79: error: expected declaration specifiers or ‘...’ before ‘target_phys_addr_t’
> /home/bdwheele/Projects/qemu/hw/pc.h:91: error: expected ‘)’ before ‘ram_size’
> /home/bdwheele/Projects/qemu/hw/pc.h:106: error: expected ‘)’ before ‘ram_size’
> /home/bdwheele/Projects/qemu/hw/pc.h:141: error: expected declaration specifiers or ‘...’ before ‘ram_addr_t’
> /home/bdwheele/Projects/qemu/hw/pc.h:159: error: expected ‘)’ before ‘vram_base’
> =========================================
>
> I've added it to Makefile.objs:
> =========================================
> diff --git a/Makefile.objs b/Makefile.objs
> index 816194a..908c21f 100644
> --- a/Makefile.objs
> +++ b/Makefile.objs
> @@ -81,7 +81,7 @@ common-obj-y += bt.o bt-host.o bt-vhci.o bt-l2cap.o bt-sdp.o bt-hci.o bt-hid.o u
>   common-obj-y += bt-hci-csr.o
>   common-obj-y += buffered_file.o migration.o migration-tcp.o qemu-sockets.o
>   common-obj-y += qemu-char.o savevm.o #aio.o
> -common-obj-y += msmouse.o ps2.o
> +common-obj-y += msmouse.o ps2.o busmouse.o
>   common-obj-y += qdev.o qdev-properties.o
>   common-obj-y += block-migration.o
>   common-obj-y += pflib.o
> ==================================================
>
> and here's the source:
> =========================
>    

#include "qemu-common.h"

Will probably do the trick.

Regards,

Anthony Liguori

> #include "hw.h"
> #include "pc.h"
> #include "isa.h"
> #include "qdev.h"
> #include "console.h"
>
> struct mouse_t {
>      int button;
>      int dx, dy;
>      uint8_t index;
>      qemu_irq irq;
>      int irq_pending;
> };
>
> typedef struct mouse_isabus_t {
>      ISADevice busdev;
>      struct mouse_t state;
> } mouse_isabus_t;
>
> typedef struct mouse_t mouse_t;
>
> /* mouse */
>
> static void mouse_event_handler(void *opaque,
>                                  int dx, int dy, int dz, int buttons_state)
> {
>      mouse_t *s = opaque;
>      s->button = buttons_state;
>      s->dx += dx;
>      s->dy += dy;
>      s->irq_pending = 1;
> }
>
>
> static void busmouse_update_irq(mouse_t *s)
> {
>      if (s->irq_pending) {
> 	qemu_set_irq(s->irq, 1);
>      } else {
> 	qemu_set_irq(s->irq, 0);
>      }
> }
>
>
> /* pio */
>
> static void busmouse_pio_write(void *opaque, uint32_t addr, uint32_t val)
> {
>      mouse_t *s = opaque;
>      switch(addr) {
>      case 0:  //data
> 	break;
>      case 1: // signature
> 	break;
>      case 2: // control
> 	s->index = val;
> 	break;
>      case 3: // config
> 	break;
>      }
> 	
>
> }
>
> static uint32_t busmouse_pio_read(void *opaque, uint32_t addr)
> {
>      mouse_t *s = opaque;
>      uint32_t val = 0;
>      static int interrupt_val = 0x01;
>      s->irq_pending = 0;
>      switch(addr) {
>      case 0: // data
> 	s->irq_pending = 0;
> 	val |= (s->button&  1)? 0x80 : 0x00;
> 	val |= (s->button&  2)? 0x40 : 0x00;
> 	val |= (s->button&  4)? 0x20 : 0x00;
> 	val |= ((s->index&  0x40? s->dy : s->dx)>>  (s->index&  0x20? 4 : 0))&  0x0f;
> 	busmouse_update_irq(s);
> 	break;
>      case 1: // signature
> 	val = 0xa5;
> 	busmouse_update_irq(s);
> 	break;
>      case 2: // control
> 	val = interrupt_val;
> 	interrupt_val = (interrupt_val<<  1)&&  0xff;
> 	if (interrupt_val == 0) interrupt_val = 1;
> 	break;
>      case 3: // config?
> 	break;
>      }
>      return val;
> }
> /* interface */
>
> static void busmouse_reset(void *opaque)
> {
>      mouse_t *s = opaque;
>
>      s->button = 0;
>      s->dx = s->dy = 0;
>      s->index = 0xf0;
> }
>
> static int busmouse_pre_load(void *opaque)
> {
>      busmouse_reset(opaque);
>      return 0;
> }
>
> static const VMStateDescription vmstate_mouse = {
>      .name = "logitech-busmouse",
>      .version_id = 1,
>      .minimum_version_id = 1,
>      .minimum_version_id_old = 1,
>      .pre_load = busmouse_pre_load,
>      .fields      = (VMStateField []) {
>          VMSTATE_UINT8(index, mouse_t),
>          VMSTATE_END_OF_LIST()
>      }
> };
>
> static int busmouse_init1(ISADevice *dev)
> {
>      mouse_isabus_t *isa = DO_UPCAST(mouse_isabus_t, busdev, dev);
>      mouse_t *s =&isa->state;
>      register_ioport_read(0x23c, 4, 1, busmouse_pio_read, s);
>      register_ioport_write(0x23c, 4, 1, busmouse_pio_write, s);
>
>      isa_init_irq(&isa->busdev,&s->irq, 3);
>      qemu_add_mouse_event_handler(mouse_event_handler, s, 0, "busmouse");
>
>      //vmstate_register(-1,&vmstate_mouse, s);
>      busmouse_reset(s);
>      qemu_register_reset(busmouse_reset, s);
>      return 0;
> }
>
> static ISADeviceInfo busmouse_info = {
>      .init = busmouse_init1,
>      .qdev.name  = "busmouse",
>      .qdev.size  = sizeof(mouse_isabus_t),
> };
>
> static void busmouse_register_devices(void)
> {
>      isa_qdev_register(&busmouse_info);
> }
>
> device_init(busmouse_register_devices)
> =========================
>
>
>    

      reply	other threads:[~2010-10-20 18:07 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-10-20 18:01 [Qemu-devel] Can't compile ISA device Brian Wheeler
2010-10-20 18:07 ` Anthony Liguori [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4CBF2FE6.1050709@codemonkey.ws \
    --to=anthony@codemonkey.ws \
    --cc=bdwheele@indiana.edu \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).