1 /**
2 * @file op_cpufreq.c
3 * get cpu frequency definition
4 *
5 * @remark Copyright 2003 OProfile authors
6 * @remark Read the file COPYING
7 *
8 * @author John Levon
9 * @author Philippe Elie
10 */
11
12 #include <stdio.h>
13 #include <stdlib.h>
14
15 #include "op_fileio.h"
16
op_cpu_frequency(void)17 double op_cpu_frequency(void)
18 {
19 double fval = 0.0;
20 unsigned long uval;
21 char * line = NULL;
22
23 FILE * fp = op_try_open_file("/proc/cpuinfo", "r");
24 if (!fp)
25 return 0.0;
26
27 while (1) {
28 line = op_get_line(fp);
29
30 if (!line)
31 break;
32
33 if (line[0] == '\0') {
34 free(line);
35 continue;
36 }
37
38 /* x86/parisc/ia64/x86_64 */
39 if (sscanf(line, "cpu MHz : %lf", &fval) == 1)
40 break;
41 /* ppc/ppc64 */
42 if (sscanf(line, "clock : %lfMHz", &fval) == 1)
43 break;
44 /* alpha */
45 if (sscanf(line, "cycle frequency [Hz] : %lu", &uval) == 1) {
46 fval = uval / 1E6;
47 break;
48 }
49 /* sparc64 if CONFIG_SMP only */
50 if (sscanf(line, "Cpu0ClkTck : %lx", &uval) == 1) {
51 fval = uval / 1E6;
52 break;
53 }
54 /* s390 doesn't provide cpu freq, checked up to 2.6-test4 */
55
56 free(line);
57 }
58
59 if (line)
60 free(line);
61 op_close_file(fp);
62
63 return fval;
64 }
65