Index: uspace/lib/c/generic/ddi.c
===================================================================
--- uspace/lib/c/generic/ddi.c	(revision 2498b9515ac2e60a64adc171d59e3a1f3aaef339)
+++ uspace/lib/c/generic/ddi.c	(revision fbfe59dafcc4f7e06cbbf09e2d88ed3e434b4a33)
@@ -220,8 +220,10 @@
 /** Enable PIO for specified HW resource wrt. to the PIO window.
  *
- * @param win      PIO window. May be NULL if the resources are known to be
- *                 absolute.
- * @param res      Resources specifying the I/O range wrt. to the PIO window.
- * @param virt     Virtual address for application's PIO operations.
+ * @param win        PIO window. May be NULL if the resources are known to be
+ *                   absolute.
+ * @param res        Resources specifying the I/O range wrt. to the PIO window.
+ * @param[out] virt  Virtual address for application's PIO operations.
+ * @param[out] phys  If non-NULL, physical address of the resource
+ * @param[out] size  If non-NULL, size of the enabled resource.
  *
  * @return EOK on success.
@@ -229,8 +231,9 @@
  *
  */
-errno_t pio_enable_resource(pio_window_t *win, hw_resource_t *res, void **virt)
+errno_t pio_enable_resource(pio_window_t *win, hw_resource_t *res, void **virt,
+    uintptr_t *phys, size_t *size)
 {
 	uintptr_t addr;
-	size_t size;
+	size_t sz;
 
 	switch (res->type) {
@@ -242,5 +245,5 @@
 			addr += win->io.base;
 		}
-		size = res->res.io_range.size;
+		sz = res->res.io_range.size;
 		break;
 	case MEM_RANGE:
@@ -251,5 +254,5 @@
 			addr += win->mem.base;
 		}
-		size = res->res.mem_range.size;
+		sz = res->res.mem_range.size;
 		break;
 	default:
@@ -257,5 +260,10 @@
 	}
 
-	return pio_enable((void *) addr, size, virt);
+	if (phys)
+		*phys = addr;
+	if (size)
+		*size = sz;
+
+	return pio_enable((void *) addr, sz, virt);
 }
 
Index: uspace/lib/c/include/ddi.h
===================================================================
--- uspace/lib/c/include/ddi.h	(revision 2498b9515ac2e60a64adc171d59e3a1f3aaef339)
+++ uspace/lib/c/include/ddi.h	(revision fbfe59dafcc4f7e06cbbf09e2d88ed3e434b4a33)
@@ -40,4 +40,5 @@
 #include <stdint.h>
 #include <sys/time.h>
+#include <byteorder.h>
 #include <abi/ddi/irq.h>
 #include <device/hw_res.h>
@@ -64,5 +65,6 @@
 
 extern errno_t pio_enable_range(addr_range_t *, void **);
-extern errno_t pio_enable_resource(pio_window_t *, hw_resource_t *, void **);
+extern errno_t pio_enable_resource(pio_window_t *, hw_resource_t *, void **,
+    uintptr_t *, size_t *);
 extern errno_t pio_enable(void *, size_t, void **);
 extern errno_t pio_disable(void *, size_t);
@@ -85,4 +87,54 @@
 extern uint64_t pio_read_64(const ioport64_t *);
 
+static inline void pio_write_le16(ioport16_t *reg, uint16_t val)
+{
+	pio_write_16(reg, host2uint16_t_le(val));
+}
+static inline void pio_write_be16(ioport16_t *reg, uint16_t val)
+{
+	pio_write_16(reg, host2uint16_t_be(val));
+}
+static inline void pio_write_le32(ioport32_t *reg, uint32_t val)
+{
+	pio_write_32(reg, host2uint32_t_le(val));
+}
+static inline void pio_write_be32(ioport32_t *reg, uint32_t val)
+{
+	pio_write_32(reg, host2uint32_t_be(val));
+}
+static inline void pio_write_le64(ioport64_t *reg, uint64_t val)
+{
+	pio_write_64(reg, host2uint64_t_le(val));
+}
+static inline void pio_write_be64(ioport64_t *reg, uint64_t val)
+{
+	pio_write_64(reg, host2uint64_t_be(val));
+}
+
+static inline uint16_t pio_read_le16(const ioport16_t *reg)
+{
+	return uint16_t_le2host(pio_read_16(reg));
+}
+static inline uint16_t pio_read_be16(const ioport16_t *reg)
+{
+	return uint16_t_be2host(pio_read_16(reg));
+}
+static inline uint32_t pio_read_le32(const ioport32_t *reg)
+{
+	return uint32_t_le2host(pio_read_32(reg));
+}
+static inline uint32_t pio_read_be32(const ioport32_t *reg)
+{
+	return uint32_t_be2host(pio_read_32(reg));
+}
+static inline uint64_t pio_read_le64(const ioport64_t *reg)
+{
+	return uint64_t_le2host(pio_read_64(reg));
+}
+static inline uint64_t pio_read_be64(const ioport64_t *reg)
+{
+	return uint64_t_be2host(pio_read_64(reg));
+}
+
 static inline uint8_t pio_change_8(ioport8_t *reg, uint8_t val, uint8_t mask,
     useconds_t delay)
