mirror of
https://github.com/anrieff/libcpuid
synced 2025-10-03 11:01:30 +00:00
commit
1168b8dd68
1 changed files with 14 additions and 13 deletions
|
@ -33,6 +33,8 @@
|
||||||
#include "libcpuid_internal.h"
|
#include "libcpuid_internal.h"
|
||||||
#include "rdtsc.h"
|
#include "rdtsc.h"
|
||||||
|
|
||||||
|
#define MSR_PATH_LEN 32
|
||||||
|
|
||||||
#if defined (__linux__) || defined (__gnu_linux__)
|
#if defined (__linux__) || defined (__gnu_linux__)
|
||||||
/* Assuming linux with /dev/cpu/x/msr: */
|
/* Assuming linux with /dev/cpu/x/msr: */
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
@ -65,7 +67,7 @@ struct msr_driver_t* cpu_msr_driver_open(void)
|
||||||
|
|
||||||
struct msr_driver_t* cpu_msr_driver_open_core(unsigned core_num)
|
struct msr_driver_t* cpu_msr_driver_open_core(unsigned core_num)
|
||||||
{
|
{
|
||||||
char msr[32];
|
char msr[MSR_PATH_LEN];
|
||||||
struct msr_driver_t* handle;
|
struct msr_driver_t* handle;
|
||||||
if (core_num >= cpuid_get_total_cpus()) {
|
if (core_num >= cpuid_get_total_cpus()) {
|
||||||
set_error(ERR_INVCNB);
|
set_error(ERR_INVCNB);
|
||||||
|
@ -75,7 +77,7 @@ struct msr_driver_t* cpu_msr_driver_open_core(unsigned core_num)
|
||||||
set_error(ERR_NO_RDMSR);
|
set_error(ERR_NO_RDMSR);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
sprintf(msr, "/dev/cpu/%u/msr", core_num);
|
snprintf(msr, MSR_PATH_LEN, "/dev/cpu/%u/msr", core_num);
|
||||||
if(!load_driver(msr)) {
|
if(!load_driver(msr)) {
|
||||||
set_error(ERR_NO_DRIVER);
|
set_error(ERR_NO_DRIVER);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -149,7 +151,7 @@ struct msr_driver_t* cpu_msr_driver_open(void)
|
||||||
|
|
||||||
struct msr_driver_t* cpu_msr_driver_open_core(unsigned core_num)
|
struct msr_driver_t* cpu_msr_driver_open_core(unsigned core_num)
|
||||||
{
|
{
|
||||||
char msr[32];
|
char msr[MSR_PATH_LEN];
|
||||||
struct msr_driver_t* handle;
|
struct msr_driver_t* handle;
|
||||||
if (core_num >= cpuid_get_total_cpus()) {
|
if (core_num >= cpuid_get_total_cpus()) {
|
||||||
set_error(ERR_INVCNB);
|
set_error(ERR_INVCNB);
|
||||||
|
@ -159,7 +161,7 @@ struct msr_driver_t* cpu_msr_driver_open_core(unsigned core_num)
|
||||||
set_error(ERR_NO_RDMSR);
|
set_error(ERR_NO_RDMSR);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
sprintf(msr, "/dev/cpuctl%u", core_num);
|
snprintf(msr, MSR_PATH_LEN, "/dev/cpuctl%u", core_num);
|
||||||
if(!load_driver(msr)) {
|
if(!load_driver(msr)) {
|
||||||
set_error(ERR_NO_DRIVER);
|
set_error(ERR_NO_DRIVER);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -1021,7 +1023,7 @@ int msr_serialize_raw_data(struct msr_driver_t* handle, const char* filename)
|
||||||
if (handle == NULL)
|
if (handle == NULL)
|
||||||
return set_error(ERR_HANDLE);
|
return set_error(ERR_HANDLE);
|
||||||
|
|
||||||
if (!strcmp(filename, ""))
|
if ((filename == NULL) || !strcmp(filename, ""))
|
||||||
f = stdout;
|
f = stdout;
|
||||||
else
|
else
|
||||||
f = fopen(filename, "wt");
|
f = fopen(filename, "wt");
|
||||||
|
@ -1031,22 +1033,21 @@ int msr_serialize_raw_data(struct msr_driver_t* handle, const char* filename)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
fprintf(f, "CPU is %s %s, stock clock is %dMHz.\n", id.vendor_str, id.brand_str, cpu_clock_measure(250, 1));
|
fprintf(f, "CPU is %s %s, stock clock is %dMHz.\n", id.vendor_str, id.brand_str, cpu_clock_measure(250, 1));
|
||||||
if (id.vendor == VENDOR_INTEL)
|
switch (id.vendor) {
|
||||||
msr = intel_msr;
|
case VENDOR_AMD: msr = amd_msr; break;
|
||||||
else if (id.vendor == VENDOR_AMD)
|
case VENDOR_INTEL: msr = intel_msr; break;
|
||||||
msr = amd_msr;
|
default: return set_error(ERR_CPU_UNKN);
|
||||||
else
|
}
|
||||||
return set_error(ERR_CPU_UNKN);
|
|
||||||
|
|
||||||
for (i = 0; msr[i] != CPU_INVALID_VALUE; i++) {
|
for (i = 0; msr[i] != CPU_INVALID_VALUE; i++) {
|
||||||
cpu_rdmsr(handle, msr[i], ®);
|
cpu_rdmsr(handle, msr[i], ®);
|
||||||
fprintf(f, "msr[%#08x]=", msr[i]);
|
fprintf(f, "msr[%#08x]=", msr[i]);
|
||||||
for (j = 56; j >= 0; j -= 8)
|
for (j = 56; j >= 0; j -= 8)
|
||||||
fprintf(f, "%02x ", (int) (reg >> j) & 0xff);
|
fprintf(f, "%02x ", (int) (reg >> j) & 0xff);
|
||||||
printf("\n");
|
fprintf(f, "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(filename, ""))
|
if ((filename != NULL) && strcmp(filename, ""))
|
||||||
fclose(f);
|
fclose(f);
|
||||||
return set_error(ERR_OK);
|
return set_error(ERR_OK);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue