AquilaOS documentation
How it works, and its code
Loading...
Searching...
No Matches
msr.h
Go to the documentation of this file.
1#ifndef _X86_MSR_H
2#define _X86_MSR_H
3
4#include <core/system.h>
5
6/* x86: the model-specific registers (MSRs). */
7
8/* Reads an MSR. */
9static inline uint64_t msr_read(uint32_t msr)
10{
11 uint32_t lo, hi;
12 asm volatile("rdmsr" : "=a"(lo), "=d"(hi) : "c"(msr));
13 return ((uint64_t)hi << 32) | lo;
14}
15
16/* Writes an MSR. */
17static inline void msr_write(uint32_t msr, uint64_t val)
18{
19 uint32_t lo = val & 0xFFFFFFFF;
20 uint32_t hi = val >> 32;
21 asm volatile("wrmsr" : : "a"(lo), "d"(hi), "c"(msr));
22}
23
24#define APIC_BASE 0x1B /* the local APIC's base address MSR */
25
26#endif /* ! _X86_MSR_H */
static void msr_write(uint32_t msr, uint64_t val)
Definition msr.h:17
static uint64_t msr_read(uint32_t msr)
Definition msr.h:9
unsigned int uint32_t
Definition stddef.h:22
unsigned long long int uint64_t
Definition stddef.h:23