|
|
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.