18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
28c2ecf20Sopenharmony_ci#include <math.h>
38c2ecf20Sopenharmony_ci#include <unistd.h>
48c2ecf20Sopenharmony_ci#include <stdio.h>
58c2ecf20Sopenharmony_ci#include <stdlib.h>
68c2ecf20Sopenharmony_ci#include <sys/types.h>
78c2ecf20Sopenharmony_ci#include <sys/stat.h>
88c2ecf20Sopenharmony_ci#include <fcntl.h>
98c2ecf20Sopenharmony_ci#include <sys/timeb.h>
108c2ecf20Sopenharmony_ci#include <sched.h>
118c2ecf20Sopenharmony_ci#include <errno.h>
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_ciint main(int argc, char **argv) {
158c2ecf20Sopenharmony_ci	int cpu, fd;
168c2ecf20Sopenharmony_ci	long long msr;
178c2ecf20Sopenharmony_ci	char msr_file_name[64];
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_ci	if (argc != 2)
208c2ecf20Sopenharmony_ci		return 1;
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_ci	errno = 0;
238c2ecf20Sopenharmony_ci	cpu = strtol(argv[1], (char **) NULL, 10);
248c2ecf20Sopenharmony_ci
258c2ecf20Sopenharmony_ci	if (errno)
268c2ecf20Sopenharmony_ci		return 1;
278c2ecf20Sopenharmony_ci
288c2ecf20Sopenharmony_ci	sprintf(msr_file_name, "/dev/cpu/%d/msr", cpu);
298c2ecf20Sopenharmony_ci	fd = open(msr_file_name, O_RDONLY);
308c2ecf20Sopenharmony_ci
318c2ecf20Sopenharmony_ci	if (fd == -1) {
328c2ecf20Sopenharmony_ci		perror("Failed to open");
338c2ecf20Sopenharmony_ci		return 1;
348c2ecf20Sopenharmony_ci	}
358c2ecf20Sopenharmony_ci
368c2ecf20Sopenharmony_ci	pread(fd, &msr,  sizeof(msr), 0x199);
378c2ecf20Sopenharmony_ci
388c2ecf20Sopenharmony_ci	printf("msr 0x199: 0x%llx\n", msr);
398c2ecf20Sopenharmony_ci	return 0;
408c2ecf20Sopenharmony_ci}
41