[PATCH 1/3] Add functionality to load a specific kernel upon button press

Marc Andre Tanner openmoko at brain-dump.org
Wed Dec 2 01:52:52 CET 2009


From: Marc Andre Tanner <mat at brain-dump.org>

Signed-off-by: Marc Andre Tanner <mat at brain-dump.org>
---
 include/qi.h |    4 ++++
 src/phase2.c |   10 +++++++++-
 2 files changed, 13 insertions(+), 1 deletions(-)

diff --git a/include/qi.h b/include/qi.h
index b99695d..62130e3 100644
--- a/include/qi.h
+++ b/include/qi.h
@@ -45,6 +45,7 @@ enum filesystem {
 enum ui_actions {
 	UI_ACTION_ADD_DEBUG 	= (1 << 0),
 	UI_ACTION_SKIPKERNEL	= (1 << 1),
+	UI_ACTION_UI_KERNEL	= (1 << 2),
 };
 
 enum ui_indication {
@@ -110,6 +111,9 @@ struct board_api {
 	void (*set_ui_indication)(enum ui_indication);
 
 	struct kernel_source kernel_source[8];
+	/* index into the array above, if this is != 0 then the corresponding
+	 * kernel will be loaded upon the UI_ACTION_UI_KERNEL event */
+	int kernel_ui;
 };
 
 /* this is the board we are running on */
diff --git a/src/phase2.c b/src/phase2.c
index 4a7ff18..6889503 100644
--- a/src/phase2.c
+++ b/src/phase2.c
@@ -469,8 +469,16 @@ void bootloader_second_phase(void)
 	/* we try the possible kernels for this board in order */
 
 	for (this_kernel = this_board->kernel_source; this_kernel->name;
-	    this_kernel++)
+	     this_kernel++) {
+		if (this_board->kernel_ui && this_board->get_ui_keys &&
+		    this_board->get_ui_keys() & UI_ACTION_UI_KERNEL) {
+			this_kernel = &this_board->kernel_source[this_board->kernel_ui];
+			try_this_kernel();
+			puts("Failed to boot UI Kernel\n");
+			break;
+		}
 		try_this_kernel();
+	}
 
 	/* none of the kernels worked out */
 
-- 
1.6.5




More information about the openmoko-kernel mailing list