Index: uspace/drv/bus/isa/isa.c
===================================================================
--- uspace/drv/bus/isa/isa.c	(revision fe1c48da581efc6a8188858937e23329b93fe8f8)
+++ uspace/drv/bus/isa/isa.c	(revision 03936831e237a5f5ba77718cd0633451f3a1514f)
@@ -453,4 +453,27 @@
 }
 
+static void isa_fun_add_mem_range(isa_fun_t *fun, uintptr_t addr, size_t len)
+{
+	size_t count = fun->hw_resources.count;
+	hw_resource_t *resources = fun->hw_resources.resources;
+
+	isa_bus_t *isa = isa_bus(ddf_fun_get_dev(fun->fnode));
+
+	if (count < ISA_MAX_HW_RES) {
+		resources[count].type = MEM_RANGE;
+		resources[count].res.mem_range.address = addr;
+		resources[count].res.mem_range.address += isa->pio_win.mem.base;
+		resources[count].res.mem_range.size = len;
+		resources[count].res.mem_range.relative = true;
+		resources[count].res.mem_range.endianness = LITTLE_ENDIAN;
+
+		fun->hw_resources.count++;
+
+		ddf_msg(LVL_NOTE, "Added mem range (addr=0x%zx, size=0x%x) to "
+		    "function %s", (uintptr_t) addr, (unsigned int) len,
+		    ddf_fun_get_name(fun->fnode));
+	}
+}
+
 static void fun_parse_irq(isa_fun_t *fun, const char *val)
 {
@@ -496,4 +519,25 @@
 }
 
+static void fun_parse_mem_range(isa_fun_t *fun, const char *val)
+{
+	uintptr_t addr;
+	size_t len;
+	char *end = NULL;
+
+	val = skip_spaces(val);
+	addr = strtoul(val, &end, 0x10);
+
+	if (val == end)
+		return;
+
+	val = skip_spaces(end);
+	len = strtol(val, &end, 0x10);
+
+	if (val == end)
+		return;
+
+	isa_fun_add_mem_range(fun, addr, len);
+}
+
 static void get_match_id(char **id, const char *val)
 {
@@ -564,4 +608,5 @@
 
 	if (!prop_parse(fun, line, "io_range", &fun_parse_io_range) &&
+	    !prop_parse(fun, line, "mem_range", &fun_parse_mem_range) &&
 	    !prop_parse(fun, line, "irq", &fun_parse_irq) &&
 	    !prop_parse(fun, line, "dma", &fun_parse_dma) &&
Index: uspace/drv/bus/isa/isa.dev
===================================================================
--- uspace/drv/bus/isa/isa.dev	(revision fe1c48da581efc6a8188858937e23329b93fe8f8)
+++ uspace/drv/bus/isa/isa.dev	(revision 03936831e237a5f5ba77718cd0633451f3a1514f)
@@ -1,2 +1,10 @@
+i8259:
+	match 100 isa/i8259
+	mem_range 0x20 2
+	mem_range 0xa0 2
+
+apic:
+	match 100 isa/apic
+	mem_range 0xfec00000 0x14
 com1:
 	match 100 isa/ns8250
Index: uspace/drv/bus/pci/pciintel/pci.c
===================================================================
--- uspace/drv/bus/pci/pciintel/pci.c	(revision fe1c48da581efc6a8188858937e23329b93fe8f8)
+++ uspace/drv/bus/pci/pciintel/pci.c	(revision 03936831e237a5f5ba77718cd0633451f3a1514f)
@@ -293,5 +293,5 @@
 	const uint32_t conf_addr = CONF_ADDR(fun->bus, fun->dev, fun->fn, reg);
 	pci_bus_t *bus = pci_bus_from_fun(fun);
-	uint32_t val;
+	uint32_t val = 0;
 	
 	fibril_mutex_lock(&bus->conf_mutex);
