diff options
Diffstat (limited to 'arch/arm/boot/compressed/misc.c')
| -rw-r--r-- | arch/arm/boot/compressed/misc.c | 109 | 
1 files changed, 11 insertions, 98 deletions
diff --git a/arch/arm/boot/compressed/misc.c b/arch/arm/boot/compressed/misc.c index 56a0d116d27..d32bc71c1f7 100644 --- a/arch/arm/boot/compressed/misc.c +++ b/arch/arm/boot/compressed/misc.c @@ -23,8 +23,8 @@ unsigned int __machine_arch_type;  #include <linux/compiler.h>	/* for inline */  #include <linux/types.h>	/* for size_t */  #include <linux/stddef.h>	/* for NULL */ -#include <asm/string.h>  #include <linux/linkage.h> +#include <asm/string.h>  #include <asm/unaligned.h> @@ -117,57 +117,7 @@ static void putstr(const char *ptr)  #endif -#define __ptr_t void * - -#define memzero(s,n) __memzero(s,n) - -/* - * Optimised C version of memzero for the ARM. - */ -void __memzero (__ptr_t s, size_t n) -{ -	union { void *vp; unsigned long *ulp; unsigned char *ucp; } u; -	int i; - -	u.vp = s; - -	for (i = n >> 5; i > 0; i--) { -		*u.ulp++ = 0; -		*u.ulp++ = 0; -		*u.ulp++ = 0; -		*u.ulp++ = 0; -		*u.ulp++ = 0; -		*u.ulp++ = 0; -		*u.ulp++ = 0; -		*u.ulp++ = 0; -	} - -	if (n & 1 << 4) { -		*u.ulp++ = 0; -		*u.ulp++ = 0; -		*u.ulp++ = 0; -		*u.ulp++ = 0; -	} - -	if (n & 1 << 3) { -		*u.ulp++ = 0; -		*u.ulp++ = 0; -	} - -	if (n & 1 << 2) -		*u.ulp++ = 0; - -	if (n & 1 << 1) { -		*u.ucp++ = 0; -		*u.ucp++ = 0; -	} - -	if (n & 1) -		*u.ucp++ = 0; -} - -static inline __ptr_t memcpy(__ptr_t __dest, __const __ptr_t __src, -			    size_t __n) +void *memcpy(void *__dest, __const void *__src, size_t __n)  {  	int i = 0;  	unsigned char *d = (unsigned char *)__dest, *s = (unsigned char *)__src; @@ -204,59 +154,20 @@ static inline __ptr_t memcpy(__ptr_t __dest, __const __ptr_t __src,  /*   * gzip delarations   */ -#define STATIC static - -/* Diagnostic functions */ -#ifdef DEBUG -#  define Assert(cond,msg) {if(!(cond)) error(msg);} -#  define Trace(x) fprintf x -#  define Tracev(x) {if (verbose) fprintf x ;} -#  define Tracevv(x) {if (verbose>1) fprintf x ;} -#  define Tracec(c,x) {if (verbose && (c)) fprintf x ;} -#  define Tracecv(c,x) {if (verbose>1 && (c)) fprintf x ;} -#else -#  define Assert(cond,msg) -#  define Trace(x) -#  define Tracev(x) -#  define Tracevv(x) -#  define Tracec(c,x) -#  define Tracecv(c,x) -#endif - -static void error(char *m); -  extern char input_data[];  extern char input_data_end[]; -static unsigned char *output_data; -static unsigned long output_ptr; - -static void error(char *m); - -static void putstr(const char *); +unsigned char *output_data; +unsigned long output_ptr; -static unsigned long free_mem_ptr; -static unsigned long free_mem_end_ptr; - -#ifdef STANDALONE_DEBUG -#define NO_INFLATE_MALLOC -#endif - -#define ARCH_HAS_DECOMP_WDOG - -#ifdef CONFIG_KERNEL_GZIP -#include "../../../../lib/decompress_inflate.c" -#endif - -#ifdef CONFIG_KERNEL_LZO -#include "../../../../lib/decompress_unlzo.c" -#endif +unsigned long free_mem_ptr; +unsigned long free_mem_end_ptr;  #ifndef arch_error  #define arch_error(x)  #endif -static void error(char *x) +void error(char *x)  {  	arch_error(x); @@ -272,6 +183,8 @@ asmlinkage void __div0(void)  	error("Attempting division by 0!");  } +extern void do_decompress(u8 *input, int len, u8 *output, void (*error)(char *x)); +  #ifndef STANDALONE_DEBUG  unsigned long @@ -292,8 +205,8 @@ decompress_kernel(unsigned long output_start, unsigned long free_mem_ptr_p,  	output_ptr = get_unaligned_le32(tmp);  	putstr("Uncompressing Linux..."); -	decompress(input_data, input_data_end - input_data, -			NULL, NULL, output_data, NULL, error); +	do_decompress(input_data, input_data_end - input_data, +			output_data, error);  	putstr(" done, booting the kernel.\n");  	return output_ptr;  }  |