#include #include #include #include #include /* tusc can be a very useful thing... */ #ifndef _SI_MACHINE_MODEL #define _SI_MACHINE_MODEL 5 #endif extern int sysinfo(int info, char *buffer, ssize_t len); void find_system_info(char **system_model, char **cpu_model, int *cpu_frequency) { char model_str[64]; int ret; struct pst_processor processor_info; /* first the system model name */ ret = sysinfo(_SI_MACHINE_MODEL,model_str,64); model_str[63] = 0; *system_model = strdup(model_str); /* now lets try to find processor frequency. we will for now ass-u-me that an index of zero will always get us something, which may not actually be the case but lets see how long it takes to be noticed :) raj 2008-03-07 */ ret = pstat_getprocessor(&processor_info, sizeof(processor_info), 1, /* one processor, one processor only please */ 0); if (ret > 0) { #ifdef PSP_MAX_CACHE_LEVELS /* we can get it "directly" but to help make things reconcile with what other tools/platforms support, we shouldn't do a simple integer divide - instead, we should do our division in floating point and then round */ *cpu_frequency = rint((double)processor_info.psp_cpu_frequency / 1000000.0); #else /* older OSes were "known" to be on CPUs where the itick was 1to1 here */ *cpu_frequency = rint(((double)processor_info.psp_iticksperclktick * (double)sysconf(_SC_CLK_TCK)) / 1000000.0); #endif } else *cpu_frequency = -1; *cpu_model = strdup("Unknown CPU Model"); }