Genericize finding of memory nodes in the FDT.

Change-Id: Idab2453578e9d79ca6fff889febbb1c3e8838e95
diff --git a/src/fdt_handler.c b/src/fdt_handler.c
index ada6a15..8af1401 100644
--- a/src/fdt_handler.c
+++ b/src/fdt_handler.c
@@ -168,7 +168,10 @@
 	return true;
 }
 
-bool fdt_find_memory_ranges(const struct fdt_node *root, struct boot_params *p)
+bool fdt_find_memory_ranges(const struct fdt_node *root,
+			    struct string *device_type,
+			    struct mem_range *mem_ranges,
+			    size_t *mem_ranges_count, size_t mem_range_limit)
 {
 	struct fdt_node n = *root;
 	const char *name;
@@ -202,8 +205,8 @@
 		uint32_t size;
 
 		if (!fdt_read_property(&n, "device_type", &data, &size) ||
-		    size != sizeof("memory") ||
-		    memcmp(data, "memory", sizeof("memory")) != 0 ||
+		    strncmp(data, string_data(device_type), STRING_MAX_SIZE) !=
+			    0 ||
 		    !fdt_read_property(&n, "reg", &data, &size)) {
 			continue;
 		}
@@ -217,27 +220,26 @@
 			CHECK(fdt_parse_number(data + address_size, size_size,
 					       &len));
 
-			if (mem_range_index < MAX_MEM_RANGES) {
-				p->mem_ranges[mem_range_index].begin =
+			if (mem_range_index < mem_range_limit) {
+				mem_ranges[mem_range_index].begin =
 					pa_init(addr);
-				p->mem_ranges[mem_range_index].end =
+				mem_ranges[mem_range_index].end =
 					pa_init(addr + len);
 				++mem_range_index;
 			} else {
 				dlog_error(
-					"Found memory range %u in FDT but only "
-					"%u supported, ignoring additional "
-					"range of size %u.\n",
-					mem_range_index, MAX_MEM_RANGES, len);
+					"Found %s range %u in FDT but only %u "
+					"supported, ignoring additional range "
+					"of size %u.\n",
+					string_data(device_type),
+					mem_range_index, mem_range_limit, len);
 			}
 
 			size -= entry_size;
 			data += entry_size;
 		}
 	} while (fdt_next_sibling(&n, &name));
-	p->mem_ranges_count = mem_range_index;
-
-	/* TODO: Check for "reserved-memory" nodes. */
+	*mem_ranges_count = mem_range_index;
 
 	return true;
 }