Lines Matching +full:long +full:- +full:press +full:- +full:mode

2  * /src/NTP/ntp4-dev/libparse/parsesolaris.c,v 4.11 2005/04/16 17:32:10 kardel RELEASE_20050508_A
8 * Copyright (c) 1995-2005 by Frank Kardel <kardel <AT> ntp.org>
9 …* Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universitaet Erlangen-Nuernberg, Ge…
55 #ifdef __GNUC__ /* makes it compile on Solaris 2.6 - acc doesn't like it -- GREAT! */
63 /*--------------- loadable driver section -----------------------------*/
80 "PARSE - NTP reference", /* name this baby - keep room for revision number */
120 * if present. - not necessary on a -kv co (cvs export) in _init()
144 if (strlen(t) >= (S - s)) in _init()
146 strlcpy(t, s, (unsigned)(S - s)); in _init()
175 /*--------------- stream module definition ----------------------------*/
186 fmod_templ.f_name, /* module name - why repeated here ? compat ?*/
189 1, /* high water mark - flow control */
190 0 /* low water mark - flow control */
199 NULL, /* admin procedure - NOT USED FOR NOW */
210 NULL, /* admin procedure - NOT USED FOR NOW */
223 /*--------------- driver data structures ----------------------------*/
226 * we usually have an inverted signal - but you
229 int cd_invert = 1; /* invert status of CD line - PPS support via CD input */
237 /*--------------- module implementation -----------------------------*/
240 (_X_)->tv_usec += (_US_);\
241 if ((_X_)->tv_usec >= 1000000)\
243 (_X_)->tv_sec++;\
244 (_X_)->tv_usec -= 1000000;\
261 while (c-- > 0) in ntp_memset()
285 int mode in setup_stream() argument
290 pprintf(DD_OPEN,"parse: SETUP_STREAM - setting up stream for q=%x\n", q); in setup_stream()
295 struct stroptions *str = (void *)mp->b_wptr; in setup_stream()
297 str->so_flags = SO_READOPT|SO_HIWAT|SO_LOWAT|SO_ISNTTY; in setup_stream()
298 str->so_readopt = (mode == M_PARSE) ? RMSGD : RNORM; in setup_stream()
299 str->so_hiwat = (mode == M_PARSE) ? sizeof(parsetime_t) : 256; in setup_stream()
300 str->so_lowat = 0; in setup_stream()
301 mp->b_datap->db_type = M_SETOPTS; in setup_stream()
302 mp->b_wptr += sizeof(struct stroptions); in setup_stream()
304 panic("NULL q - strange"); in setup_stream()
306 return putctl1(WR(q)->q_next, M_CTL, (mode == M_PARSE) ? MC_SERVICEIMM : in setup_stream()
311 pprintf(DD_OPEN, "parse: setup_stream - FAILED - no MEMORY for allocb\n"); in setup_stream()
329 pprintf(DD_OPEN, "parse: OPEN - q=%x\n", q); in parseopen()
333 pprintf(DD_OPEN, "parse: OPEN - FAILED - not MODOPEN\n"); in parseopen()
337 if (q->q_ptr != (caddr_t)NULL) in parseopen()
339 pprintf(DD_OPEN, "parse: OPEN - FAILED - EXCLUSIVE ONLY\n"); in parseopen()
343 q->q_ptr = (caddr_t)kmem_alloc(sizeof(parsestream_t), KM_SLEEP); in parseopen()
344 if (q->q_ptr == (caddr_t)0) in parseopen()
349 pprintf(DD_OPEN, "parse: OPEN - parse area q=%x, q->q_ptr=%x\n", q, q->q_ptr); in parseopen()
350 WR(q)->q_ptr = q->q_ptr; in parseopen()
351 pprintf(DD_OPEN, "parse: OPEN - WQ parse area q=%x, q->q_ptr=%x\n", WR(q), WR(q)->q_ptr); in parseopen()
353 parse = (parsestream_t *) q->q_ptr; in parseopen()
355 parse->parse_queue = q; in parseopen()
356 parse->parse_status = PARSE_ENABLE; in parseopen()
357 parse->parse_ppsclockev.tv.tv_sec = 0; in parseopen()
358 parse->parse_ppsclockev.tv.tv_usec = 0; in parseopen()
359 parse->parse_ppsclockev.serial = 0; in parseopen()
363 pprintf(DD_OPEN, "parse: OPEN - initializing io subsystem q=%x\n", q); in parseopen()
365 if (!parse_ioinit(&parse->parse_io)) in parseopen()
368 * ok guys - beat it in parseopen()
377 pprintf(DD_OPEN, "parse: OPEN - initializing stream q=%x\n", q); in parseopen()
382 pprintf(DD_OPEN, "parse: OPEN - SUCCEEDED\n"); in parseopen()
386 * code, did you ? - So, keep the message in here. in parseopen()
390 cmn_err(CE_CONT, "?%s: Copyright (c) 1993-2005, Frank Kardel\n", modlstrmod.strmod_linkinfo); in parseopen()
413 register parsestream_t *parse = (parsestream_t *)q->q_ptr; in parseclose()
414 register unsigned long s; in parseclose()
422 if (parse->parse_dqueue) in parseclose()
423 close_linemon(parse->parse_dqueue, q); in parseclose()
424 parse->parse_dqueue = (queue_t *)0; in parseclose()
428 parse_ioend(&parse->parse_io); in parseclose()
432 q->q_ptr = (caddr_t)NULL; in parseclose()
433 WR(q)->q_ptr = (caddr_t)NULL; in parseclose()
450 if (canputnext(q) || (mp->b_datap->db_type > QPCTL)) in parsersvc()
453 pprintf(DD_RSVC, "parse: RSVC - putnext\n"); in parsersvc()
458 pprintf(DD_RSVC, "parse: RSVC - flow control wait\n"); in parsersvc()
467 * send stuff down - dont care about
479 parsestream_t *parse = (parsestream_t *)q->q_ptr; in parsewput()
483 switch (mp->b_datap->db_type) in parsewput()
490 iocp = (void *)mp->b_rptr; in parsewput()
491 switch (iocp->ioc_cmd) in parsewput()
494 pprintf(DD_WPUT, "parse: parsewput - forward M_IOCTL\n"); in parsewput()
503 if (datap == NULL || mp->b_cont) in parsewput()
505 mp->b_datap->db_type = M_IOCNAK; in parsewput()
506 iocp->ioc_error = (datap == NULL) ? ENOMEM : EINVAL; in parsewput()
513 mp->b_cont = datap; in parsewput()
515 *(struct ppsclockev *)(void *)datap->b_wptr = parse->parse_ppsclockev; in parsewput()
516 datap->b_wptr += in parsewput()
517 sizeof(struct ppsclockev) / sizeof(*datap->b_wptr); in parsewput()
518 mp->b_datap->db_type = M_IOCACK; in parsewput()
519 iocp->ioc_count = sizeof(struct ppsclockev); in parsewput()
526 parse->parse_status = (parse->parse_status & (unsigned)~PARSE_ENABLE) | in parsewput()
527 (iocp->ioc_cmd == PARSEIOC_ENABLE) ? in parsewput()
529 if (!setup_stream(RD(q), (parse->parse_status & PARSE_ENABLE) ? in parsewput()
532 mp->b_datap->db_type = M_IOCNAK; in parsewput()
536 mp->b_datap->db_type = M_IOCACK; in parsewput()
546 if (iocp->ioc_count == sizeof(parsectl_t)) in parsewput()
548 parsectl_t *dct = (void *)mp->b_cont->b_rptr; in parsewput()
550 switch (iocp->ioc_cmd) in parsewput()
553 pprintf(DD_WPUT, "parse: parsewput - PARSEIOC_TIMECODE\n"); in parsewput()
554 ok = parse_timecode(dct, &parse->parse_io); in parsewput()
558 pprintf(DD_WPUT, "parse: parsewput - PARSEIOC_SETFMT\n"); in parsewput()
559 ok = parse_setfmt(dct, &parse->parse_io); in parsewput()
563 pprintf(DD_WPUT, "parse: parsewput - PARSEIOC_GETFMT\n"); in parsewput()
564 ok = parse_getfmt(dct, &parse->parse_io); in parsewput()
568 pprintf(DD_WPUT, "parse: parsewput - PARSEIOC_SETCS\n"); in parsewput()
569 ok = parse_setcs(dct, &parse->parse_io); in parsewput()
572 mp->b_datap->db_type = ok ? M_IOCACK : M_IOCNAK; in parsewput()
576 mp->b_datap->db_type = M_IOCNAK; in parsewput()
578 …pprintf(DD_WPUT, "parse: parsewput qreply - %s\n", (mp->b_datap->db_type == M_IOCNAK) ? "M_IOCNAK"… in parsewput()
589 static unsigned long
596 if ((*mp)->b_wptr - (*mp)->b_rptr) in rdchar()
598 return (unsigned long)(*(unsigned char *)((*mp)->b_rptr++)); in rdchar()
604 *mp = (*mp)->b_cont; in rdchar()
608 return (unsigned long)~0; in rdchar()
623 switch (type = mp->b_datap->db_type) in parserput()
630 pprintf(DD_RPUT, "parse: parserput - forward type 0x%x\n", type); in parserput()
632 if (canputnext(q) || (mp->b_datap->db_type > QPCTL)) in parserput()
643 register parsestream_t * parse = (parsestream_t *)q->q_ptr; in parserput()
645 register unsigned long ch; in parserput()
656 if (!(parse->parse_status & PARSE_ENABLE)) in parserput()
658 pprintf(DD_RPUT, "parse: parserput - parser disabled - forward type 0x%x\n", type); in parserput()
659 if (canputnext(q) || (mp->b_datap->db_type > QPCTL)) in parserput()
668 pprintf(DD_RPUT, "parse: parserput - M_%s\n", (type == M_DATA) ? "DATA" : "BREAK"); in parserput()
677 if (ch != ~0 && parse_ioread(&parse->parse_io, (unsigned int)ch, &c_time)) in parserput()
681 * don't press it if resources are tight or nobody wants it in parserput()
684 if (canputnext(parse->parse_queue) && (nmp = allocb(sizeof(parsetime_t), BPRI_MED))) in parserput()
686 bcopy((caddr_t)&parse->parse_io.parse_dtime, (caddr_t)nmp->b_rptr, sizeof(parsetime_t)); in parserput()
687 nmp->b_wptr += sizeof(parsetime_t); in parserput()
688 putnext(parse->parse_queue, nmp); in parserput()
692 parse_iodone(&parse->parse_io); in parserput()
698 if (parse_ioread(&parse->parse_io, (unsigned int)0, &c_time)) in parserput()
702 * don't press it if resources are tight or nobody wants it in parserput()
705 if (canputnext(parse->parse_queue) && (nmp = allocb(sizeof(parsetime_t), BPRI_MED))) in parserput()
707 bcopy((caddr_t)&parse->parse_io.parse_dtime, (caddr_t)nmp->b_rptr, sizeof(parsetime_t)); in parserput()
708 nmp->b_wptr += sizeof(parsetime_t); in parserput()
709 putnext(parse->parse_queue, nmp); in parserput()
713 parse_iodone(&parse->parse_io); in parserput()
727 register parsestream_t * parse = (parsestream_t *)q->q_ptr; in parserput()
737 pprintf(DD_RPUT, "parse: parserput - M_%sHANGUP\n", (type == M_HANGUP) ? "" : "UN"); in parserput()
739 if ((parse->parse_status & PARSE_ENABLE) && in parserput()
740 parse_iopps(&parse->parse_io, status ? SYNC_ONE : SYNC_ZERO, &c_time)) in parserput()
743 if (canputnext(parse->parse_queue) && (nmp = allocb(sizeof(parsetime_t), BPRI_MED))) in parserput()
745 bcopy((caddr_t)&parse->parse_io.parse_dtime, (caddr_t)nmp->b_rptr, sizeof(parsetime_t)); in parserput()
746 nmp->b_wptr += sizeof(parsetime_t); in parserput()
747 putnext(parse->parse_queue, nmp); in parserput()
751 parse_iodone(&parse->parse_io); in parserput()
755 if (canputnext(q) || (mp->b_datap->db_type > QPCTL)) in parserput()
764 parse->parse_ppsclockev.tv = c_time.tv; in parserput()
765 ++(parse->parse_ppsclockev.serial); in parserput()
775 /*-------------------- CD isr status monitor ---------------*/
793 while (dq->q_next) in init_linemon()
795 dq = dq->q_next; /* skip down to driver */ in init_linemon()
801 if (dq->q_qinfo && dq->q_qinfo->qi_minfo) in init_linemon()
803 register char *dname = dq->q_qinfo->qi_minfo->mi_idname; in init_linemon()
832 if (q->q_qinfo && q->q_qinfo->qi_minfo) in close_linemon()
834 register char *dname = q->q_qinfo->qi_minfo->mi_idname; in close_linemon()
878 register parsestream_t *parsestream = (parsestream_t *)my_q->q_ptr; in init_zs_linemon()
884 zs = ((struct asyncline *)q->q_ptr)->za_common; in init_zs_linemon()
888 * well - not found on startup - just say no (shouldn't happen though) in init_zs_linemon()
897 * we are in DEEP trouble - panic is likely to be next, sorry in init_zs_linemon()
903 pprintf(DD_INSTALL, "init_zs_linemon: CD monitor NOT installed - no memory\n"); in init_zs_linemon()
909 parsestream->parse_data = (void *)szs; in init_zs_linemon()
911 mutex_enter(zs->zs_excl); in init_zs_linemon()
913 parsestream->parse_dqueue = q; /* remember driver */ in init_zs_linemon()
915 szs->zsops = *zs->zs_ops; in init_zs_linemon()
916 szs->zsops.zsop_xsint = (void (*) (struct zscom *))zs_xsisr; /* place our bastard */ in init_zs_linemon()
917 szs->oldzsops = zs->zs_ops; in init_zs_linemon()
918 emergencyzs = zs->zs_ops; in init_zs_linemon()
920 zs->zs_ops = &szs->zsops; /* hook it up */ in init_zs_linemon()
923 * - have yet to find a way to call that routine in init_zs_linemon()
925 zs->zs_xsint = (void (*) (struct zscom *))zs_xsisr; in init_zs_linemon()
927 mutex_exit(zs->zs_excl); in init_zs_linemon()
937 * unregister our ISR routine - must call under splhigh() (or
947 register parsestream_t *parsestream = (parsestream_t *)my_q->q_ptr; in close_zs_linemon()
949 zs = ((struct asyncline *)q->q_ptr)->za_common; in close_zs_linemon()
953 * well - not found on startup - just say no (shouldn't happen though) in close_zs_linemon()
959 register struct savedzsops *szs = (struct savedzsops *)parsestream->parse_data; in close_zs_linemon()
961 mutex_enter(zs->zs_excl); in close_zs_linemon()
963 zs->zs_ops = szs->oldzsops; /* reset to previous handler functions */ in close_zs_linemon()
965 * XXX: revert xsint (usually done via zsopinit() - have still to find in close_zs_linemon()
968 zs->zs_xsint = zs->zs_ops->zsop_xsint; in close_zs_linemon()
970 mutex_exit(zs->zs_excl); in close_zs_linemon()
991 register struct asyncline *za = (void *)zs->zs_priv; in zs_xsisr()
996 register const char *dname = "-UNKNOWN-"; in zs_xsisr()
1004 if (za->za_rr0 ^ (cdstate = zsstatus & ZSRR0_CD)) in zs_xsisr()
1016 q = za->za_ttycommon.t_readq; in zs_xsisr()
1024 * ok - now the hard part - find ourself in zs_xsisr()
1030 if (q->q_qinfo && q->q_qinfo->qi_minfo) in zs_xsisr()
1032 dname = q->q_qinfo->qi_minfo->mi_idname; in zs_xsisr()
1034 if (!strcmp(dname, parseinfo.st_rdinit->qi_minfo->mi_idname)) in zs_xsisr()
1037 * back home - phew (hopping along stream queues might in zs_xsisr()
1041 if ((((parsestream_t *)q->q_ptr)->parse_status & PARSE_ENABLE) && in zs_xsisr()
1042 … parse_iopps(&((parsestream_t *)q->q_ptr)->parse_io, status ? SYNC_ONE : SYNC_ZERO, &cdevent)) in zs_xsisr()
1045 * XXX - currently we do not pass up the message, as in zs_xsisr()
1049 * a softcall-ed routine which does the message pass-up in zs_xsisr()
1053 parse_iodone(&((parsestream_t *)q->q_ptr)->parse_io); in zs_xsisr()
1058 ((parsestream_t *)q->q_ptr)->parse_ppsclockev.tv = cdevent.tv; in zs_xsisr()
1059 ++(((parsestream_t *)q->q_ptr)->parse_ppsclockev.serial); in zs_xsisr()
1067 q = q->q_next; in zs_xsisr()
1069 if (!loopcheck--) in zs_xsisr()
1071 panic("zs_xsisr: STREAMS Queue corrupted - CD event"); in zs_xsisr()
1075 if (cdstate) /* fake CARRIER status - XXX currently not coordinated */ in zs_xsisr()
1076 za->za_flags |= ZAS_CARR_ON; in zs_xsisr()
1078 za->za_flags &= ~ZAS_CARR_ON; in zs_xsisr()
1084 za->za_rr0 = (za->za_rr0 & ~ZSRR0_IGNORE) | (zsstatus & ZSRR0_IGNORE); in zs_xsisr()
1086 if (((za->za_rr0 ^ zsstatus) & ~ZSRR0_IGNORE) == 0) in zs_xsisr()
1089 * all done - kill status indication and return in zs_xsisr()
1097 (za->za_rr0 ^ zsstatus) & ~ZSRR0_CD,dname); in zs_xsisr()
1108 q = za->za_ttycommon.t_readq; in zs_xsisr()
1117 if (q->q_qinfo && q->q_qinfo->qi_minfo) in zs_xsisr()
1119 dname = q->q_qinfo->qi_minfo->mi_idname; in zs_xsisr()
1120 if (!strcmp(dname, parseinfo.st_rdinit->qi_minfo->mi_idname)) in zs_xsisr()
1125 * back home - phew (hopping along stream queues might in zs_xsisr()
1128 …if ((zsisr = ((struct savedzsops *)((parsestream_t *)q->q_ptr)->parse_data)->oldzsops->zsop_xsint)) in zs_xsisr()
1141 q = q->q_next; in zs_xsisr()
1143 if (!loopcheck--) in zs_xsisr()
1145 panic("zs_xsisr: STREAMS Queue corrupted - non CD event"); in zs_xsisr()
1150 * last resort - shouldn't even come here as it indicates in zs_xsisr()
1153 …sr: looking for \"%s\" - found \"%s\" - taking EMERGENCY path\n", parseinfo.st_rdinit->qi_minfo->m… in zs_xsisr()
1155 if (emergencyzs && emergencyzs->zsop_xsint) in zs_xsisr()
1156 emergencyzs->zsop_xsint(zs); in zs_xsisr()