aboutsummaryrefslogtreecommitdiff
path: root/i686/include/sys/io.h
blob: 4ff5d85cf78c71e24edfd2607558e67aee1d30f7 (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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#pragma once

/* port listings */
enum UART {
  COM1 = 0x3f8,
  COM2 = 0x2f8,
  COM3 = 0x3e8,
  COM4 = 0x2e8,
  COM5 = 0x5f8,
  COM6 = 0x4f8,
  COM7 = 0x5e8,
  COM8 = 0x4e8
};

static __inline__ void
outb(unsigned char val, unsigned short port)
{
  __asm__("outb %0,%1" : : "a"(val), "dN"(port));
}

static __inline__ void
outw(unsigned short val, unsigned short port)
{
  __asm__("outw %0,%1" : : "a"(val), "dN"(port));
}

static __inline__ void
outl(unsigned int val, unsigned short port)
{
  __asm__("outl %0,%1" : : "a"(val), "dN"(port));
}

static __inline__ unsigned char
inb(unsigned short port)
{
  unsigned char val;
  __asm__("inb %1,%0" : "=a"(val) : "dN"(port));
  return val;
}

static __inline__ unsigned short
inw(unsigned short port)
{
  unsigned short val;
  __asm__("inw %1,%0" : "=a"(val) : "dN"(port));
  return val;
}

static __inline__ unsigned int
inl(unsigned short port)
{
  unsigned int val;
  __asm__("inl %1,%0" : "=a"(val) : "dN"(port));
  return val;
}

static __inline__ void
outsb(unsigned short port, const void *__buf, unsigned long __n)
{
  __asm__("cld; rep; outsb" : "+S"(__buf), "+c"(__n) : "d"(port));
}

static __inline__ void
outsw(unsigned short port, const void *__buf, unsigned long __n)
{
  __asm__("cld; rep; outsw" : "+S"(__buf), "+c"(__n) : "d"(port));
}

static __inline__ void
outsl(unsigned short port, const void *__buf, unsigned long __n)
{
  __asm__("cld; rep; outsl" : "+S"(__buf), "+c"(__n) : "d"(port));
}

static __inline__ void
insb(unsigned short port, void *__buf, unsigned long __n)
{
  __asm__("cld; rep; insb" : "+D"(__buf), "+c"(__n) : "d"(port));
}

static __inline__ void
insw(unsigned short port, void *__buf, unsigned long __n)
{
  __asm__("cld; rep; insw" : "+D"(__buf), "+c"(__n) : "d"(port));
}

static __inline__ void
insl(unsigned short port, void *__buf, unsigned long __n)
{
  __asm__("cld; rep; insl" : "+D"(__buf), "+c"(__n) : "d"(port));
}