Lines Matching defs:ms
1 /* $NetBSD: ms.c,v 1.28 2022/06/26 06:25:09 tsutsui Exp $ */
45 * @(#)ms.c 8.1 (Berkeley) 6/11/93
47 * Header: ms.c,v 1.5 92/11/26 01:28:47 torek Exp (LBL)
55 __KERNEL_RCSID(0, "$NetBSD: ms.c,v 1.28 2022/06/26 06:25:09 tsutsui Exp $");
122 ms_3b_delay(struct ms_softc *ms)
136 struct ms_softc *ms = &ms_softc[0];
144 if (ms->ms_events.ev_io == NULL)
152 if (ms->ms_emul3b)
164 (ms->ms_buttons & 0x03);
174 fake_mouse.id = ms->ms_buttons;
184 rel_ms->id = (ms->ms_buttons & 0x04) | (rel_ms->id & 0x03);
185 flush_buttons = ms->ms_emul3b ? 0 : 1;
192 get = ms->ms_events.ev_get;
193 put = ms->ms_events.ev_put;
194 fe = &ms->ms_events.ev_q[put];
196 if ((type != KBD_TIMEO_PKG) && ms->ms_emul3b && ms->ms_bq_idx != 0)
197 callout_stop(&ms->ms_delay_ch);
202 if ((mbut = (rel_ms->id ^ ms->ms_buttons)) == 0 && (put != get)) {
207 ms->ms_dx += rel_ms->dx;
208 ms->ms_dy += rel_ms->dy;
211 rel_ms->dx += ms->ms_dx;
212 rel_ms->dy += ms->ms_dy;
213 ms->ms_dx = ms->ms_dy = 0;
229 fe = &ms->ms_events.ev_q[0];
244 fe = &ms->ms_events.ev_q[0];
253 fe2 = &ms->ms_bq[ms->ms_bq_idx++];
269 if (ms->ms_emul3b && ms->ms_bq_idx != 0 && (type != KBD_TIMEO_PKG)) {
274 if ((ms->ms_buttons & 0x04) != 0 && (mbut & 0x03) != 0) {
275 ms->ms_bq[0].id = MS_MIDDLE;
276 ms->ms_bq_idx = 1;
281 if (ms->ms_bq_idx == 2) {
282 if (ms->ms_bq[0].value == ms->ms_bq[1].value) {
284 ms->ms_bq[0].id = MS_MIDDLE;
285 ms->ms_bq_idx = 1;
289 else if (ms->ms_bq[0].value == VKEY_DOWN) {
290 callout_reset(&ms->ms_delay_ch, 10,
291 (FPV)ms_3b_delay, (void *)ms);
300 for (i = 0; i < ms->ms_bq_idx; i++) {
302 ms->ms_bq_idx = 0;
306 *fe = ms->ms_bq[i];
309 fe = &ms->ms_events.ev_q[0];
314 ms->ms_bq_idx = 0;
316 ms->ms_events.ev_put = put;
317 ms->ms_buttons = rel_ms->id;
319 EV_WAKEUP(&ms->ms_events);
326 struct ms_softc *ms;
330 ms = &ms_softc[unit];
335 if (ms->ms_events.ev_io)
338 ms->ms_events.ev_io = l->l_proc;
339 ms->ms_dx = ms->ms_dy = 0;
340 ms->ms_buttons = 0;
341 ms->ms_bq[0].id = ms->ms_bq[1].id = 0;
342 ms->ms_bq_idx = 0;
343 ev_init(&ms->ms_events); /* may cause sleep */
357 struct ms_softc *ms;
360 ms = &ms_softc[unit];
366 ev_fini(&ms->ms_events);
367 ms->ms_events.ev_io = NULL;
374 struct ms_softc *ms;
376 ms = &ms_softc[minor(dev)];
377 return ev_read(&ms->ms_events, uio, flags);
383 struct ms_softc *ms;
387 ms = &ms_softc[unit];
391 ms->ms_emul3b = (*(int *)data != 0) ? 1 : 0;
394 *(int *)data = ms->ms_emul3b;
399 ms->ms_events.ev_async = *(int *)data != 0;
402 if (-*(int *)data != ms->ms_events.ev_io->p_pgid &&
403 *(int *)data != ms->ms_events.ev_io->p_pid)
407 if (*(int *)data != ms->ms_events.ev_io->p_pgid)
424 struct ms_softc *ms;
426 ms = &ms_softc[minor(dev)];
427 return ev_poll(&ms->ms_events, events, l);
433 struct ms_softc *ms;
435 ms = &ms_softc[minor(dev)];
436 return ev_kqfilter(&ms->ms_events, kn);