Voxia OS v0.0.1
Hobby Project Operating System Targeting x86-64
Loading...
Searching...
No Matches
io.h
Go to the documentation of this file.
1#ifndef __LIBK_IO_H__
2#define __LIBK_IO_H__
3
4#include <type.h>
5
6static inline void outb(uint16_t port, uint8_t value) {
7 asm volatile("outb %0, %1" : : "a"(value), "Nd"(port));
8}
9
10// receives data from a IO port
11static inline uint8_t inb(uint16_t port) {
12 uint8_t ret;
13 asm volatile("inb %1, %0" : "=a"(ret) : "Nd"(port));
14
15 return ret;
16}
17
18static inline void outl(uint16_t port, uint32_t value) {
19 asm volatile("outl %0, %1" : : "a"(value), "Nd"(port));
20}
21
22static inline uint32_t inl(uint16_t port) {
23 uint32_t ret;
24 asm volatile("inl %1, %0" : "=a"(ret) : "Nd"(port));
25
26 return ret;
27}
28
29static inline uint16_t inw(uint16_t port) {
30 uint16_t ret;
31 asm volatile("inw %1, %0" : "=a"(ret) : "Nd"(port));
32
33 return ret;
34}
35
36static inline void outw(uint16_t port, uint16_t value) {
37 asm volatile("outw %0, %1" : : "a"(value), "Nd"(port));
38}
39
40static inline void mmio_outw(uint32_t addr, uint16_t value) {
41 asm volatile("outw %0, %1" : : "a"(value), "Nd"(addr));
42}
43
45 uint16_t ret;
46 asm volatile("inw %1, %0" : "=a"(ret) : "Nd"(addr));
47
48 return ret;
49}
50
51static inline void mmio_outl(uintptr_t addr, uint32_t value) {
52 *((volatile uint32_t*) addr) = value;
53}
54
56 return *((volatile uint32_t*) addr);
57}
58
59static inline void mmio_outll(uintptr_t addr, uint64_t value) {
60 *((volatile uint64_t*) addr) = value;
61}
62
64 return *((volatile uint64_t*) addr);
65}
66
67#endif
volatile uint64_t addr
Definition e1000.hpp:0
static uint8_t inb(uint16_t port)
Definition io.h:11
static void mmio_outl(uintptr_t addr, uint32_t value)
Definition io.h:51
static uint32_t mmio_inl(uintptr_t addr)
Definition io.h:55
static uint64_t mmio_inll(uintptr_t addr)
Definition io.h:63
static void outl(uint16_t port, uint32_t value)
Definition io.h:18
static void mmio_outll(uintptr_t addr, uint64_t value)
Definition io.h:59
static void mmio_outw(uint32_t addr, uint16_t value)
Definition io.h:40
static uint32_t inl(uint16_t port)
Definition io.h:22
static uint16_t inw(uint16_t port)
Definition io.h:29
static void outb(uint16_t port, uint8_t value)
Definition io.h:6
static uint16_t mmio_inw(uint32_t addr)
Definition io.h:44
static void outw(uint16_t port, uint16_t value)
Definition io.h:36
return value
Definition oct2bin.h:22
unsigned short uint16_t
Definition type.h:13
unsigned int uint32_t
Definition type.h:19
unsigned long uintptr_t
Definition type.h:73
unsigned long uint64_t
Definition type.h:25
unsigned char uint8_t
Definition type.h:7