Message ID | 1287597687.2393.63.camel@nibbler.dlib.indiana.edu |
---|---|
State | New |
Headers | show |
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) > ========================= > > >
============================== 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