Root/
1 | scale=0 |
2 | |
3 | define gcd(a,b) { |
4 | auto t; |
5 | while (b) { |
6 | t = b; |
7 | b = a % b; |
8 | a = t; |
9 | } |
10 | return a; |
11 | } |
12 | |
13 | /* Division by reciprocal multiplication. */ |
14 | define fmul(b,n,d) { |
15 | return (2^b*n+d-1)/d; |
16 | } |
17 | |
18 | /* Adjustment factor when a ceiling value is used. Use as: |
19 | (imul * n) + (fmulxx * n + fadjxx) >> xx) */ |
20 | define fadj(b,n,d) { |
21 | auto v; |
22 | d = d/gcd(n,d); |
23 | v = 2^b*(d-1)/d; |
24 | return v; |
25 | } |
26 | |
27 | /* Compute the appropriate mul/adj values as well as a shift count, |
28 | which brings the mul value into the range 2^b-1 <= x < 2^b. Such |
29 | a shift value will be correct in the signed integer range and off |
30 | by at most one in the upper half of the unsigned range. */ |
31 | define fmuls(b,n,d) { |
32 | auto s, m; |
33 | for (s = 0; 1; s++) { |
34 | m = fmul(s,n,d); |
35 | if (m >= 2^(b-1)) |
36 | return s; |
37 | } |
38 | return 0; |
39 | } |
40 | |
41 | define timeconst(hz) { |
42 | print "/* Automatically generated by kernel/timeconst.bc */\n" |
43 | print "/* Time conversion constants for HZ == ", hz, " */\n" |
44 | print "\n" |
45 | |
46 | print "#ifndef KERNEL_TIMECONST_H\n" |
47 | print "#define KERNEL_TIMECONST_H\n\n" |
48 | |
49 | print "#include <linux/param.h>\n" |
50 | print "#include <linux/types.h>\n\n" |
51 | |
52 | print "#if HZ != ", hz, "\n" |
53 | print "#error \qkernel/timeconst.h has the wrong HZ value!\q\n" |
54 | print "#endif\n\n" |
55 | |
56 | if (hz < 2) { |
57 | print "#error Totally bogus HZ value!\n" |
58 | } else { |
59 | s=fmuls(32,1000,hz) |
60 | obase=16 |
61 | print "#define HZ_TO_MSEC_MUL32\tU64_C(0x", fmul(s,1000,hz), ")\n" |
62 | print "#define HZ_TO_MSEC_ADJ32\tU64_C(0x", fadj(s,1000,hz), ")\n" |
63 | obase=10 |
64 | print "#define HZ_TO_MSEC_SHR32\t", s, "\n" |
65 | |
66 | s=fmuls(32,hz,1000) |
67 | obase=16 |
68 | print "#define MSEC_TO_HZ_MUL32\tU64_C(0x", fmul(s,hz,1000), ")\n" |
69 | print "#define MSEC_TO_HZ_ADJ32\tU64_C(0x", fadj(s,hz,1000), ")\n" |
70 | obase=10 |
71 | print "#define MSEC_TO_HZ_SHR32\t", s, "\n" |
72 | |
73 | obase=10 |
74 | cd=gcd(hz,1000) |
75 | print "#define HZ_TO_MSEC_NUM\t\t", 1000/cd, "\n" |
76 | print "#define HZ_TO_MSEC_DEN\t\t", hz/cd, "\n" |
77 | print "#define MSEC_TO_HZ_NUM\t\t", hz/cd, "\n" |
78 | print "#define MSEC_TO_HZ_DEN\t\t", 1000/cd, "\n" |
79 | print "\n" |
80 | |
81 | s=fmuls(32,1000000,hz) |
82 | obase=16 |
83 | print "#define HZ_TO_USEC_MUL32\tU64_C(0x", fmul(s,1000000,hz), ")\n" |
84 | print "#define HZ_TO_USEC_ADJ32\tU64_C(0x", fadj(s,1000000,hz), ")\n" |
85 | obase=10 |
86 | print "#define HZ_TO_USEC_SHR32\t", s, "\n" |
87 | |
88 | s=fmuls(32,hz,1000000) |
89 | obase=16 |
90 | print "#define USEC_TO_HZ_MUL32\tU64_C(0x", fmul(s,hz,1000000), ")\n" |
91 | print "#define USEC_TO_HZ_ADJ32\tU64_C(0x", fadj(s,hz,1000000), ")\n" |
92 | obase=10 |
93 | print "#define USEC_TO_HZ_SHR32\t", s, "\n" |
94 | |
95 | obase=10 |
96 | cd=gcd(hz,1000000) |
97 | print "#define HZ_TO_USEC_NUM\t\t", 1000000/cd, "\n" |
98 | print "#define HZ_TO_USEC_DEN\t\t", hz/cd, "\n" |
99 | print "#define USEC_TO_HZ_NUM\t\t", hz/cd, "\n" |
100 | print "#define USEC_TO_HZ_DEN\t\t", 1000000/cd, "\n" |
101 | print "\n" |
102 | |
103 | print "#endif /* KERNEL_TIMECONST_H */\n" |
104 | } |
105 | halt |
106 | } |
107 | |
108 | timeconst(hz) |
109 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9