Index: uspace/lib/c/arch/abs32le/include/libarch/ddi.h
===================================================================
--- uspace/lib/c/arch/abs32le/include/libarch/ddi.h	(revision eca820c68a88b21d4b9fef3a00447516bc3f7684)
+++ uspace/lib/c/arch/abs32le/include/libarch/ddi.h	(revision f5b6fb534ad9788da66bfd5a40acf7fd8f6effa1)
@@ -50,4 +50,9 @@
 }
 
+static inline void arch_pio_write_64(ioport64_t *port, uint64_t v)
+{
+	*port = v;
+}
+
 static inline uint8_t arch_pio_read_8(const ioport8_t *port)
 {
@@ -65,3 +70,8 @@
 }
 
+static inline uint64_t arch_pio_read_64(const ioport64_t *port)
+{
+	return *port;
+}
+
 #endif
Index: uspace/lib/c/arch/arm32/include/libarch/ddi.h
===================================================================
--- uspace/lib/c/arch/arm32/include/libarch/ddi.h	(revision eca820c68a88b21d4b9fef3a00447516bc3f7684)
+++ uspace/lib/c/arch/arm32/include/libarch/ddi.h	(revision f5b6fb534ad9788da66bfd5a40acf7fd8f6effa1)
@@ -51,4 +51,9 @@
 }
 
+static inline void arch_pio_write_64(ioport64_t *port, uint64_t v)
+{
+	*port = v;
+}
+
 static inline uint8_t arch_pio_read_8(const ioport8_t *port)
 {
@@ -66,3 +71,8 @@
 }
 
+static inline uint64_t arch_pio_read_64(const ioport64_t *port)
+{
+	return *port;
+}
+
 #endif
Index: uspace/lib/c/arch/ia32/include/libarch/ddi.h
===================================================================
--- uspace/lib/c/arch/ia32/include/libarch/ddi.h	(revision eca820c68a88b21d4b9fef3a00447516bc3f7684)
+++ uspace/lib/c/arch/ia32/include/libarch/ddi.h	(revision f5b6fb534ad9788da66bfd5a40acf7fd8f6effa1)
@@ -86,4 +86,9 @@
 }
 
+static inline uint64_t arch_pio_read_64(const ioport64_t *port)
+{
+	return (uint64_t) *port;
+}
+
 static inline void arch_pio_write_8(ioport8_t *port, uint8_t val)
 {
@@ -119,3 +124,8 @@
 }
 
+static inline void arch_pio_write_64(ioport64_t *port, uint64_t val)
+{
+	*port = val;
+}
+
 #endif
Index: uspace/lib/c/arch/ia64/include/libarch/ddi.h
===================================================================
--- uspace/lib/c/arch/ia64/include/libarch/ddi.h	(revision eca820c68a88b21d4b9fef3a00447516bc3f7684)
+++ uspace/lib/c/arch/ia64/include/libarch/ddi.h	(revision f5b6fb534ad9788da66bfd5a40acf7fd8f6effa1)
@@ -94,4 +94,12 @@
 }
 
+static inline void arch_pio_write_64(ioport64_t *port, uint64_t v)
+{
+	*port = v;
+
+	asm volatile ("mf\n" ::: "memory");
+	asm volatile ("mf.a\n" ::: "memory");
+}
+
 static inline uint8_t arch_pio_read_8(const ioport8_t *port)
 {
@@ -154,4 +162,17 @@
 }
 
+static inline uint64_t arch_pio_read_64(const ioport64_t *port)
+{
+	uint64_t v;
+
+	asm volatile ("mf\n" ::: "memory");
+
+	v = *port;
+
+	asm volatile ("mf.a\n" ::: "memory");
+
+	return v;
+}
+
 #endif
 
Index: uspace/lib/c/arch/mips32/include/libarch/ddi.h
===================================================================
--- uspace/lib/c/arch/mips32/include/libarch/ddi.h	(revision eca820c68a88b21d4b9fef3a00447516bc3f7684)
+++ uspace/lib/c/arch/mips32/include/libarch/ddi.h	(revision f5b6fb534ad9788da66bfd5a40acf7fd8f6effa1)
@@ -51,4 +51,9 @@
 }
 
+static inline void arch_pio_write_64(ioport64_t *port, uint64_t v)
+{
+	*port = v;
+}
+
 static inline uint8_t arch_pio_read_8(const ioport8_t *port)
 {
@@ -66,3 +71,8 @@
 }
 
+static inline uint64_t arch_pio_read_64(const ioport64_t *port)
+{
+	return *port;
+}
+
 #endif
Index: uspace/lib/c/arch/ppc32/include/libarch/ddi.h
===================================================================
--- uspace/lib/c/arch/ppc32/include/libarch/ddi.h	(revision eca820c68a88b21d4b9fef3a00447516bc3f7684)
+++ uspace/lib/c/arch/ppc32/include/libarch/ddi.h	(revision f5b6fb534ad9788da66bfd5a40acf7fd8f6effa1)
@@ -51,4 +51,9 @@
 }
 
+static inline void arch_pio_write_64(ioport64_t *port, uint64_t v)
+{
+	*port = v;
+}
+
 static inline uint8_t arch_pio_read_8(const ioport8_t *port)
 {
@@ -66,3 +71,8 @@
 }
 
+static inline uint64_t arch_pio_read_64(const ioport64_t *port)
+{
+	return *port;
+}
+
 #endif
Index: uspace/lib/c/arch/riscv64/include/libarch/ddi.h
===================================================================
--- uspace/lib/c/arch/riscv64/include/libarch/ddi.h	(revision eca820c68a88b21d4b9fef3a00447516bc3f7684)
+++ uspace/lib/c/arch/riscv64/include/libarch/ddi.h	(revision f5b6fb534ad9788da66bfd5a40acf7fd8f6effa1)
@@ -50,4 +50,9 @@
 }
 
+static inline void arch_pio_write_64(ioport64_t *port, uint64_t v)
+{
+	*port = v;
+}
+
 static inline uint8_t arch_pio_read_8(const ioport8_t *port)
 {
@@ -65,3 +70,8 @@
 }
 
+static inline uint64_t arch_pio_read_64(const ioport64_t *port)
+{
+	return *port;
+}
+
 #endif
Index: uspace/lib/c/arch/sparc64/include/libarch/ddi.h
===================================================================
--- uspace/lib/c/arch/sparc64/include/libarch/ddi.h	(revision eca820c68a88b21d4b9fef3a00447516bc3f7684)
+++ uspace/lib/c/arch/sparc64/include/libarch/ddi.h	(revision f5b6fb534ad9788da66bfd5a40acf7fd8f6effa1)
@@ -62,4 +62,11 @@
 }
 
+static inline void arch_pio_write_64(ioport64_t *port, uint64_t v)
+{
+	*port = v;
+	memory_barrier();
+}
+
+
 static inline uint8_t arch_pio_read_8(const ioport8_t *port)
 {
@@ -92,3 +99,13 @@
 }
 
+static inline uint64_t arch_pio_read_64(const ioport64_t *port)
+{
+	uint64_t rv;
+
+	rv = *port;
+	memory_barrier();
+
+	return rv;
+}
+
 #endif
