--- sys/dev/syscons/sysmouse.c 2009-05-30 08:19:51.000000000 +0200 +++ sys/dev/syscons/sysmouse.c 2009-06-13 15:15:04.000000000 +0200 @@ -118,12 +118,14 @@ return 0; case MOUSE_GETSTATUS: /* get accumulated mouse events */ + tty_lock(sysmouse_tty); *(mousestatus_t *)data = mouse_status; mouse_status.flags = 0; mouse_status.obutton = mouse_status.button; mouse_status.dx = 0; mouse_status.dy = 0; mouse_status.dz = 0; + tty_unlock(sysmouse_tty); return 0; #ifdef notyet @@ -174,7 +176,7 @@ sysmouse_event(mouse_info_t *info) { /* MOUSE_BUTTON?DOWN -> MOUSE_MSC_BUTTON?UP */ - static int butmap[8] = { + static const int butmap[8] = { MOUSE_MSC_BUTTON1UP | MOUSE_MSC_BUTTON2UP | MOUSE_MSC_BUTTON3UP, MOUSE_MSC_BUTTON2UP | MOUSE_MSC_BUTTON3UP, MOUSE_MSC_BUTTON1UP | MOUSE_MSC_BUTTON3UP, @@ -184,9 +186,9 @@ MOUSE_MSC_BUTTON1UP, 0, }; - u_char buf[8]; + uint8_t buf[8]; int x, y, z; - int i, flags = 0; + int flags = 0; tty_lock(sysmouse_tty); @@ -214,9 +216,10 @@ mouse_status.dy += y; mouse_status.dz += z; mouse_status.flags |= ((x || y || z) ? MOUSE_POSCHANGED : 0) - | (mouse_status.obutton ^ mouse_status.button); + | (mouse_status.obutton ^ mouse_status.button); flags = mouse_status.flags; - if (flags == 0 || !tty_opened(sysmouse_tty)) + if (flags == 0 || !tty_opened(sysmouse_tty) || + !ttydisc_can_bypass(sysmouse_tty)) goto done; /* the first five bytes are compatible with MouseSystems' */ @@ -228,17 +231,16 @@ y = -imax(imin(y, 255), -256); buf[2] = y >> 1; buf[4] = y - buf[2]; - for (i = 0; i < MOUSE_MSC_PACKETSIZE; ++i) - ttydisc_rint(sysmouse_tty, buf[i], 0); - if (mouse_level >= 1) { + if (mouse_level == 1) { /* extended part */ z = imax(imin(z, 127), -128); buf[5] = (z >> 1) & 0x7f; buf[6] = (z - (z >> 1)) & 0x7f; /* buttons 4-10 */ buf[7] = (~mouse_status.button >> 3) & 0x7f; - for (i = MOUSE_MSC_PACKETSIZE; i < MOUSE_SYS_PACKETSIZE; ++i) - ttydisc_rint(sysmouse_tty, buf[i], 0); + ttydisc_rint_bypass(sysmouse_tty, buf, MOUSE_SYS_PACKETSIZE); + } else { + ttydisc_rint_bypass(sysmouse_tty, buf, MOUSE_MSC_PACKETSIZE); } ttydisc_rint_done(sysmouse_tty);