blob: a2c106350c9f3fd0780da7e1743bbec7206a6693 [file] [log] [blame]
#include <ros/arch/arch.h>
#include <ros/arch/msr-index.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <utest/utest.h>
TEST_SUITE("DEVARCH");
/* <--- Begin definition of test cases ---> */
static bool test_msr(void)
{
static const int max_cpus = MAX_NUM_CORES;
int fd = open("#arch/msr", O_RDWR);
uint64_t *values = malloc(max_cpus * sizeof(uint64_t));
uint64_t tmp = 0;
ssize_t n;
UT_ASSERT_M("Failed to open MSR device file (#arch/msr)", fd >= 0);
UT_ASSERT_M("Failed to allocated MSR values memory", values);
n = pread(fd, values, max_cpus * sizeof(uint64_t), MSR_IA32_TSC);
UT_ASSERT_M("Failed to read MSR values from 0x10", n > 0);
n = pread(fd, values, max_cpus * sizeof(uint64_t),
MSR_CORE_PERF_FIXED_CTR0);
UT_ASSERT_M("Failed to read MSR values from 0x309", n > 0);
n = pwrite(fd, &tmp, sizeof(uint64_t), MSR_CORE_PERF_FIXED_CTR0);
UT_ASSERT_M("Failed to write MSR values to 0x309",
n == sizeof(uint64_t));
free(values);
close(fd);
return true;
}
static bool test_mem(void)
{
int fd = open("#arch/realmem", O_RDONLY);
ssize_t n;
char buf[256];
UT_ASSERT_M("Failed to open memory device file (#arch/mem)", fd >= 0);
n = pread(fd, buf, sizeof(buf), 0);
UT_ASSERT_M("Failed to read real mode memory from offset 0",
n == sizeof(buf));
close(fd);
return true;
}
/* <--- End definition of test cases ---> */
static struct utest utests[] = {
UTEST_REG(msr),
UTEST_REG(mem)
};
static const int num_utests = sizeof(utests) / sizeof(struct utest);
int main(int argc, char *argv[])
{
RUN_TEST_SUITE(utests, num_utests, argv + 1, argc - 1);
}