static void vmmouse_mouse_event(void *opaque, int x, int y, int dz, int buttons_state) { VMMouseState *s = (VMMouseState *)opaque; int buttons = 0; if (s->nb_queue > (VMMOUSE_QUEUE_SIZE - 4)) return; DPRINTF("vmmouse_mouse_event(%d, %d, %d, %d)\n", x, y, dz, buttons_state); if ((buttons_state & MOUSE_EVENT_LBUTTON)) buttons |= 0x20; if ((buttons_state & MOUSE_EVENT_RBUTTON)) buttons |= 0x10; if ((buttons_state & MOUSE_EVENT_MBUTTON)) buttons |= 0x08; if (s->absolute) { x <<= 1; y <<= 1; } s->queue[s->nb_queue++] = buttons; s->queue[s->nb_queue++] = x; s->queue[s->nb_queue++] = y; s->queue[s->nb_queue++] = dz; /* need to still generate PS2 events to notify driver to read from queue */ ps2_mouse_fake_event(s->ps2_mouse); }
void i8042_isa_mouse_fake_event(void *opaque) { ISADevice *dev = opaque; ISAKBDState *isa = I8042(dev); KBDState *s = &isa->kbd; ps2_mouse_fake_event(s->mouse); }