blob: 051ef3bb133b92378490c828320789edee1e1f68 [file] [log] [blame]
Patrick Georgiac959032020-05-05 22:49:26 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Stefan Reinauer37f39352009-09-01 10:03:01 +00002
3#include <sys/types.h>
4#include <sys/stat.h>
5#include <fcntl.h>
6#include <unistd.h>
7#include <string.h>
8#include <errno.h>
9
10#include "msrtool.h"
11
Stefan Reinauer9018b6e2011-03-14 09:08:27 +000012/* This Darwin support requires DirectHW, which is available at
Paul Menzela8843de2017-06-05 12:33:23 +020013 * https://www.coreboot.org/DirectHW
Peter Stuge34b876c2009-11-16 17:29:22 +000014 */
15
Stefan Reinauer37f39352009-09-01 10:03:01 +000016int darwin_probe(const struct sysdef *system)
17{
18#ifdef __DARWIN__
19 return iopl(3) == 0;
20#else
21 return 0;
22#endif
23}
24
25int darwin_open(uint8_t cpu, enum SysModes mode)
26{
Stefan Reinauer84d69f72009-10-05 10:23:36 +000027#ifdef __DARWIN__
Stefan Reinauer37f39352009-09-01 10:03:01 +000028 if (cpu > 0) {
29 fprintf(stderr, "%s: only core 0 is supported on Mac OS X right now.\n", __func__);
30 return 0;
31 }
32 return 1;
Stefan Reinauer84d69f72009-10-05 10:23:36 +000033#else
34 return 0;
35#endif
Stefan Reinauer37f39352009-09-01 10:03:01 +000036}
37
38int darwin_close(uint8_t cpu)
39{
40 return 1;
41}
42
43int darwin_rdmsr(uint8_t cpu, uint32_t addr, struct msr *val)
44{
Stefan Reinauer84d69f72009-10-05 10:23:36 +000045#ifdef __DARWIN__
Stefan Reinauer37f39352009-09-01 10:03:01 +000046 msr_t msr;
47
48 msr = rdmsr(addr);
49
50 val->hi = msr.lo;
51 val->lo = msr.hi;
52 return 1;
Stefan Reinauer84d69f72009-10-05 10:23:36 +000053#else
54 return 0;
55#endif
Stefan Reinauer37f39352009-09-01 10:03:01 +000056}