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