|
|
1.1 ! root 1: /* $Header: /y/coh.386/RCS/timeout.c,v 1.3 92/07/16 16:33:38 hal Exp $ */ ! 2: /* (lgl- ! 3: * The information contained herein is a trade secret of Mark Williams ! 4: * Company, and is confidential information. It is provided under a ! 5: * license agreement, and may be copied or disclosed only under the ! 6: * terms of that agreement. Any reproduction or disclosure of this ! 7: * material without the express written authorization of Mark Williams ! 8: * Company or persuant to the license agreement is unlawful. ! 9: * ! 10: * COHERENT Version 2.3.37 ! 11: * Copyright (c) 1982, 1983, 1984. ! 12: * An unpublished work by Mark Williams Company, Chicago. ! 13: * All rights reserved. ! 14: -lgl) */ ! 15: /* ! 16: * Coherent. ! 17: * Timeout management. ! 18: * ! 19: * $Log: timeout.c,v $ ! 20: * Revision 1.3 92/07/16 16:33:38 hal ! 21: * Kernel #58 ! 22: * ! 23: * Revision 1.2 92/01/06 12:01:05 hal ! 24: * Compile with cc.mwc. ! 25: * ! 26: * Revision 1.2 89/08/01 13:56:42 src ! 27: * Bug: #include <timeout.h> not accurate; timeout.h now in /usr/include/sys. ! 28: * Fix: #include <sys/timeout.h> now used. (ABC) ! 29: * ! 30: * Revision 1.1 88/03/24 08:14:38 src ! 31: * Initial revision ! 32: * ! 33: * 87/07/23 Allan Cornish /usr/src/sys/coh/timeout.c ! 34: * Timeout2 function now cancels timer if delay value is 0. ! 35: * ! 36: * 87/07/08 Allan Cornish /usr/src/sys/coh/timeout.c ! 37: * Timeout2 function added to support long timeouts. ! 38: * ! 39: * 87/07/07 Allan Cornish /usr/src/sys/coh/timeout.c ! 40: * Support for multiple timing queues ported from RTX. ! 41: * ! 42: * 86/11/24 Allan Cornish /usr/src/sys/coh/timeout.c ! 43: * Added support for new t_last field in tim struct. ! 44: */ ! 45: #include <sys/coherent.h> ! 46: #include <sys/timeout.h> ! 47: #include <sys/fun.h> ! 48: ! 49: /* ! 50: * Given a pointer to a timeout structure, `tp', call the function `f' ! 51: * with integer argument `a' in `n' ticks of the clock. The list is ! 52: * searched to see if the specified timeout structure is already in a ! 53: * list, and it is removed if already there. ! 54: */ ! 55: void ! 56: timeout(tp, n, f, a) ! 57: register TIM *tp; ! 58: unsigned n; ! 59: int (*f)(); ! 60: char *a; ! 61: { ! 62: register TIM ** qp; ! 63: int s; ! 64: ! 65: /* ! 66: * Already on a timing queue. ! 67: */ ! 68: s = sphi(); ! 69: if ( qp = tp->t_last ) { ! 70: tp->t_last = NULL; ! 71: if ( *qp = tp->t_next ) ! 72: tp->t_next->t_last = qp; ! 73: } ! 74: spl( s ); ! 75: ! 76: if ( f == NULL ) ! 77: return; ! 78: ! 79: /* ! 80: * Calculate clock tick at which timeout is to occur. ! 81: * Record function and argument to be invoked upon timeout. ! 82: */ ! 83: tp->t_lbolt = lbolt + n; ! 84: tp->t_func = f; ! 85: tp->t_farg = a; ! 86: ! 87: /* ! 88: * Identify timeout queue. ! 89: */ ! 90: qp = &timq[ tp->t_lbolt % nel(timq) ]; ! 91: ! 92: /* ! 93: * Insert at head of timeout queue. ! 94: */ ! 95: s = sphi(); ! 96: if ( tp->t_next = *qp ) ! 97: tp->t_next->t_last = tp; ! 98: tp->t_last = qp; ! 99: *qp = tp; ! 100: spl(s); ! 101: } ! 102: ! 103: void ! 104: timeout2(tp, n, f, a) ! 105: register TIM *tp; ! 106: long n; ! 107: int (*f)(); ! 108: char *a; ! 109: { ! 110: register TIM ** qp; ! 111: int s; ! 112: ! 113: /* ! 114: * Already on a timing queue. ! 115: */ ! 116: s = sphi(); ! 117: if ( qp = tp->t_last ) { ! 118: tp->t_last = NULL; ! 119: if ( *qp = tp->t_next ) ! 120: tp->t_next->t_last = qp; ! 121: } ! 122: spl( s ); ! 123: ! 124: /* ! 125: * Do not schedule new timer if no function or delay interval. ! 126: */ ! 127: if ( (f == NULL) || (n == 0) ) ! 128: return; ! 129: ! 130: /* ! 131: * Calculate clock tick at which timeout is to occur. ! 132: * Record function and argument to be invoked upon timeout. ! 133: */ ! 134: tp->t_lbolt = lbolt + n; ! 135: tp->t_func = f; ! 136: tp->t_farg = a; ! 137: ! 138: /* ! 139: * Identify timeout queue. ! 140: */ ! 141: qp = &timq[ tp->t_lbolt % nel(timq) ]; ! 142: ! 143: /* ! 144: * Insert at head of timeout queue. ! 145: */ ! 146: s = sphi(); ! 147: if ( tp->t_next = *qp ) ! 148: tp->t_next->t_last = tp; ! 149: tp->t_last = qp; ! 150: *qp = tp; ! 151: spl(s); ! 152: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.