Lines Matching +full:long +full:- +full:press +full:- +full:mode
2 * /src/NTP/ntp4-dev/libparse/parsestreams.c,v 4.11 2005/04/16 17:32:10 kardel RELEASE_20050508_A
9 * Copyright (c) 1995-2005 by Frank Kardel <kardel <AT> ntp.org>
10 …* Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universitaet Erlangen-Nuernberg, Ge…
103 /*--------------- loadable driver section -----------------------------*/
109 static char mnam[] = "PARSEPPS "; /* name this baby - keep room for revision number */
111 static char mnam[] = "PARSE "; /* name this baby - keep room for revision number */
115 VDMAGIC_PSEUDO, /* nothing like a real driver - a STREAMS module */
149 while ((c-- > 0) && (*t++ = *s++)) in Strncpy()
167 while (!(c = *s++ - *t++) && *s && *t) in Strcmp()
187 while (n-- && !(c = *s++ - *t++) && *s && *t) in Strncmp()
200 while (c-- > 0) in ntp_memset()
224 char *mname = parseinfo.st_rdinit->qi_minfo->mi_idname; in xxxinit()
229 vdp->vdd_vdtab = (struct vdlinkage *)&parsesync_vd; in xxxinit()
236 if (!Strncmp(fm->f_name, mname, FMNAMESZ)) in xxxinit()
243 (fm->f_name[0] == '\0') && in xxxinit()
244 (fm->f_str == (struct streamtab *)0)) in xxxinit()
247 * got one - so move in in xxxinit()
265 s = rcsid; /* NOOP - keep compilers happy */ in xxxinit()
267 Strncpy(ifm->f_name, mname, FMNAMESZ); in xxxinit()
268 ifm->f_name[FMNAMESZ] = '\0'; in xxxinit()
269 ifm->f_str = &parseinfo; in xxxinit()
280 * if present. - not necessary on a -kv co (cvs export) in xxxinit()
304 if (Strlen(t) >= (S - s)) in xxxinit()
306 (void) Strncpy(t, s, S - s); in xxxinit()
323 if (!Strncmp(fm->f_name, mname, FMNAMESZ)) in xxxinit()
326 * got it - kill entry in xxxinit()
328 fm->f_name[0] = '\0'; in xxxinit()
329 fm->f_str = (struct streamtab *)0; in xxxinit()
358 /*--------------- stream module definition ----------------------------*/
374 1, /* high water mark - flow control */
375 0 /* low water mark - flow control */
384 NULL, /* admin procedure - NOT USED FOR NOW */
395 NULL, /* admin procedure - NOT USED FOR NOW */
409 /*--------------- driver data structures ----------------------------*/
412 * we usually have an inverted signal - but you
415 int cd_invert = 1; /* invert status of CD line - PPS support via CD input */
421 /*--------------- module implementation -----------------------------*/
424 (_X_)->tv_usec += (_US_);\
425 if ((_X_)->tv_usec >= 1000000)\
427 (_X_)->tv_sec++;\
428 (_X_)->tv_usec -= 1000000;\
441 int mode in setup_stream() argument
449 struct stroptions *str = (struct stroptions *)(void *)mp->b_rptr; in setup_stream()
451 str->so_flags = SO_READOPT|SO_HIWAT|SO_LOWAT; in setup_stream()
452 str->so_readopt = (mode == M_PARSE) ? RMSGD : RNORM; in setup_stream()
453 str->so_hiwat = (mode == M_PARSE) ? sizeof(parsetime_t) : 256; in setup_stream()
454 str->so_lowat = 0; in setup_stream()
455 mp->b_datap->db_type = M_SETOPTS; in setup_stream()
456 mp->b_wptr += sizeof(struct stroptions); in setup_stream()
458 return putctl1(WR(q)->q_next, M_CTL, (mode == M_PARSE) ? MC_SERVICEIMM : in setup_stream()
463 parseprintf(DD_OPEN,("parse: setup_stream - FAILED - no MEMORY for allocb\n")); in setup_stream()
484 parseprintf(DD_OPEN,("parse: OPEN - FAILED - not MODOPEN\n")); in parseopen()
488 if (q->q_ptr != (caddr_t)NULL) in parseopen()
491 parseprintf(DD_OPEN,("parse: OPEN - FAILED - EXCLUSIVE ONLY\n")); in parseopen()
499 q->q_ptr = (caddr_t)kmem_alloc(sizeof(parsestream_t)); in parseopen()
500 if (q->q_ptr == (caddr_t)0) in parseopen()
502 parseprintf(DD_OPEN,("parse: OPEN - FAILED - no memory\n")); in parseopen()
504 parsebusy--; in parseopen()
508 WR(q)->q_ptr = q->q_ptr; in parseopen()
510 parse = (parsestream_t *)(void *)q->q_ptr; in parseopen()
512 parse->parse_queue = q; in parseopen()
513 parse->parse_status = PARSE_ENABLE; in parseopen()
514 parse->parse_ppsclockev.tv.tv_sec = 0; in parseopen()
515 parse->parse_ppsclockev.tv.tv_usec = 0; in parseopen()
516 parse->parse_ppsclockev.serial = 0; in parseopen()
518 if (!parse_ioinit(&parse->parse_io)) in parseopen()
521 * ok guys - beat it in parseopen()
525 parsebusy--; in parseopen()
534 parseprintf(DD_OPEN,("parse: OPEN - SUCCEEDED\n")); in parseopen()
538 * code, did you ? - So, keep the message in here. in parseopen()
543 printf("%s: Copyright (C) 1991-2005, Frank Kardel\n", parsesync_vd.Drv_name); in parseopen()
545 …printf("%s: Copyright (C) 1991-2005, Frank Kardel\n", "parsestreams.c,v 4.11 2005/04/16 17:32:10 k… in parseopen()
557 parsebusy--; in parseopen()
570 register parsestream_t *parse = (parsestream_t *)(void *)q->q_ptr; in parseclose()
571 register unsigned long s; in parseclose()
577 if (parse->parse_dqueue) in parseclose()
578 close_linemon(parse->parse_dqueue, q); in parseclose()
579 parse->parse_dqueue = (queue_t *)0; in parseclose()
583 parse_ioend(&parse->parse_io); in parseclose()
587 q->q_ptr = (caddr_t)NULL; in parseclose()
588 WR(q)->q_ptr = (caddr_t)NULL; in parseclose()
591 parsebusy--; in parseclose()
608 if (canput(q->q_next) || (mp->b_datap->db_type > QPCTL)) in parsersvc()
611 parseprintf(DD_RSVC,("parse: RSVC - putnext\n")); in parsersvc()
616 parseprintf(DD_RSVC,("parse: RSVC - flow control wait\n")); in parsersvc()
625 * send stuff down - dont care about
637 parsestream_t *parse = (parsestream_t *)(void *)q->q_ptr; in parsewput()
641 switch (mp->b_datap->db_type) in parsewput()
648 iocp = (struct iocblk *)(void *)mp->b_rptr; in parsewput()
649 switch (iocp->ioc_cmd) in parsewput()
652 parseprintf(DD_WPUT,("parse: parsewput - forward M_IOCTL\n")); in parsewput()
661 if (datap == NULL || mp->b_cont) in parsewput()
663 mp->b_datap->db_type = M_IOCNAK; in parsewput()
664 iocp->ioc_error = (datap == NULL) ? ENOMEM : EINVAL; in parsewput()
671 mp->b_cont = datap; in parsewput()
672 *(struct ppsclockev *)(void *)datap->b_wptr = parse->parse_ppsclockev; in parsewput()
673 datap->b_wptr += in parsewput()
674 sizeof(struct ppsclockev) / sizeof(*datap->b_wptr); in parsewput()
675 mp->b_datap->db_type = M_IOCACK; in parsewput()
676 iocp->ioc_count = sizeof(struct ppsclockev); in parsewput()
683 parse->parse_status = (parse->parse_status & (unsigned)~PARSE_ENABLE) | in parsewput()
684 (iocp->ioc_cmd == PARSEIOC_ENABLE) ? in parsewput()
686 if (!setup_stream(RD(q), (parse->parse_status & PARSE_ENABLE) ? in parsewput()
689 mp->b_datap->db_type = M_IOCNAK; in parsewput()
693 mp->b_datap->db_type = M_IOCACK; in parsewput()
703 if (iocp->ioc_count == sizeof(parsectl_t)) in parsewput()
705 parsectl_t *dct = (parsectl_t *)(void *)mp->b_cont->b_rptr; in parsewput()
707 switch (iocp->ioc_cmd) in parsewput()
710 parseprintf(DD_WPUT,("parse: parsewput - PARSEIOC_TIMECODE\n")); in parsewput()
711 ok = parse_timecode(dct, &parse->parse_io); in parsewput()
715 parseprintf(DD_WPUT,("parse: parsewput - PARSEIOC_SETFMT\n")); in parsewput()
716 ok = parse_setfmt(dct, &parse->parse_io); in parsewput()
720 parseprintf(DD_WPUT,("parse: parsewput - PARSEIOC_GETFMT\n")); in parsewput()
721 ok = parse_getfmt(dct, &parse->parse_io); in parsewput()
725 parseprintf(DD_WPUT,("parse: parsewput - PARSEIOC_SETCS\n")); in parsewput()
726 ok = parse_setcs(dct, &parse->parse_io); in parsewput()
729 mp->b_datap->db_type = ok ? M_IOCACK : M_IOCNAK; in parsewput()
733 mp->b_datap->db_type = M_IOCNAK; in parsewput()
735 …parseprintf(DD_WPUT,("parse: parsewput qreply - %s\n", (mp->b_datap->db_type == M_IOCNAK) ? "M_IOC… in parsewput()
746 static unsigned long
753 if ((*mp)->b_wptr - (*mp)->b_rptr) in rdchar()
755 return (unsigned long)(*(unsigned char *)((*mp)->b_rptr++)); in rdchar()
761 *mp = (*mp)->b_cont; in rdchar()
779 switch (type = mp->b_datap->db_type) in parserput()
786 parseprintf(DD_RPUT,("parse: parserput - forward type 0x%x\n", type)); in parserput()
787 if (canput(q->q_next) || (mp->b_datap->db_type > QPCTL)) in parserput()
798 register parsestream_t * parse = (parsestream_t *)(void *)q->q_ptr; in parserput()
800 register unsigned long ch; in parserput()
808 if (!(parse->parse_status & PARSE_ENABLE)) in parserput()
810 parseprintf(DD_RPUT,("parse: parserput - parser disabled - forward type 0x%x\n", type)); in parserput()
811 if (canput(q->q_next) || (mp->b_datap->db_type > QPCTL)) in parserput()
820 parseprintf(DD_RPUT,("parse: parserput - M_%s\n", (type == M_DATA) ? "DATA" : "BREAK")); in parserput()
830 if (ch != ~0 && parse_ioread(&parse->parse_io, (unsigned int)ch, &ctime)) in parserput()
834 * don't press it if resources are tight or nobody wants it in parserput()
837 if (canput(parse->parse_queue->q_next) && (nmp = allocb(sizeof(parsetime_t), BPRI_MED))) in parserput()
839 bcopy((caddr_t)&parse->parse_io.parse_dtime, (caddr_t)nmp->b_rptr, sizeof(parsetime_t)); in parserput()
840 nmp->b_wptr += sizeof(parsetime_t); in parserput()
841 putnext(parse->parse_queue, nmp); in parserput()
845 parse_iodone(&parse->parse_io); in parserput()
851 if (parse_ioread(&parse->parse_io, (unsigned int)0, &ctime)) in parserput()
855 * don't press it if resources are tight or nobody wants it in parserput()
858 if (canput(parse->parse_queue->q_next) && (nmp = allocb(sizeof(parsetime_t), BPRI_MED))) in parserput()
860 bcopy((caddr_t)&parse->parse_io.parse_dtime, (caddr_t)nmp->b_rptr, sizeof(parsetime_t)); in parserput()
861 nmp->b_wptr += sizeof(parsetime_t); in parserput()
862 putnext(parse->parse_queue, nmp); in parserput()
866 parse_iodone(&parse->parse_io); in parserput()
880 register parsestream_t * parse = (parsestream_t *)(void *)q->q_ptr; in parserput()
887 parseprintf(DD_RPUT,("parse: parserput - M_%sHANGUP\n", (type == M_HANGUP) ? "" : "UN")); in parserput()
889 if ((parse->parse_status & PARSE_ENABLE) && in parserput()
890 parse_iopps(&parse->parse_io, (int)(status ? SYNC_ONE : SYNC_ZERO), &ctime)) in parserput()
893 if (canput(parse->parse_queue->q_next) && (nmp = allocb(sizeof(parsetime_t), BPRI_MED))) in parserput()
895 bcopy((caddr_t)&parse->parse_io.parse_dtime, (caddr_t)nmp->b_rptr, sizeof(parsetime_t)); in parserput()
896 nmp->b_wptr += sizeof(parsetime_t); in parserput()
897 putnext(parse->parse_queue, nmp); in parserput()
901 parse_iodone(&parse->parse_io); in parserput()
905 if (canput(q->q_next) || (mp->b_datap->db_type > QPCTL)) in parserput()
914 parse->parse_ppsclockev.tv = ctime.tv; in parserput()
915 ++(parse->parse_ppsclockev.serial); in parserput()
925 /*-------------------- CD isr status monitor ---------------*/
943 while (dq->q_next) in init_linemon()
945 dq = dq->q_next; /* skip down to driver */ in init_linemon()
951 if (dq->q_qinfo && dq->q_qinfo->qi_minfo) in init_linemon()
953 register char *dname = dq->q_qinfo->qi_minfo->mi_idname; in init_linemon()
982 if (q->q_qinfo && q->q_qinfo->qi_minfo) in close_linemon()
984 register char *dname = q->q_qinfo->qi_minfo->mi_idname; in close_linemon()
1004 static unsigned long cdmask = ZSRR0_CD;
1024 register parsestream_t *parsestream = (parsestream_t *)(void *)my_q->q_ptr; in init_zs_linemon()
1030 zs = ((struct zsaline *)(void *)q->q_ptr)->za_common; in init_zs_linemon()
1034 * well - not found on startup - just say no (shouldn't happen though) in init_zs_linemon()
1040 unsigned long s; in init_zs_linemon()
1045 * we are in DEEP trouble - panic is likely to be next, sorry in init_zs_linemon()
1051 parseprintf(DD_INSTALL, ("init_zs_linemon: CD monitor NOT installed - no memory\n")); in init_zs_linemon()
1057 parsestream->parse_data = (void *)szs; in init_zs_linemon()
1061 parsestream->parse_dqueue = q; /* remember driver */ in init_zs_linemon()
1063 szs->zsops = *zs->zs_ops; in init_zs_linemon()
1064 szs->zsops.zsop_xsint = zs_xsisr; /* place our bastard */ in init_zs_linemon()
1065 szs->oldzsops = zs->zs_ops; in init_zs_linemon()
1066 emergencyzs = zs->zs_ops; in init_zs_linemon()
1068 zsopinit(zs, &szs->zsops); /* hook it up */ in init_zs_linemon()
1080 * unregister our ISR routine - must call under splhigh()
1089 register parsestream_t *parsestream = (parsestream_t *)(void *)my_q->q_ptr; in close_zs_linemon()
1091 zs = ((struct zsaline *)(void *)q->q_ptr)->za_common; in close_zs_linemon()
1095 * well - not found on startup - just say no (shouldn't happen though) in close_zs_linemon()
1101 register struct savedzsops *szs = (struct savedzsops *)parsestream->parse_data; in close_zs_linemon()
1103 zsopinit(zs, szs->oldzsops); /* reset to previous handler functions */ in close_zs_linemon()
1115 extern void hardpps (struct timeval *, long);
1131 register struct zsaline *za = (struct zsaline *)(void *)zs->zs_priv; in zs_xsisr()
1132 register struct zscc_device *zsaddr = zs->zs_addr; in zs_xsisr()
1139 register long usec; in zs_xsisr()
1145 zsstatus = zsaddr->zscc_control; in zs_xsisr()
1147 if ((za->za_rr0 ^ zsstatus) & (cdmask)) in zs_xsisr()
1152 za->za_rr0 = (za->za_rr0 & ~(cdmask)) | (zsstatus & (cdmask)); in zs_xsisr()
1179 usec = cdevent.tv.tv_usec - usec; in zs_xsisr()
1187 q = za->za_ttycommon.t_readq; in zs_xsisr()
1190 * ok - now the hard part - find ourself in zs_xsisr()
1196 if (q->q_qinfo && q->q_qinfo->qi_minfo) in zs_xsisr()
1198 dname = q->q_qinfo->qi_minfo->mi_idname; in zs_xsisr()
1200 if (!Strcmp(dname, parseinfo.st_rdinit->qi_minfo->mi_idname)) in zs_xsisr()
1203 * back home - phew (hopping along stream queues might in zs_xsisr()
1207 if ((((parsestream_t *)(void *)q->q_ptr)->parse_status & PARSE_ENABLE) && in zs_xsisr()
1208 …parse_iopps(&((parsestream_t *)(void *)q->q_ptr)->parse_io, (int)(status ? SYNC_ONE : SYNC_ZERO), … in zs_xsisr()
1211 * XXX - currently we do not pass up the message, as in zs_xsisr()
1215 * a softcall-ed routine which does the message pass-up in zs_xsisr()
1219 parse_iodone(&((parsestream_t *)(void *)q->q_ptr)->parse_io); in zs_xsisr()
1224 ((parsestream_t *)(void *)q->q_ptr)->parse_ppsclockev.tv = cdevent.tv; in zs_xsisr()
1225 ++(((parsestream_t *)(void *)q->q_ptr)->parse_ppsclockev.serial); in zs_xsisr()
1233 q = q->q_next; in zs_xsisr()
1235 if (!loopcheck--) in zs_xsisr()
1237 panic("zs_xsisr: STREAMS Queue corrupted - CD event"); in zs_xsisr()
1246 if (!((za->za_rr0 ^ zsstatus) & ~(cdmask))) in zs_xsisr()
1249 * all done - kill status indication and return in zs_xsisr()
1251 zsaddr->zscc_control = ZSWR0_RESET_STATUS; /* might kill other conditions here */ in zs_xsisr()
1257 za->za_flags |= ZAS_CARR_ON; in zs_xsisr()
1259 za->za_flags &= ~ZAS_CARR_ON; in zs_xsisr()
1271 q = za->za_ttycommon.t_readq; in zs_xsisr()
1280 if (q->q_qinfo && q->q_qinfo->qi_minfo) in zs_xsisr()
1282 dname = q->q_qinfo->qi_minfo->mi_idname; in zs_xsisr()
1283 if (!Strcmp(dname, parseinfo.st_rdinit->qi_minfo->mi_idname)) in zs_xsisr()
1288 * back home - phew (hopping along stream queues might in zs_xsisr()
1291 …if ((zsisr = ((struct savedzsops *)((parsestream_t *)(void *)q->q_ptr)->parse_data)->oldzsops->zso… in zs_xsisr()
1304 q = q->q_next; in zs_xsisr()
1306 if (!loopcheck--) in zs_xsisr()
1308 panic("zs_xsisr: STREAMS Queue corrupted - non CD event"); in zs_xsisr()
1313 * last resort - shouldn't even come here as it indicates in zs_xsisr()
1316 …sr: looking for \"%s\" - found \"%s\" - taking EMERGENCY path\n", parseinfo.st_rdinit->qi_minfo->m… in zs_xsisr()
1318 if (emergencyzs && emergencyzs->zsop_xsint) in zs_xsisr()
1319 emergencyzs->zsop_xsint(zs); in zs_xsisr()