Index: uspace/drv/infrastructure/rootmalta/rootmalta.c
===================================================================
--- uspace/drv/infrastructure/rootmalta/rootmalta.c	(revision c501bc4364ecfead182958bc0b7c059b09e5cf4e)
+++ uspace/drv/infrastructure/rootmalta/rootmalta.c	(revision cb500a2f5e92d7a082f0bfc57d3e8a084dc6d9c1)
@@ -53,4 +53,6 @@
 #include <ops/hw_res.h>
 #include <device/hw_res.h>
+#include <ops/pio_window.h>
+#include <device/pio_window.h>
 #include <byteorder.h>
 
@@ -66,6 +68,13 @@
 #define GT_PCI_CMD_MBYTESWAP	0x1
 
+#define GT_PCI_MEMBASE	UINT32_C(0x10000000)
+#define GT_PCI_MEMSIZE	UINT32_C(0x08000000)
+
+#define GT_PCI_IOBASE	UINT32_C(0x18000000)
+#define GT_PCI_IOSIZE	UINT32_C(0x00200000)
+
 typedef struct rootmalta_fun {
 	hw_resource_list_t hw_resources;
+	pio_window_t pio_window;
 } rootmalta_fun_t;
 
@@ -107,4 +116,14 @@
 		sizeof(pci_conf_regs) / sizeof(pci_conf_regs[0]),
 		pci_conf_regs
+	},
+	.pio_window = {
+		.mem = {
+			.base = GT_PCI_MEMBASE,
+			.size = GT_PCI_MEMSIZE
+		},
+		.io = {
+			.base = GT_PCI_IOBASE,
+			.size = GT_PCI_IOSIZE
+		}
 	}
 };
@@ -129,4 +148,12 @@
 	
 	return false;
+}
+
+static pio_window_t *rootmalta_get_pio_window(ddf_fun_t *fnode)
+{
+	rootmalta_fun_t *fun = rootmalta_fun(fnode);
+
+	assert(fun != NULL);
+	return &fun->pio_window;
 }
 
@@ -134,4 +161,8 @@
 	.get_resource_list = &rootmalta_get_resources,
 	.enable_interrupt = &rootmalta_enable_interrupt,
+};
+
+static pio_window_ops_t fun_pio_window_ops = {
+	.get_pio_window = &rootmalta_get_pio_window
 };
 
@@ -228,4 +259,5 @@
 	ddf_log_init(NAME);
 	rootmalta_fun_ops.interfaces[HW_RES_DEV_IFACE] = &fun_hw_res_ops;
+	rootmalta_fun_ops.interfaces[PIO_WINDOW_DEV_IFACE] = &fun_pio_window_ops;
 }
 
