Formatting.
[pintos-anon] / src / threads / io.h
1 #ifndef HEADER_IO_H
2 #define HEADER_IO_H 1
3
4 #include <stddef.h>
5 #include <stdint.h>
6
7 static inline uint8_t
8 inb (uint16_t port)
9 {
10   uint8_t data;
11   asm volatile ("inb %w1,%0" : "=a" (data) : "d" (port));
12   return data;
13 }
14
15 static inline void
16 insb (uint16_t port, void *addr, size_t cnt)
17 {
18   asm volatile ("cld; repne; insb"
19                 : "=D" (addr), "=c" (cnt)
20                 : "d" (port), "0" (addr), "1" (cnt)
21                 : "memory", "cc");
22 }
23
24 static inline uint16_t
25 inw (uint16_t port)
26 {
27   uint16_t data;
28   asm volatile ("inw %w1,%0" : "=a" (data) : "d" (port));
29   return data;
30 }
31
32 static inline void
33 insw (uint16_t port, void *addr, size_t cnt)
34 {
35   asm volatile ("cld; repne; insw"
36                 : "=D" (addr), "=c" (cnt)
37                 : "d" (port), "0" (addr), "1" (cnt)
38                 : "memory", "cc");
39 }
40
41 static inline uint32_t
42 inl (uint16_t port)
43 {
44   uint32_t data;
45   asm volatile ("inl %w1,%0" : "=a" (data) : "d" (port));
46   return data;
47 }
48
49 static inline void
50 insl(uint16_t port, void *addr, size_t cnt)
51 {
52   asm volatile ("cld; repne; insl"
53                 : "=D" (addr), "=c" (cnt)
54                 : "d" (port), "0" (addr), "1" (cnt)
55                 : "memory", "cc");
56 }
57
58 static inline void
59 outb(uint16_t port, uint8_t data)
60 {
61   asm volatile ("outb %0,%w1" : : "a" (data), "d" (port));
62 }
63
64 static inline void
65 outsb (uint16_t port, const void *addr, size_t cnt)
66 {
67   asm volatile ("cld; repne; outsb"
68                 : "=S" (addr), "=c" (cnt)
69                 : "d" (port), "0" (addr), "1" (cnt)
70                 : "cc");
71 }
72
73 static inline void
74 outw (uint16_t port, uint16_t data)
75 {
76   asm volatile ("outw %0,%w1" : : "a" (data), "d" (port));
77 }
78
79 static inline void
80 outsw (uint16_t port, const void *addr, size_t cnt)
81 {
82   asm volatile ("cld; repne; outsw"
83                 : "=S" (addr), "=c" (cnt)
84                 : "d" (port), "0" (addr), "1" (cnt)
85                 : "cc");
86 }
87
88 static inline void
89 outl (uint16_t port, uint32_t data)
90 {
91   asm volatile ("outl %0,%w1" : : "a" (data), "d" (port));
92 }
93
94 #endif /* io.h */