1/* 2 * arch/m32r/boot/compressed/misc.c 3 * 4 * This is a collection of several routines from gzip-1.0.3 5 * adapted for Linux. 6 * 7 * malloc by Hannu Savolainen 1993 and Matthias Urlichs 1994 8 * 9 * Adapted for SH by Stuart Menefy, Aug 1999 10 * 11 * 2003-02-12: Support M32R by Takeo Takahashi 12 */ 13 14/* 15 * gzip declarations 16 */ 17#define STATIC static 18 19#undef memset 20#undef memcpy 21#define memzero(s, n) memset ((s), 0, (n)) 22 23static void error(char *m); 24 25#include "m32r_sio.c" 26 27static unsigned long free_mem_ptr; 28static unsigned long free_mem_end_ptr; 29 30#ifdef CONFIG_KERNEL_BZIP2 31static void *memset(void *s, int c, size_t n) 32{ 33 char *ss = s; 34 35 while (n--) 36 *ss++ = c; 37 return s; 38} 39#endif 40 41#ifdef CONFIG_KERNEL_GZIP 42#define BOOT_HEAP_SIZE 0x10000 43#include "../../../../lib/decompress_inflate.c" 44#endif 45 46#ifdef CONFIG_KERNEL_BZIP2 47#define BOOT_HEAP_SIZE 0x400000 48#include "../../../../lib/decompress_bunzip2.c" 49#endif 50 51#ifdef CONFIG_KERNEL_LZMA 52#define BOOT_HEAP_SIZE 0x10000 53#include "../../../../lib/decompress_unlzma.c" 54#endif 55 56static void error(char *x) 57{ 58 puts("\n\n"); 59 puts(x); 60 puts("\n\n -- System halted"); 61 62 while(1); /* Halt */ 63} 64 65void 66decompress_kernel(int mmu_on, unsigned char *zimage_data, 67 unsigned int zimage_len, unsigned long heap) 68{ 69 unsigned char *input_data = zimage_data; 70 int input_len = zimage_len; 71 unsigned char *output_data; 72 73 output_data = (unsigned char *)CONFIG_MEMORY_START + 0x2000 74 + (mmu_on ? 0x80000000 : 0); 75 free_mem_ptr = heap; 76 free_mem_end_ptr = free_mem_ptr + BOOT_HEAP_SIZE; 77 78 puts("\nDecompressing Linux... "); 79 decompress(input_data, input_len, NULL, NULL, output_data, NULL, error); 80 puts("done.\nBooting the kernel.\n"); 81} 82