linux/arch/h8300/boot/compressed/misc.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * arch/h8300/boot/compressed/misc.c
   4 *
   5 * This is a collection of several routines from gzip-1.0.3
   6 * adapted for Linux.
   7 *
   8 * malloc by Hannu Savolainen 1993 and Matthias Urlichs 1994
   9 *
  10 * Adapted for h8300 by Yoshinori Sato 2006
  11 */
  12
  13#include <linux/uaccess.h>
  14
  15/*
  16 * gzip declarations
  17 */
  18
  19#define OF(args)  args
  20#define STATIC static
  21
  22#undef memset
  23#undef memcpy
  24#define memzero(s, n)     memset((s), (0), (n))
  25
  26extern int _end;
  27static unsigned long free_mem_ptr;
  28static unsigned long free_mem_end_ptr;
  29
  30extern char input_data[];
  31extern int input_len;
  32extern char output[];
  33
  34#define HEAP_SIZE             0x10000
  35
  36#ifdef CONFIG_KERNEL_GZIP
  37#include "../../../../lib/decompress_inflate.c"
  38#endif
  39
  40#ifdef CONFIG_KERNEL_LZO
  41#include "../../../../lib/decompress_unlzo.c"
  42#endif
  43
  44void *memset(void *s, int c, size_t n)
  45{
  46        int i;
  47        char *ss = (char *)s;
  48
  49        for (i = 0; i < n; i++)
  50                ss[i] = c;
  51        return s;
  52}
  53
  54void *memcpy(void *dest, const void *src, size_t n)
  55{
  56        int i;
  57        char *d = (char *)dest, *s = (char *)src;
  58
  59        for (i = 0; i < n; i++)
  60                d[i] = s[i];
  61        return dest;
  62}
  63
  64static void error(char *x)
  65{
  66        while (1)
  67                ;       /* Halt */
  68}
  69
  70void decompress_kernel(void)
  71{
  72        free_mem_ptr = (unsigned long)&_end;
  73        free_mem_end_ptr = free_mem_ptr + HEAP_SIZE;
  74
  75        __decompress(input_data, input_len, NULL, NULL, output, 0, NULL, error);
  76}
  77