aboutsummaryrefslogtreecommitdiff
path: root/include/ioport.h
blob: 08a8dbd9b5d36c67d295bba2a230eaa357832c4e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#ifndef BIOS_IOPORT_H
#define BIOS_IOPORT_H 1

static inline void outsb(unsigned short port, void *buf, int len)
{
	asm volatile("rep outsb %%ds:(%0), %3" : "=S" (buf), "=c" (len) : "m"(buf), "Nd"(port), "0" (buf), "1" (len));
}

static inline void insb(void *buf, unsigned short port, int len)
{
	asm volatile("rep insb %3, %%es:(%0)" : "=D" (buf), "=c" (len), "=m"(buf) : "Nd"(port), "0" (buf), "1" (len));
}

static inline unsigned char inb(unsigned short port)
{
	unsigned char val;
	asm volatile("inb %1, %0" : "=a"(val) : "Nd"(port));
	return val;
}

static inline unsigned short inw(unsigned short port)
{
	unsigned short val;
	asm volatile("inw %1, %0" : "=a"(val) : "Nd"(port));
	return val;
}

static inline unsigned inl(unsigned short port)
{
	unsigned val;
	asm volatile("inl %1, %0" : "=a"(val) : "Nd"(port));
	return val;
}

static inline void outb(unsigned short port, unsigned char val)
{
	asm volatile("outb %0, %1" : : "a"(val), "Nd"(port));
}

static inline void outw(unsigned short port, unsigned short val)
{
	asm volatile("outw %0, %1" : : "a"(val), "Nd"(port));
}

static inline void outl(unsigned short port, unsigned val)
{
	asm volatile("outl %0, %1" : : "a"(val), "Nd"(port));
}

#endif