It's still huge, but less painful to read.

Signed-off-by: Werner Almesberger <[email protected]>

---

Index: qi/src/phase2.c
===================================================================
--- qi.orig/src/phase2.c        2009-01-08 23:21:56.000000000 -0200
+++ qi/src/phase2.c     2009-01-08 23:26:35.000000000 -0200
@@ -96,19 +96,94 @@
        return len;
 }
 
-static void try_this_kernel(void)
+static void do_params(unsigned initramfs_len,
+    const char *commandline_rootfs_append)
 {
-       void    (*the_kernel)(int zero, int arch, uint params);
        const struct board_variant * board_variant =
                                              (this_board->get_board_variant)();
+       const char *p;
+       char * cmdline;
+       struct tag *params = (struct tag *)this_board->linux_tag_placement;
+
+       /* eat leading white space */
+       for (p = this_board->commandline_board; *p == ' '; p++);
+
+       /* first tag */
+       params->hdr.tag = ATAG_CORE;
+       params->hdr.size = tag_size(tag_core);
+       params->u.core.flags = 0;
+       params->u.core.pagesize = 0;
+       params->u.core.rootdev = 0;
+       params = tag_next(params);
+
+       /* revision tag */
+       params->hdr.tag = ATAG_REVISION;
+       params->hdr.size = tag_size(tag_revision);
+       params->u.revision.rev = board_variant->machine_revision;
+       params = tag_next(params);
+
+       /* memory tags */
+       params->hdr.tag = ATAG_MEM;
+       params->hdr.size = tag_size(tag_mem32);
+       params->u.mem.start = this_board->linux_mem_start;
+       params->u.mem.size = this_board->linux_mem_size;
+       params = tag_next(params);
+
+       if (this_kernel->initramfs_filepath) {
+               /* INITRD2 tag */
+               params->hdr.tag = ATAG_INITRD2;
+               params->hdr.size = tag_size(tag_initrd);
+               params->u.initrd.start = this_board->linux_mem_start +
+                                                             INITRD_OFFSET;
+               params->u.initrd.size = initramfs_len;
+               params = tag_next(params);
+       }
+
+       /* kernel commandline */
+
+       cmdline = params->u.cmdline.cmdline;
+       cmdline += strlen(strcpy(cmdline, p));
+       if (this_kernel->commandline_append)
+               cmdline += strlen(strcpy(cmdline,
+                                     this_kernel->commandline_append));
+               if (commandline_rootfs_append[0])
+                       cmdline += strlen(strcpy(cmdline,
+                                     commandline_rootfs_append));
+
+       /*
+        * if he's still holding down the UI_ACTION_SKIPKERNEL key
+        * now we finished loading the kernel, take it to mean he wants
+        * to have the debugging options added to the commandline
+        */
+
+       if (this_board->commandline_board_debug && this_board->get_ui_keys)
+               if ((this_board->get_ui_keys)() & UI_ACTION_SKIPKERNEL)
+                       cmdline += strlen(strcpy(cmdline, this_board->
+                                             commandline_board_debug));
+
+       params->hdr.tag = ATAG_CMDLINE;
+       params->hdr.size = (sizeof(struct tag_header) +
+               strlen(params->u.cmdline.cmdline) + 1 + 4) >> 2;
+
+       puts("      Cmdline: ");
+       puts(params->u.cmdline.cmdline);
+       puts("\n");
+
+       params = tag_next(params);
+
+       /* needs to always be the last tag */
+       params->hdr.tag = ATAG_NONE;
+       params->hdr.size = 0;
+}
+
+static void try_this_kernel(void)
+{
+       void    (*the_kernel)(int zero, int arch, uint params);
        unsigned int initramfs_len = 0;
        static char commandline_rootfs_append[512] = "";
        static void * last_block_init = NULL;
        static int last_block_init_result = 0;
        int ret;
-       const char *p;
-       char * cmdline;
-       struct tag *params = (struct tag *)this_board->linux_tag_placement;
        void * kernel_dram = (void *)this_board->linux_mem_start + 0x8000;
        unsigned long crc;
        image_header_t  *hdr;
@@ -117,9 +192,6 @@
        partition_offset_blocks = 0;
        partition_length_blocks = 0;
 
-       /* eat leading white space */
-       for (p = this_board->commandline_board; *p == ' '; p++);
-
        puts("\nTrying kernel: ");
        puts(this_kernel->name);
        puts("\n");
@@ -271,72 +343,7 @@
        the_kernel = (void (*)(int, int, uint))
                                (((char *)hdr) + sizeof(image_header_t));
 
-       /* first tag */
-       params->hdr.tag = ATAG_CORE;
-       params->hdr.size = tag_size(tag_core);
-       params->u.core.flags = 0;
-       params->u.core.pagesize = 0;
-       params->u.core.rootdev = 0;
-       params = tag_next(params);
-
-       /* revision tag */
-       params->hdr.tag = ATAG_REVISION;
-       params->hdr.size = tag_size(tag_revision);
-       params->u.revision.rev = board_variant->machine_revision;
-       params = tag_next(params);
-
-       /* memory tags */
-       params->hdr.tag = ATAG_MEM;
-       params->hdr.size = tag_size(tag_mem32);
-       params->u.mem.start = this_board->linux_mem_start;
-       params->u.mem.size = this_board->linux_mem_size;
-       params = tag_next(params);
-
-       if (this_kernel->initramfs_filepath) {
-               /* INITRD2 tag */
-               params->hdr.tag = ATAG_INITRD2;
-               params->hdr.size = tag_size(tag_initrd);
-               params->u.initrd.start = this_board->linux_mem_start +
-                                                             INITRD_OFFSET;
-               params->u.initrd.size = initramfs_len;
-               params = tag_next(params);
-       }
-
-       /* kernel commandline */
-
-       cmdline = params->u.cmdline.cmdline;
-       cmdline += strlen(strcpy(cmdline, p));
-       if (this_kernel->commandline_append)
-               cmdline += strlen(strcpy(cmdline,
-                                     this_kernel->commandline_append));
-               if (commandline_rootfs_append[0])
-                       cmdline += strlen(strcpy(cmdline,
-                                     commandline_rootfs_append));
-
-       /*
-        * if he's still holding down the UI_ACTION_SKIPKERNEL key
-        * now we finished loading the kernel, take it to mean he wants
-        * to have the debugging options added to the commandline
-        */
-
-       if (this_board->commandline_board_debug && this_board->get_ui_keys)
-               if ((this_board->get_ui_keys)() & UI_ACTION_SKIPKERNEL)
-                       cmdline += strlen(strcpy(cmdline, this_board->
-                                             commandline_board_debug));
-
-       params->hdr.tag = ATAG_CMDLINE;
-       params->hdr.size = (sizeof(struct tag_header) +
-               strlen(params->u.cmdline.cmdline) + 1 + 4) >> 2;
-
-       puts("      Cmdline: ");
-       puts(params->u.cmdline.cmdline);
-       puts("\n");
-
-       params = tag_next(params);
-
-       /* needs to always be the last tag */
-       params->hdr.tag = ATAG_NONE;
-       params->hdr.size = 0;
+       do_params(initramfs_len, commandline_rootfs_append);
 
        /* give board implementation a chance to shut down
         * anything it may have going on, leave GPIO set for Linux

-- 

Reply via email to