Revision dc333cd6 target-ppc/kvm.c
b/target-ppc/kvm.c | ||
---|---|---|
252 | 252 |
return ret; |
253 | 253 |
} |
254 | 254 |
|
255 |
static int read_cpuinfo(const char *field, char *value, int len) |
|
256 |
{ |
|
257 |
FILE *f; |
|
258 |
int ret = -1; |
|
259 |
int field_len = strlen(field); |
|
260 |
char line[512]; |
|
261 |
|
|
262 |
f = fopen("/proc/cpuinfo", "r"); |
|
263 |
if (!f) { |
|
264 |
return -1; |
|
265 |
} |
|
266 |
|
|
267 |
do { |
|
268 |
if(!fgets(line, sizeof(line), f)) { |
|
269 |
break; |
|
270 |
} |
|
271 |
if (!strncmp(line, field, field_len)) { |
|
272 |
strncpy(value, line, len); |
|
273 |
ret = 0; |
|
274 |
break; |
|
275 |
} |
|
276 |
} while(*line); |
|
277 |
|
|
278 |
fclose(f); |
|
279 |
|
|
280 |
return ret; |
|
281 |
} |
|
282 |
|
|
283 |
uint32_t kvmppc_get_tbfreq(void) |
|
284 |
{ |
|
285 |
char line[512]; |
|
286 |
char *ns; |
|
287 |
uint32_t retval = get_ticks_per_sec(); |
|
288 |
|
|
289 |
if (read_cpuinfo("timebase", line, sizeof(line))) { |
|
290 |
return retval; |
|
291 |
} |
|
292 |
|
|
293 |
if (!(ns = strchr(line, ':'))) { |
|
294 |
return retval; |
|
295 |
} |
|
296 |
|
|
297 |
ns++; |
|
298 |
|
|
299 |
retval = atoi(ns); |
|
300 |
return retval; |
|
301 |
} |
Also available in: Unified diff