2007-04-25 20:19:35 +02:00
|
|
|
#include "precompiled.h"
|
|
|
|
|
|
|
|
#include "ucpu.h"
|
|
|
|
|
2007-05-17 05:37:49 +02:00
|
|
|
#if OS_MACOSX
|
|
|
|
#include <sys/sysctl.h>
|
|
|
|
#endif
|
|
|
|
|
2007-05-02 14:07:08 +02:00
|
|
|
int ucpu_IsThrottlingPossible()
|
2007-04-25 20:19:35 +02:00
|
|
|
{
|
|
|
|
return -1; // don't know
|
|
|
|
}
|
|
|
|
|
2007-05-02 14:07:08 +02:00
|
|
|
int ucpu_NumPackages()
|
2007-04-25 20:19:35 +02:00
|
|
|
{
|
2007-05-17 05:37:49 +02:00
|
|
|
#if OS_MACOSX
|
|
|
|
int mib[]={CTL_HW, HW_NCPU};
|
|
|
|
int ncpus;
|
|
|
|
size_t len = sizeof(ncpus);
|
|
|
|
if (sysctl(mib, 2, &ncpus, &len, NULL, 0) == -1)
|
|
|
|
return -1; // don't know
|
|
|
|
else
|
|
|
|
return ncpus;
|
|
|
|
#else
|
2007-04-25 20:19:35 +02:00
|
|
|
long res = sysconf(_SC_NPROCESSORS_CONF);
|
|
|
|
if (res == -1)
|
|
|
|
return 1;
|
|
|
|
else
|
|
|
|
return (int)res;
|
2007-05-17 05:37:49 +02:00
|
|
|
#endif
|
2007-04-25 20:19:35 +02:00
|
|
|
}
|
|
|
|
|
2007-05-02 14:07:08 +02:00
|
|
|
double ucpu_ClockFrequency()
|
2007-04-25 20:19:35 +02:00
|
|
|
{
|
|
|
|
return -1; // don't know
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// apparently not possible on non-Windows OSes because they seem to lack
|
|
|
|
// a CPU affinity API. see sysdep.h comment.
|
2007-05-02 14:07:08 +02:00
|
|
|
LibError ucpu_CallByEachCPU(CpuCallback cb, void* param)
|
2007-04-25 20:19:35 +02:00
|
|
|
{
|
|
|
|
UNUSED2(cb);
|
|
|
|
|
|
|
|
/*
|
|
|
|
cpu_set_t currentCPU;
|
|
|
|
|
|
|
|
while ( j < sysNumProcs )
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
CPU_ZERO(¤tCPU);
|
|
|
|
|
|
|
|
CPU_SET(j, ¤tCPU);
|
|
|
|
|
|
|
|
if ( sched_setaffinity (0, sizeof (currentCPU), ¤tCPU)
|
|
|
|
|
|
|
|
== 0 )
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
sleep(0); // Ensure system to switch to the right
|
|
|
|
*/
|
|
|
|
|
|
|
|
return ERR::NO_SYS;
|
|
|
|
}
|