Home | History | Annotate | Download | only in dev

Lines Matching refs:ms

1 /*	$NetBSD: ms.c,v 1.42 2024/05/24 20:06:55 andvar Exp $ */
40 * @(#)ms.c 8.1 (Berkeley) 6/11/93
48 __KERNEL_RCSID(0, "$NetBSD: ms.c,v 1.42 2024/05/24 20:06:55 andvar Exp $");
154 CFATTACH_DECL_NEW(ms, sizeof(struct ms_softc),
215 struct ms_softc *ms = device_private(self);
220 ms->ms_dev = self;
221 callout_init(&ms->ms_modem_ch, 0);
222 mutex_init(&ms->ms_lock, MUTEX_DEFAULT, IPL_SERIAL);
225 cs->cs_private = ms;
227 ms->ms_cs = cs;
240 ms->ms_ready = 0;
253 struct ms_softc *ms;
255 ms = device_lookup_private(&ms_cd, minor(dev));
256 if (ms == NULL)
260 if (ms->ms_events.ev_io)
262 ms->ms_events.ev_io = l->l_proc;
263 ev_init(&ms->ms_events, device_xname(ms->ms_dev), &ms->ms_lock);
265 ms->ms_ready = 1; /* start accepting events */
266 ms->ms_rts = 1;
267 ms->ms_byteno = -1;
268 ms->ms_nodata = 0;
271 callout_reset(&ms->ms_modem_ch, MS_TICK, ms_modem, ms);
279 struct ms_softc *ms;
281 ms = device_lookup_private(&ms_cd, minor(dev));
282 ms->ms_ready = 0; /* stop accepting events */
283 callout_stop(&ms->ms_modem_ch);
284 ev_fini(&ms->ms_events);
286 ms->ms_events.ev_io = NULL;
293 struct ms_softc *ms;
295 ms = device_lookup_private(&ms_cd, minor(dev));
296 return ev_read(&ms->ms_events, uio, flags);
302 struct ms_softc *ms;
304 ms = device_lookup_private(&ms_cd, minor(dev));
312 ms->ms_events.ev_async = *(int *)data != 0;
316 if (-*(int *)data != ms->ms_events.ev_io->p_pgid
317 && *(int *)data != ms->ms_events.ev_io->p_pid)
322 if (*(int *)data != ms->ms_events.ev_io->p_pgid)
342 struct ms_softc *ms;
344 ms = device_lookup_private(&ms_cd, minor(dev));
345 return ev_poll(&ms->ms_events, events, l);
351 struct ms_softc *ms;
353 ms = device_lookup_private(&ms_cd, minor(dev));
354 return ev_kqfilter(&ms->ms_events, kn);
365 ms_input(struct ms_softc *ms, int c)
376 if (ms->ms_ready == 0)
379 ms->ms_nodata = 0;
385 switch (ms->ms_byteno) {
392 ms->ms_byteno = 1;
393 ms->ms_mb = c & 0x3;
398 ms->ms_byteno = 2;
399 ms->ms_dx += (char)c;
404 ms->ms_byteno = -1;
405 ms->ms_dy += (char)c;
421 get = ms->ms_events.ev_get;
422 put = ms->ms_events.ev_put;
423 fe = &ms->ms_events.ev_q[put];
436 fe = &ms->ms_events.ev_q[0]; \
439 mb = ms->ms_mb;
440 ub = ms->ms_ub;
455 if (ms->ms_dx) {
458 fe->value = ms->ms_dx;
461 ms->ms_dx = 0;
464 if (ms->ms_dy) {
476 fe->value = -ms->ms_dy;
479 ms->ms_dy = 0;
484 ms->ms_ub = ub;
485 ms->ms_events.ev_put = put;
486 ev_wakeup(&ms->ms_events);
497 struct ms_softc *ms;
501 ms = cs->cs_private;
502 put = ms->ms_rbput;
516 ms->ms_rbuf[put] = (c << 8) | rr1;
520 if (put_next == ms->ms_rbget) {
521 ms->ms_intr_flags |= INTR_RX_OVERRUN;
528 ms->ms_rbput = put;
538 struct ms_softc *ms;
540 ms = cs->cs_private;
542 ms->ms_intr_flags |= INTR_TX_EMPTY;
551 struct ms_softc *ms;
554 ms = cs->cs_private;
568 ms->ms_intr_flags |= INTR_ST_CHECK;
578 struct ms_softc *ms;
583 ms = cs->cs_private;
585 mutex_enter(&ms->ms_lock);
586 intr_flags = ms->ms_intr_flags;
587 ms->ms_intr_flags = 0;
592 get = ms->ms_rbget;
593 while (get != ms->ms_rbput) {
594 ring_data = ms->ms_rbuf[get];
595 mutex_exit(&ms->ms_lock);
605 device_xname(ms->ms_dev), ring_data);
610 ms_input(ms, c);
611 mutex_enter(&ms->ms_lock);
613 mutex_exit(&ms->ms_lock);
617 device_xname(ms->ms_dev));
619 ms->ms_rbget = get;
626 device_xname(ms->ms_dev));
634 device_xname(ms->ms_dev));
635 mutex_enter(&ms->ms_lock);
637 mutex_exit(&ms->ms_lock);
664 struct ms_softc *ms = arg;
666 if (!ms->ms_ready)
669 mutex_enter(&ms->ms_lock);
671 if (ms->ms_nodata++ > MS_TIMEOUT) {
673 device_xname(ms->ms_dev), MS_TIMEOUT_SEC);
674 ms->ms_byteno = -1;
675 ms->ms_nodata = 0;
676 ms->ms_rts = 0;
679 if (ms->ms_rts) {
680 if (ms->ms_byteno == -1) {
682 ms->ms_rts = 0;
683 ms_trigger(ms->ms_cs, ms->ms_rts);
684 ms->ms_byteno = 0;
687 ms->ms_rts = 1;
688 ms_trigger(ms->ms_cs, ms->ms_rts);
691 ms->ms_lock);
692 callout_schedule(&ms->ms_modem_ch, MS_TICK);