|
@@ -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>
|
|
|
|
|
@@ -106,57 +106,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;
|
|
@@ -193,59 +143,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);
|
|
|
+unsigned char *output_data;
|
|
|
+unsigned long output_ptr;
|
|
|
|
|
|
-static void putstr(const char *);
|
|
|
-
|
|
|
-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);
|
|
|
|
|
@@ -261,6 +172,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
|
|
@@ -281,8 +194,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;
|
|
|
}
|