From 62755b8f384153353939f223660207c548aff479 Mon Sep 17 00:00:00 2001 From: Aaron Lindsay Date: Mon, 24 Dec 2012 12:40:30 -0500 Subject: [PATCH] Move atags support to be ARM arch-specific --- {include => arch/arm/include}/atags.h | 0 {kernel => arch/arm/kernel}/atags.c | 18 ++++++++++++++++++ arch/arm/kernel/kernel.mk | 3 ++- kernel/init.c | 17 +++-------------- kernel/kernel.mk | 3 +-- 5 files changed, 24 insertions(+), 17 deletions(-) rename {include => arch/arm/include}/atags.h (100%) rename {kernel => arch/arm/kernel}/atags.c (84%) diff --git a/include/atags.h b/arch/arm/include/atags.h similarity index 100% rename from include/atags.h rename to arch/arm/include/atags.h diff --git a/kernel/atags.c b/arch/arm/kernel/atags.c similarity index 84% rename from kernel/atags.c rename to arch/arm/kernel/atags.c index d724c2a..8279c00 100644 --- a/kernel/atags.c +++ b/arch/arm/kernel/atags.c @@ -19,6 +19,7 @@ */ #include +#include extern arch_uint_ptr atags_ptr; @@ -60,3 +61,20 @@ int _atags_mem_region(struct atag **mem_header, int initialize) { return -1; return 0; } + +int detect_memory() { + struct atag *atags; + char *lower, *upper; + + if (atags_first_mem_region(&atags)) { + return -1; + } + + do { + lower = (char *)atags->data.mem.start; + upper = lower + atags->data.mem.size - 1; + declare_memory_region(lower, upper); + } while (!atags_next_mem_region(&atags)); + + return 0; +} diff --git a/arch/arm/kernel/kernel.mk b/arch/arm/kernel/kernel.mk index 71b6419..68c2eb8 100644 --- a/arch/arm/kernel/kernel.mk +++ b/arch/arm/kernel/kernel.mk @@ -3,7 +3,8 @@ SUBDIRS := include $(BASEDIR)/header.mk -OBJS_$(d) := $(d)/mmu.o +OBJS_$(d) := $(d)/atags.o \ + $(d)/mmu.o KOBJS += $(OBJS_$(d)) diff --git a/kernel/init.c b/kernel/init.c index 12c2283..349949d 100644 --- a/kernel/init.c +++ b/kernel/init.c @@ -18,7 +18,6 @@ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#include #include #include #include @@ -94,11 +93,9 @@ void serial_console_init() { //once, and only here void serial_init(); void kmalloc_init(); +int detect_memory(); int main(void) { - char *lower, *upper; - struct atag *atags; - //setup MMU mmu_reinit(); @@ -114,19 +111,11 @@ int main(void) { //setup memory subsystems mm_init(); kmalloc_init(); - - if (atags_first_mem_region(&atags)) { - print("Error: atags must contain at least one memory region\n"); + if (detect_memory()) { + print("Error: Failed to detect memory.\n"); return -1; } - do { - lower = (char *)atags->data.mem.start; - upper = lower + atags->data.mem.size - 1; - print("atags: physical memory at %x-%x\n", lower, upper); - declare_memory_region(lower, upper); - } while (!atags_next_mem_region(&atags)); - init_initcalls(); video_console_init(); diff --git a/kernel/kernel.mk b/kernel/kernel.mk index 869e581..0821fa4 100644 --- a/kernel/kernel.mk +++ b/kernel/kernel.mk @@ -3,8 +3,7 @@ SUBDIRS := include $(BASEDIR)/header.mk -OBJS_$(d) := $(d)/atags.o \ - $(d)/console.o \ +OBJS_$(d) := $(d)/console.o \ $(d)/font.o \ $(d)/framebuffer.o \ $(d)/init.o \