Lines Matching +full:wake +full:- +full:up

101 #define	BYTECLIP(x)	(char)((x) > 127 ? 127 : ((x) < -128 ? -128 : (x)))
252 * The framework will wake up qwait_sig when we return from
281 if (q->q_ptr != NULL) in msopen()
293 * Set up queue pointers, so that the "put" procedure will accept in msopen()
296 q->q_ptr = msd; in msopen()
297 WR(q)->q_ptr = msd; in msopen()
329 iocb = (struct iocblk *)mp->b_rptr; in msopen()
330 iocb->ioc_count = sizeof (struct termios); in msopen()
332 cb = (struct termios *)datap->b_wptr; in msopen()
333 cb->c_iflag = 0; in msopen()
334 cb->c_oflag = 0; in msopen()
335 cb->c_cflag = CREAD|CS8|B9600; in msopen()
336 cb->c_lflag = 0; in msopen()
337 bzero(cb->c_cc, NCCS); in msopen()
339 datap->b_wptr += sizeof (*cb); in msopen()
340 datap->b_datap->db_type = M_DATA; in msopen()
341 mp->b_cont = datap; in msopen()
343 msd->msd_flags |= MS_IOCWAIT; /* indicate that we're waiting for */ in msopen()
344 msd->msd_iocid = iocb->ioc_id; /* this response */ in msopen()
345 msd->msd_baud_rate = B9600; in msopen()
346 msd->msd_rcnt_baud_chng = 1; in msopen()
347 msd->msd_data_pkt_cnt = 0; in msopen()
348 msd->msd_qenable_more = 0; in msopen()
349 msd->msd_hold_baud_stup = MS_HOLD_BAUD_STUP; in msopen()
352 ms = &msd->msd_softc; in msopen()
354 * Now wait for it. Let our read queue put routine wake us up in msopen()
357 while (msd->msd_flags & MS_IOCWAIT) { in msopen()
363 if ((error = msd->msd_iocerror) != 0) in msopen()
367 * Set up private data. in msopen()
369 msd->msd_state = MS_WAIT_BUTN; in msopen()
370 msd->msd_readq = q; in msopen()
371 msd->msd_iocpending = NULL; in msopen()
376 if (ms->ms_buf == 0) { in msopen()
377 ms->ms_bufbytes = MS_BUF_BYTES; in msopen()
378 b = kmem_zalloc((uint_t)ms->ms_bufbytes, KM_SLEEP); in msopen()
379 b->mb_size = 1 + (ms->ms_bufbytes - sizeof (struct mousebuf)) in msopen()
381 ms->ms_buf = b; in msopen()
382 ms->ms_vuidaddr = VKEY_FIRST; in msopen()
387 msd->msd_flags = MS_OPEN; in msopen()
410 struct msdata *msd = (struct msdata *)q->q_ptr; in msclose()
424 msd->msd_flags = 0; in msclose()
426 if (msd->msd_jitter) { in msclose()
427 (void) quntimeout(q, msd->msd_timeout_id); in msclose()
428 msd->msd_jitter = 0; in msclose()
430 if (msd->msd_reioctl_id) { in msclose()
431 qunbufcall(q, msd->msd_reioctl_id); in msclose()
432 msd->msd_reioctl_id = 0; in msclose()
434 if (msd->msd_resched_id) { in msclose()
435 qunbufcall(q, msd->msd_resched_id); in msclose()
436 msd->msd_resched_id = 0; in msclose()
438 if (msd->msd_iocpending != NULL) { in msclose()
441 * availability of an "mblk" to hold data to be passed up; in msclose()
445 freemsg(msd->msd_iocpending); in msclose()
446 msd->msd_iocpending = NULL; in msclose()
448 ms = &msd->msd_softc; in msclose()
450 if (ms->ms_buf != NULL) in msclose()
451 kmem_free(ms->ms_buf, (uint_t)ms->ms_bufbytes); in msclose()
464 struct msdata *msd = (struct msdata *)q->q_ptr; in msrserv()
476 if (!(msd->msd_flags & MS_OPEN)) { in msrserv()
480 ms = &msd->msd_softc; in msrserv()
481 b = ms->ms_buf; in msrserv()
482 if (msd->msd_rcnt_baud_chng && ms->ms_oldoff != b->mb_off) { in msrserv()
483 int no_pkt = b->mb_off - ms->ms_oldoff; in msrserv()
485 no_pkt = no_pkt > 0 ? no_pkt : (b->mb_size - no_pkt); in msrserv()
486 if (no_pkt < msd->msd_hold_baud_stup) { in msrserv()
487 msd->msd_qenable_more = 1; in msrserv()
493 for (i = 0; i < msd->msd_hold_baud_stup; i++) { in msrserv()
494 ms->ms_oldoff++; /* next event */ in msrserv()
496 if (ms->ms_oldoff >= b->mb_size) in msrserv()
497 ms->ms_oldoff = 0; in msrserv()
499 msd->msd_rcnt_baud_chng = 0; in msrserv()
500 msd->msd_data_pkt_cnt = 0; in msrserv()
501 msd->msd_qenable_more = 0; in msrserv()
504 while (canputnext(q) && ms->ms_oldoff != b->mb_off) { in msrserv()
505 mi = &b->mb_info[ms->ms_oldoff]; in msrserv()
506 switch (ms->ms_readformat) { in msrserv()
512 cp = (char *)bp->b_wptr; in msrserv()
514 *cp++ = 0x80 | mi->mi_buttons; in msrserv()
516 ms->ms_prevbuttons = mi->mi_buttons; in msrserv()
518 *cp++ = mi->mi_x; in msrserv()
519 *cp++ = -mi->mi_y; in msrserv()
521 bp->b_wptr = (uchar_t *)cp; in msrserv()
524 if (msd->msd_resched_id) in msrserv()
525 qunbufcall(q, msd->msd_resched_id); in msrserv()
526 msd->msd_resched_id = qbufcall(q, 3, BPRI_HI, in msrserv()
528 if (msd->msd_resched_id == 0) in msrserv()
533 ms->ms_oldoff++; /* next event */ in msrserv()
536 if (ms->ms_oldoff >= b->mb_size) in msrserv()
537 ms->ms_oldoff = 0; in msrserv()
545 switch (ms->ms_eventstate) { in msrserv()
551 button_number = ms->ms_eventstate - EVENT_BUT1; in msrserv()
553 if ((ms->ms_prevbuttons & hwbit) != in msrserv()
554 (mi->mi_buttons & hwbit)) { in msrserv()
557 fep = (Firm_event *)bp->b_wptr; in msrserv()
558 fep->id = vuid_id_addr(ms->ms_vuidaddr) | in msrserv()
560 fep->pair_type = FE_PAIR_NONE; in msrserv()
561 fep->pair = 0; in msrserv()
563 if (mi->mi_buttons & hwbit) { in msrserv()
564 fep->value = 0; in msrserv()
565 ms->ms_prevbuttons |= hwbit; in msrserv()
567 fep->value = 1; in msrserv()
568 ms->ms_prevbuttons &= ~hwbit; in msrserv()
570 fep->time = mi->mi_time; in msrserv()
573 if (msd->msd_resched_id) in msrserv()
574 qunbufcall(q, msd->msd_resched_id); in msrserv()
575 msd->msd_resched_id = qbufcall(q, in msrserv()
578 if (msd->msd_resched_id == 0) in msrserv()
582 ms->ms_eventstate = EVENT_X; in msrserv()
589 if (mi->mi_y != 0) { in msrserv()
593 fep = (Firm_event *)bp->b_wptr; in msrserv()
594 fep->id = vuid_id_addr(ms->ms_vuidaddr) | in msrserv()
596 fep->pair_type = FE_PAIR_ABSOLUTE; in msrserv()
597 fep->pair = (uchar_t)LOC_Y_ABSOLUTE; in msrserv()
598 fep->value = -mi->mi_y; in msrserv()
599 fep->time = mi->mi_time; in msrserv()
601 if (msd->msd_resched_id) in msrserv()
602 qunbufcall(q, msd->msd_resched_id); in msrserv()
603 msd->msd_resched_id = qbufcall(q, in msrserv()
606 if (msd->msd_resched_id == 0) in msrserv()
610 ms->ms_eventstate = EVENT_X; in msrserv()
617 if (mi->mi_x != 0) { in msrserv()
620 fep = (Firm_event *)bp->b_wptr; in msrserv()
621 fep->id = vuid_id_addr(ms->ms_vuidaddr) | in msrserv()
623 fep->pair_type = FE_PAIR_ABSOLUTE; in msrserv()
624 fep->pair = (uchar_t)LOC_X_ABSOLUTE; in msrserv()
625 fep->value = mi->mi_x; in msrserv()
626 fep->time = mi->mi_time; in msrserv()
628 if (msd->msd_resched_id) in msrserv()
629 qunbufcall(q, msd->msd_resched_id); in msrserv()
630 msd->msd_resched_id = qbufcall(q, in msrserv()
633 if (msd->msd_resched_id == 0) in msrserv()
637 ms->ms_eventstate = EVENT_X; in msrserv()
645 bp->b_wptr += sizeof (Firm_event); in msrserv()
648 if (ms->ms_eventstate == EVENT_X) { in msrserv()
649 ms->ms_eventstate = EVENT_BUT3; in msrserv()
650 ms->ms_oldoff++; /* next event */ in msrserv()
653 if (ms->ms_oldoff >= b->mb_size) in msrserv()
654 ms->ms_oldoff = 0; in msrserv()
656 ms->ms_eventstate--; in msrserv()
669 msd->msd_resched_id = 0; in msresched()
670 if ((q = msd->msd_readq) != 0) in msresched()
686 switch (mp->b_datap->db_type) { in mswput()
689 if (*mp->b_rptr & FLUSHW) in mswput()
691 if (*mp->b_rptr & FLUSHR) in mswput()
712 msd->msd_reioctl_id = 0; in msreioctl()
713 q = msd->msd_readq; in msreioctl()
714 if ((mp = msd->msd_iocpending) != NULL) { in msreioctl()
715 msd->msd_iocpending = NULL; /* not pending any more */ in msreioctl()
731 msd = (struct msdata *)q->q_ptr; in msioctl()
736 ms = &msd->msd_softc; in msioctl()
738 iocp = (struct iocblk *)mp->b_rptr; in msioctl()
741 printf("mswput(M_IOCTL,%x)\n", iocp->ioc_cmd); in msioctl()
743 switch (iocp->ioc_cmd) { in msioctl()
748 if (*(int *)mp->b_cont->b_rptr == ms->ms_readformat) in msioctl()
750 ms->ms_readformat = *(int *)mp->b_cont->b_rptr; in msioctl()
763 *(int *)datap->b_wptr = ms->ms_readformat; in msioctl()
764 datap->b_wptr += sizeof (int); in msioctl()
765 if (mp->b_cont != NULL) in msioctl()
766 freemsg(mp->b_cont); in msioctl()
767 mp->b_cont = datap; in msioctl()
768 iocp->ioc_count = sizeof (int); in msioctl()
776 addr_probe = (Vuid_addr_probe *)mp->b_cont->b_rptr; in msioctl()
777 if (addr_probe->base != VKEY_FIRST) { in msioctl()
781 if (iocp->ioc_cmd == VUIDSADDR) in msioctl()
782 ms->ms_vuidaddr = addr_probe->data.next; in msioctl()
784 addr_probe->data.current = ms->ms_vuidaddr; in msioctl()
795 err = ms_getparms((Ms_parms *)datap->b_wptr); in msioctl()
796 datap->b_wptr += sizeof (Ms_parms); in msioctl()
797 if (mp->b_cont != NULL) in msioctl()
798 freemsg(mp->b_cont); in msioctl()
799 mp->b_cont = datap; in msioctl()
800 iocp->ioc_count = sizeof (Ms_parms); in msioctl()
810 err = ms_setparms((Ms_parms *)mp->b_cont->b_rptr); in msioctl()
822 iocp->ioc_rval = 0; in msioctl()
823 iocp->ioc_error = 0; /* brain rot */ in msioctl()
824 mp->b_datap->db_type = M_IOCACK; in msioctl()
837 if (msd->msd_iocpending != NULL) in msioctl()
838 freemsg(msd->msd_iocpending); in msioctl()
839 msd->msd_iocpending = mp; in msioctl()
840 if (msd->msd_reioctl_id) in msioctl()
841 qunbufcall(q, msd->msd_reioctl_id); in msioctl()
842 msd->msd_reioctl_id = qbufcall(q, ioctlrespsize, BPRI_HI, in msioctl()
849 data->jitter_thresh = ms_jitter_thresh; in ms_getparms()
850 data->speed_law = ms_speedlaw; in ms_getparms()
851 data->speed_limit = ms_speedlimit; in ms_getparms()
858 ms_jitter_thresh = data->jitter_thresh; in ms_setparms()
859 ms_speedlaw = data->speed_law; in ms_setparms()
860 ms_speedlimit = data->speed_limit; in ms_setparms()
867 struct ms_softc *ms = &msd->msd_softc; in msflush()
870 ms->ms_oldoff = 0; in msflush()
871 ms->ms_eventstate = EVENT_BUT3; in msflush()
872 ms->ms_buf->mb_off = 0; in msflush()
873 ms->ms_prevbuttons = MS_HW_BUT1 | MS_HW_BUT2 | MS_HW_BUT3; in msflush()
874 msd->msd_oldbutt = ms->ms_prevbuttons; in msflush()
875 if ((q = msd->msd_readq) != NULL && q->q_next != NULL) in msflush()
886 struct msdata *msd = (struct msdata *)q->q_ptr; in msrput()
898 switch (mp->b_datap->db_type) { in msrput()
901 if (*mp->b_rptr & FLUSHW) in msrput()
903 if (*mp->b_rptr & FLUSHR) in msrput()
911 if (msd->msd_flags & MS_IOCTOSS) { in msrput()
916 if (msd->msd_rcnt_baud_chng && msd->msd_data_pkt_cnt == 0) { in msrput()
928 if (msd->msd_rcnt_baud_chng) { in msrput()
929 switch (msd->msd_baud_rate) { in msrput()
931 msd->msd_hold_baud_stup = MS_HOLD_BAUD_STUP/2; in msrput()
932 msd->msd_baud_rate = B4800; in msrput()
936 if (msd->msd_data_pkt_cnt <= MS_CNT_TOB1200) { in msrput()
937 msd->msd_hold_baud_stup = in msrput()
939 msd->msd_baud_rate = B1200; in msrput()
941 msd->msd_hold_baud_stup = in msrput()
943 msd->msd_baud_rate = B9600; in msrput()
949 msd->msd_hold_baud_stup = MS_HOLD_BAUD_STUP; in msrput()
950 msd->msd_baud_rate = B9600; in msrput()
954 msd->msd_hold_baud_stup = MS_HOLD_BAUD_STUP; in msrput()
955 msd->msd_baud_rate = B9600; in msrput()
970 iocb = (struct iocblk *)imp->b_rptr; in msrput()
971 iocb->ioc_count = sizeof (struct termios); in msrput()
973 cb = (struct termios *)datap->b_rptr; in msrput()
974 cb->c_iflag = 0; in msrput()
975 cb->c_oflag = 0; in msrput()
976 cb->c_cflag = CREAD|CS8|msd->msd_baud_rate; in msrput()
977 cb->c_lflag = 0; in msrput()
978 bzero(cb->c_cc, NCCS); in msrput()
980 datap->b_wptr += sizeof (*cb); in msrput()
981 datap->b_datap->db_type = M_DATA; in msrput()
982 imp->b_cont = datap; in msrput()
984 msd->msd_flags |= MS_IOCTOSS|MS_IOCWAIT; in msrput()
985 msd->msd_iocid = iocb->ioc_id; in msrput()
990 msd->msd_rcnt_baud_chng = 1; in msrput()
991 msd->msd_data_pkt_cnt = 0; in msrput()
993 printf("baud %x\n", msd->msd_baud_rate); in msrput()
1000 * is the reply to that code. If so, wake up the in msrput()
1002 * pass it up. in msrput()
1004 iocp = (struct iocblk *)mp->b_rptr; in msrput()
1005 if (!(msd->msd_flags & MS_IOCWAIT) || in msrput()
1006 iocp->ioc_id != msd->msd_iocid) { in msrput()
1012 msd->msd_flags &= ~MS_IOCWAIT; in msrput()
1013 msd->msd_iocerror = iocp->ioc_error; in msrput()
1018 if (msd->msd_flags & MS_IOCTOSS) { in msrput()
1019 msd->msd_flags &= ~MS_IOCTOSS; in msrput()
1028 if ((msd->msd_flags & MS_IOCTOSS) || in msrput()
1029 !(msd->msd_flags & MS_OPEN)) { in msrput()
1043 readp = (char *)bp->b_rptr; in msrput()
1044 while (readp < (char *)bp->b_wptr) { in msrput()
1045 if (msd->msd_rcnt_baud_chng) in msrput()
1046 msd->msd_data_pkt_cnt++; in msrput()
1049 bp->b_rptr = (unsigned char *)readp; in msrput()
1050 } while ((bp = bp->b_cont) != NULL); /* next block, if any */ in msrput()
1060 * The MSC mice send a five-byte packet organized as
1065 * Our strategy is to add up the 2 dx and the 2 dy in the five-byte
1066 * packet, then send the mouseinfo message up.
1085 ms = &msd->msd_softc; in msinput()
1086 b = ms->ms_buf; in msinput()
1090 mi = &b->mb_info[b->mb_off]; in msinput()
1092 switch (msd->msd_state) { in msinput()
1099 if (msd->msd_rcnt_baud_chng) { in msinput()
1101 flushq(msd->msd_readq, FLUSHALL); in msinput()
1102 msd->msd_hold_baud_stup++; in msinput()
1111 mi->mi_buttons = c & (MS_HW_BUT1 | MS_HW_BUT2 | MS_HW_BUT3); in msinput()
1119 temp = (int)(mi->mi_x + c); in msinput()
1120 mi->mi_x = BYTECLIP(temp); in msinput()
1121 uniqtime32(&mi->mi_time); /* record time when sample arrived */ in msinput()
1129 * increasing Y up the screen.) in msinput()
1131 temp = (int)(mi->mi_y - c); in msinput()
1132 mi->mi_y = BYTECLIP(temp); in msinput()
1139 temp = (int)(mi->mi_x + c); in msinput()
1140 mi->mi_x = BYTECLIP(temp); in msinput()
1141 uniqtime32(&mi->mi_time); in msinput()
1148 temp = (int)(mi->mi_y - c); in msinput()
1149 mi->mi_y = BYTECLIP(temp); in msinput()
1157 if (msd->msd_state == MS_WAIT_Y2) in msinput()
1158 msd->msd_state = MS_WAIT_BUTN; /* BONG. Start again. */ in msinput()
1160 msd->msd_state += 1; in msinput()
1164 if (msd->msd_jitter) { in msinput()
1165 (void) quntimeout(msd->msd_readq, msd->msd_timeout_id); in msinput()
1166 msd->msd_jitter = 0; in msinput()
1169 if (mi->mi_buttons == msd->msd_oldbutt) { in msinput()
1173 if (mi->mi_x == 0 && mi->mi_y == 0) { in msinput()
1174 /* no, position did not change - boring event */ in msinput()
1182 if (ABS((int)mi->mi_x) <= jitter_radius && in msinput()
1183 ABS((int)mi->mi_y) <= jitter_radius) { in msinput()
1190 msd->msd_jitter = 1; in msinput()
1191 msd->msd_timeout_id = qtimeout(msd->msd_readq, in msinput()
1196 msd->msd_oldbutt = mi->mi_buttons; in msinput()
1208 struct ms_softc *ms = &msd->msd_softc; in msincr()
1213 int wake; in msincr() local
1220 msd->msd_jitter = 0; in msincr()
1222 b = ms->ms_buf; in msincr()
1225 mi = &b->mb_info[b->mb_off]; in msincr()
1228 xabs = ABS((int)mi->mi_x); in msincr()
1229 yabs = ABS((int)mi->mi_y); in msincr()
1233 mi->mi_x = 0; in msincr()
1235 mi->mi_y = 0; in msincr()
1238 oldbutt = mi->mi_buttons; in msincr()
1242 /* See if we need to wake up anyone waiting for input */ in msincr()
1243 wake = b->mb_off == ms->ms_oldoff; in msincr()
1246 if (++b->mb_off >= b->mb_size) { in msincr()
1247 b->mb_off = 0; in msincr()
1248 mi = b->mb_info; in msincr()
1254 * If over-took read index then flush buffer so that mouse state in msincr()
1257 if (b->mb_off == ms->ms_oldoff) { in msincr()
1263 mi = b->mb_info; in msincr()
1267 mi->mi_buttons = oldbutt; in msincr()
1268 mi->mi_x = (char)xc; in msincr()
1269 mi->mi_y = (char)yc; in msincr()
1270 if (wake || msd->msd_qenable_more) in msincr()
1271 qenable(msd->msd_readq); /* run the service procedure */ in msincr()