diff options
| author | Marian Balakowicz <m8@semihalf.com> | 2008-01-08 18:14:09 +0100 | 
|---|---|---|
| committer | Wolfgang Denk <wd@denx.de> | 2008-02-07 01:12:53 +0100 | 
| commit | b97a2a0a21f279d66de8a9bdbfe21920968bcb1c (patch) | |
| tree | 7746eae37d3a468f3471cd303156920637445350 /lib_mips/mips_linux.c | |
| parent | ed29bc4e8142b46b626f67524207b36e43d9aad6 (diff) | |
| download | olio-uboot-2014.01-b97a2a0a21f279d66de8a9bdbfe21920968bcb1c.tar.xz olio-uboot-2014.01-b97a2a0a21f279d66de8a9bdbfe21920968bcb1c.zip | |
[new uImage] Define a API for image handling operations
- Add inline helper macros for basic header processing
- Move common non inline code common/image.c
- Replace direct header access with the API routines
- Rename IH_CPU_* to IH_ARCH_*
Signed-off-by: Marian Balakowicz <m8@semihalf.com>
Diffstat (limited to 'lib_mips/mips_linux.c')
| -rw-r--r-- | lib_mips/mips_linux.c | 41 | 
1 files changed, 15 insertions, 26 deletions
| diff --git a/lib_mips/mips_linux.c b/lib_mips/mips_linux.c index 556b1804e..0881b6db9 100644 --- a/lib_mips/mips_linux.c +++ b/lib_mips/mips_linux.c @@ -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 {  		/* |