AquilaOS documentation
How it works, and its code
Toggle main menu visibility
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. */
9
static
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. */
17
static
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 */
system.h
msr_write
static void msr_write(uint32_t msr, uint64_t val)
Definition
msr.h:17
msr_read
static uint64_t msr_read(uint32_t msr)
Definition
msr.h:9
uint32_t
unsigned int uint32_t
Definition
stddef.h:22
uint64_t
unsigned long long int uint64_t
Definition
stddef.h:23
kernel
arch
i386
include
cpu
msr.h
Generated by
1.18.0