1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#pragma once
#define READ_MSR(reg,high,low) \
asm volatile( \
"mov %2, %%ecx;rdmsr \n\t" \
"mov %%edx, %0 \n\t" \
"mov %%eax, %1" \
: "=m" (high), "=m" (low) :"i" (reg))
#define WRITE_MSR(reg,high,low) \
asm volatile( \
"mov %1, %%edx \n\t" \
"mov %2, %%eax \n\t" \
"mov %0, %%ecx;wrmsr"::"i" (reg), "m" (high), "m" (low))
#define outb(port,value) \
asm volatile ("outb %%al, %%dx" :: "a"(value), "d" (port) )
#define outbj(port,value) \
asm volatile ("outb %%al, %%dx;" :: "a" (value), "d"(port) )
#define inb(port,dst) \
asm volatile ("inb %%dx, %%al": "=a" (dst) : "d" (port))
|