fix bugs found in brk & add simple security checks on lx_free
[lunaix-os.git] / lunaix-os / includes / hal / io.h
1 #ifndef __LUNAIX_IO_H
2 #define __LUNAIX_IO_H
3
4 #include <stdint.h>
5
6 static inline uint8_t io_inb(int port) {
7     uint8_t data;
8     asm volatile("inb %w1,%0" : "=a" (data) : "d" (port));
9     return data;
10 }
11
12 static inline void io_insb(int port, void* addr, int cnt) {
13     asm volatile("cld\n\trepne\n\tinsb"
14                  : "=D" (addr), "=c" (cnt)
15                  : "d" (port), "0" (addr), "1" (cnt)
16                  : "memory", "cc");
17 }
18
19 static inline uint16_t io_inw(int port) {
20     uint16_t data;
21     asm volatile("inw %w1,%0" : "=a" (data) : "d" (port));
22     return data;
23 }
24
25 static inline void io_insw(int port, void* addr, int cnt) {
26     asm volatile("cld\n\trepne\n\tinsw"
27                  : "=D" (addr), "=c" (cnt)
28                  : "d" (port), "0" (addr), "1" (cnt)
29                  : "memory", "cc");
30 }
31
32 static inline uint32_t io_inl(int port) {
33     uint32_t data;
34     asm volatile("inl %w1,%0" : "=a" (data) : "d" (port));
35     return data;
36 }
37
38 static inline void io_insl(int port, void* addr, int cnt) {
39     asm volatile("cld\n\trepne\n\tinsl"
40                  : "=D" (addr), "=c" (cnt)
41                  : "d" (port), "0" (addr), "1" (cnt)
42                  : "memory", "cc");
43 }
44
45 static inline void io_outb(int port, uint8_t data) {
46     asm volatile("outb %0,%w1" : : "a" (data), "d" (port));
47 }
48
49 static inline void io_outsb(int port, const void* addr, int cnt) {
50     asm volatile("cld\n\trepne\n\toutsb"
51                  : "=S" (addr), "=c" (cnt)
52                  : "d" (port), "0" (addr), "1" (cnt)
53                  : "cc");
54 }
55
56 static inline void io_outw(int port, uint16_t data) {
57     asm volatile("outw %0,%w1" : : "a" (data), "d" (port));
58 }
59
60 static inline void io_outsw(int port, const void* addr, int cnt) {
61     asm volatile("cld\n\trepne\n\toutsw"
62                  : "=S" (addr), "=c" (cnt)
63                  : "d" (port), "0" (addr), "1" (cnt)
64                  : "cc");
65 }
66
67 static inline void io_outsl(int port, const void* addr, int cnt) {
68     asm volatile("cld\n\trepne\n\toutsl"
69                  : "=S" (addr), "=c" (cnt)
70                  : "d" (port), "0" (addr), "1" (cnt)
71                  : "cc");
72 }
73
74 static inline void io_outl(int port, uint32_t data) {
75     asm volatile("outl %0,%w1" : : "a" (data), "d" (port));
76 }
77
78 #endif /* __LUNAIX_IO_H */