]> git.ipfire.org Git - people/ms/u-boot.git/blobdiff - lib_mips/mips_linux.c
[new uImage] Define a API for image handling operations
[people/ms/u-boot.git] / lib_mips / mips_linux.c
index 556b1804e04020d6fdd28d487269af18f1e876db..0881b6db9957777e22795df9bada3bd9ef493ee4 100644 (file)
@@ -51,7 +51,7 @@ static void linux_env_set (char * env_name, char * env_val);
 void do_bootm_linux (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[],
                     ulong addr, ulong * len_ptr, int verify)
 {
-       ulong len = 0, checksum;
+       ulong len = 0;
        ulong initrd_start, initrd_end;
        ulong data;
        void (*theKernel) (int, char **, char **, int *);
@@ -60,7 +60,7 @@ void do_bootm_linux (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[],
        char env_buf[12];
 
        theKernel =
-               (void (*)(int, char **, char **, int *)) ntohl (hdr->ih_ep);
+               (void (*)(int, char **, char **, int *))image_get_ep (hdr);
 
        /*
         * Check if there is an initrd image
@@ -69,25 +69,17 @@ void do_bootm_linux (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[],
                show_boot_progress (9);
 
                addr = simple_strtoul (argv[2], NULL, 16);
+               hdr = (image_header_t *)addr;
 
                printf ("## Loading Ramdisk Image at %08lx ...\n", addr);
 
-               /* Copy header so we can blank CRC field for re-calculation */
-               memcpy (&header, (char *) addr, sizeof (image_header_t));
-
-               if (ntohl (hdr->ih_magic) != IH_MAGIC) {
+               if (!image_check_magic (hdr)) {
                        printf ("Bad Magic Number\n");
                        show_boot_progress (-10);
                        do_reset (cmdtp, flag, argc, argv);
                }
 
-               data = (ulong) & header;
-               len = sizeof (image_header_t);
-
-               checksum = ntohl (hdr->ih_hcrc);
-               hdr->ih_hcrc = 0;
-
-               if (crc32 (0, (uchar *) data, len) != checksum) {
+               if (!image_check_hcrc (hdr)) {
                        printf ("Bad Header Checksum\n");
                        show_boot_progress (-11);
                        do_reset (cmdtp, flag, argc, argv);
@@ -97,15 +89,12 @@ void do_bootm_linux (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[],
 
                print_image_hdr (hdr);
 
-               data = addr + sizeof (image_header_t);
-               len = ntohl (hdr->ih_size);
+               data = image_get_data (hdr);
+               len = image_get_data_size (hdr);
 
                if (verify) {
-                       ulong csum = 0;
-
                        printf ("   Verifying Checksum ... ");
-                       csum = crc32 (0, (uchar *) data, len);
-                       if (csum != ntohl (hdr->ih_dcrc)) {
+                       if (!image_check_dcrc (hdr)) {
                                printf ("Bad Data CRC\n");
                                show_boot_progress (-12);
                                do_reset (cmdtp, flag, argc, argv);
@@ -115,9 +104,9 @@ void do_bootm_linux (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[],
 
                show_boot_progress (11);
 
-               if ((hdr->ih_os != IH_OS_LINUX) ||
-                   (hdr->ih_arch != IH_CPU_MIPS) ||
-                   (hdr->ih_type != IH_TYPE_RAMDISK)) {
+               if (!image_check_os (hdr, IH_OS_LINUX) ||
+                   !image_check_arch (hdr, IH_ARCH_MIPS) ||
+                   !image_check_type (hdr, IH_TYPE_RAMDISK)) {
                        printf ("No Linux MIPS Ramdisk Image\n");
                        show_boot_progress (-13);
                        do_reset (cmdtp, flag, argc, argv);
@@ -126,8 +115,8 @@ void do_bootm_linux (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[],
                /*
                 * Now check if we have a multifile image
                 */
-       } else if ((hdr->ih_type == IH_TYPE_MULTI) && (len_ptr[1])) {
-               ulong tail = ntohl (len_ptr[0]) % 4;
+       } else if (image_check_type (hdr, IH_TYPE_MULTI) && (len_ptr[1])) {
+               ulong tail = image_to_cpu (len_ptr[0]) % 4;
                int i;
 
                show_boot_progress (13);
@@ -138,12 +127,12 @@ void do_bootm_linux (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[],
                for (i = 1; len_ptr[i]; ++i)
                        data += 4;
                /* add kernel length, and align */
-               data += ntohl (len_ptr[0]);
+               data += image_to_cpu (len_ptr[0]);
                if (tail) {
                        data += 4 - tail;
                }
 
-               len = ntohl (len_ptr[1]);
+               len = image_to_cpu (len_ptr[1]);
 
        } else {
                /*