|
|
1.1 ! root 1: aallttccllkk_iinn() -- Accessible Kernel Routine ! 2: ! 3: iinntt ! 4: aallttccllkk_iinn(_h_z, _f_n) ! 5: iinntt _h_z, (*_f_n)(); ! 6: ! 7: aallttccllkk_iinn() increases the system clock rate from the value set by manifest ! 8: constant HHZZ (at present, 100 Hertz) to _h_z. Function _f_n will be called every ! 9: time the clock interrupt occurs. _h_z must be an integral multiple of HHZZ; ! 10: therefore, the rate of clock interrupts will be increased by a factor of ! 11: _h_z/HHZZ. _f_n is an iinntt-valued function that must return 0 every _h_z/HHZZ'th time ! 12: it is called, nonzero the rest of the time. The zero value returned from ! 13: _f_n tells the COHERENT system's clock routine to do its usual processing. ! 14: ! 15: aallttccllkk_iinn() returns 0 if it completes normally; if argument _h_z is less than ! 16: HHZZ or not an integral multiple of HHZZ, this function does nothing and ! 17: returns -1. ! 18: ! 19: _E_x_a_m_p_l_e ! 20: The following gives a partial example of how to use aallttccllkk_iinn() in a device ! 21: driver. ! 22: ! 23: #include <sys/const.h> /* #define's HZ */ ! 24: ... ! 25: ! 26: static int scale_factor; ! 27: static int poll_fn(); ! 28: ... ! 29: ! 30: /* install high-speed polling of I/O device */ ! 31: poll_rate = ...; ! 32: scale_factor = poll_rate/HZ; ! 33: altclk_out(); ! 34: altclk_in(poll_rate, poll_fn); ! 35: ... ! 36: ! 37: /* polling function */ ! 38: int poll_fn() ! 39: { ! 40: static int count; ! 41: ! 42: ...do device polling... ! 43: ! 44: count++; ! 45: if (count >= scale_factor) ! 46: count = 0; ! 47: return count; ! 48: } ! 49: ! 50: _S_e_e _A_l_s_o ! 51: aacccceessssiibbllee kkeerrnneell rroouuttiinneess, aallttccllkk_oouutt() ! 52: ! 53: _N_o_t_e_s ! 54: Avoid naming the polling function aallttccllkk(): there is already a kernel ! 55: symbol with this name.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.