Index: uspace/lib/c/include/ddi.h
===================================================================
--- uspace/lib/c/include/ddi.h	(revision a9654bf9ad05587af5ba504938aab8b969f211c2)
+++ uspace/lib/c/include/ddi.h	(revision 5b082ba97e7288e1064574751f5fd623c8d8221f)
@@ -37,4 +37,5 @@
 
 #include <sys/types.h>
+#include <sys/time.h>
 #include <abi/ddi/irq.h>
 #include <task.h>
@@ -51,4 +52,5 @@
 
 extern int pio_enable(void *, size_t, void **);
+
 extern void pio_write_8(ioport8_t *, uint8_t);
 extern void pio_write_16(ioport16_t *, uint16_t);
@@ -59,4 +61,57 @@
 extern uint32_t pio_read_32(ioport32_t *);
 
+static inline uint8_t pio_change_8(
+    ioport8_t *reg, uint8_t val, uint8_t mask, useconds_t delay)
+{
+	uint8_t v = pio_read_8(reg);
+	udelay(delay);
+	pio_write_8(reg, (v & ~mask) | val);
+	return v;
+}
+
+static inline uint16_t pio_change_16(
+    ioport16_t *reg, uint16_t val, uint16_t mask, useconds_t delay)
+{
+	uint16_t v = pio_read_16(reg);
+	udelay(delay);
+	pio_write_16(reg, (v & ~mask) | val);
+	return v;
+}
+
+static inline uint32_t pio_change_32(
+    ioport32_t *reg, uint32_t val, uint32_t mask, useconds_t delay)
+{
+	uint32_t v = pio_read_32(reg);
+	udelay(delay);
+	pio_write_32(reg, (v & ~mask) | val);
+	return v;
+}
+
+static inline uint8_t pio_set_8(ioport8_t *r, uint8_t v, useconds_t d)
+{
+	return pio_change_8(r, v, 0, d);
+}
+static inline uint16_t pio_set_16(ioport16_t *r, uint16_t v, useconds_t d)
+{
+	return pio_change_16(r, v, 0, d);
+}
+static inline uint32_t pio_set_32(ioport32_t *r, uint32_t v, useconds_t d)
+{
+	return pio_change_32(r, v, 0, d);
+}
+
+static inline uint8_t pio_clear_8(ioport8_t *r, uint8_t v, useconds_t d)
+{
+	return pio_change_8(r, 0, v, d);
+}
+static inline uint16_t pio_clear_16(ioport16_t *r, uint16_t v, useconds_t d)
+{
+	return pio_change_16(r, 0, v, d);
+}
+static inline uint32_t pio_clear_32(ioport32_t *r, uint32_t v, useconds_t d)
+{
+	return pio_change_32(r, 0, v, d);
+}
+
 extern int irq_register(int, int, int, irq_code_t *);
 extern int irq_unregister(int, int);
