[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>
diff --git a/lib_i386/i386_linux.c b/lib_i386/i386_linux.c
index b4a6f5a3..67a78c4 100644
--- a/lib_i386/i386_linux.c
+++ b/lib_i386/i386_linux.c
@@ -50,7 +50,7 @@
 {
 	void *base_ptr;
 
-	ulong len = 0, checksum;
+	ulong len = 0;
 	ulong initrd_start, initrd_end;
 	ulong data;
 	image_header_t *hdr = &header;
@@ -60,48 +60,37 @@
 	 */
 	if (argc >= 3) {
 		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");
 			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, (char *)data, len) != checksum) {
+		if (!image_check_hcrc (hdr)) {
 			printf ("Bad Header Checksum\n");
 			do_reset (cmdtp, flag, argc, 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, (char *)data, len);
-			if (csum != ntohl(hdr->ih_dcrc)) {
+			if (!image_check_dcrc (hdr)) {
 				printf ("Bad Data CRC\n");
 				do_reset (cmdtp, flag, argc, argv);
 			}
 			printf ("OK\n");
 		}
 
-		if ((hdr->ih_os   != IH_OS_LINUX)	||
-		    (hdr->ih_arch != IH_CPU_I386)	||
-		    (hdr->ih_type != IH_TYPE_RAMDISK)	) {
+		if (!image_check_os (hdr, IH_OS_LINUX) ||
+		    !image_check_arch (hdr, IH_ARCH_I386) ||
+		    !image_check_type (hdr, IH_TYPE_RAMDISK)) {
 			printf ("No Linux i386 Ramdisk Image\n");
 			do_reset (cmdtp, flag, argc, argv);
 		}
@@ -109,8 +98,8 @@
 		/*
 		 * 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;
 
 		/* skip kernel length and terminator */
@@ -119,12 +108,12 @@
 		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 {
 		/*
@@ -152,12 +141,13 @@
 	}
 
 	/* if multi-part image, we need to advance base ptr */
-	if ((hdr->ih_type==IH_TYPE_MULTI) && (len_ptr[1])) {
+	if (image_check_type (hdr, IH_TYPE_MULTI) && (len_ptr[1])) {
 		int i;
 		for (i=0, addr+=sizeof(int); len_ptr[i++]; addr+=sizeof(int));
 	}
 
-	base_ptr = load_zimage((void*)addr + sizeof(image_header_t), ntohl(hdr->ih_size),
+	base_ptr = load_zimage((void*)addr + image_get_header_size (),
+			       image_get_data_size (hdr),
 			       initrd_start, initrd_end-initrd_start, 0);
 
 	if (NULL == base_ptr) {