diff options
| author | Alexey Gavrilov <rebovas@yahoo.com> | 2024-05-24 14:07:47 +0700 |
|---|---|---|
| committer | Alexey Gavrilov <rebovas@yahoo.com> | 2024-05-24 14:07:47 +0700 |
| commit | 5fbf41e967ed8e413ecf1e6abb72e8d285169df4 (patch) | |
| tree | 48e25b199ae3459e12c7202f7b18a37cd087bf9b /arch/x86/port | |
| parent | 0a50b1758fd3da118408fd724825d0a50a9ecf17 (diff) | |
Pic + Tuple + refactor PrimaryInitialization class
Diffstat (limited to 'arch/x86/port')
| -rw-r--r-- | arch/x86/port/Operations | 7 | ||||
| -rw-r--r-- | arch/x86/port/PortOps.cpp | 62 | ||||
| -rw-r--r-- | arch/x86/port/PortOps.h | 26 |
3 files changed, 95 insertions, 0 deletions
diff --git a/arch/x86/port/Operations b/arch/x86/port/Operations new file mode 100644 index 0000000..4812518 --- /dev/null +++ b/arch/x86/port/Operations @@ -0,0 +1,7 @@ +#ifndef PORTOPEARATION_H +#define PORTOPEARATION_H + +#include "PortOps.h" + +#endif + diff --git a/arch/x86/port/PortOps.cpp b/arch/x86/port/PortOps.cpp new file mode 100644 index 0000000..4b418dd --- /dev/null +++ b/arch/x86/port/PortOps.cpp @@ -0,0 +1,62 @@ +#include "PortOps.h" + + +void PortOps::outb(portadr port, regb value) +{ + asm("outb %b0, %w1" + : + : "a"(value), "Nd"(port) + : "memory"); +}; + +void PortOps::outw(portadr port, regw value) +{ + asm("out %w0, %w1" + : + : "a"(value), "Nd"(port) + : "memory"); +}; + +void PortOps::outl(portadr port, regl value) +{ + asm("out %k0, %w1" + : + : "a"(value), "Nd"(port) + : "memory"); +}; + +regb PortOps::inb(portadr port) +{ + regb res; + + asm("in %w1, %b0" + : "=a"(res) + : "Nd"(port) + : "memory"); + + return res; +}; + +regw PortOps::inw(portadr port) +{ + regw res; + + asm("in %w1, %w0" + : "=a"(res) + : "Nd"(port) + : "memory"); + + return res; +}; + +regl PortOps::inl(portadr port) +{ + regl res; + + asm("in %w1, %k0" + : "=a"(res) + : "Nd"(port) + : "memory"); + + return res; +}; diff --git a/arch/x86/port/PortOps.h b/arch/x86/port/PortOps.h new file mode 100644 index 0000000..7db3a5f --- /dev/null +++ b/arch/x86/port/PortOps.h @@ -0,0 +1,26 @@ +#ifndef PORT_H +#define PORT_H + +#include <types.h> + + +using regb = uint8; +using regw = uint16; +using regl = uint32; +using portadr = uint16; + +class PortOps +{ + public: + static void outb(portadr port, regb value); + static void outw(portadr port, regw value); + static void outl(portadr port, regl value); + // Get byte from port + static regb inb(portadr port); + // Get word from port + static regw inw(portadr port); + // Get double word from port + static regl inl(portadr port); +}; + +#endif |
