Release 4.11 arch/arm/boot/compressed/misc.c
/*
* misc.c
*
* This is a collection of several routines from gzip-1.0.3
* adapted for Linux.
*
* malloc by Hannu Savolainen 1993 and Matthias Urlichs 1994
*
* Modified for ARM Linux by Russell King
*
* Nicolas Pitre <nico@visuaide.com> 1999/04/14 :
* For this code to run directly from Flash, all constant variables must
* be marked with 'const' and all other variables initialized at run-time
* only. This way all non constant variables will end up in the bss segment,
* which should point to addresses in RAM and cleared to 0 on start.
* This allows for a much quicker boot time.
*/
unsigned int __machine_arch_type;
#include <linux/compiler.h> /* for inline */
#include <linux/types.h>
#include <linux/linkage.h>
static void putstr(const char *ptr);
extern void error(char *x);
#include CONFIG_UNCOMPRESS_INCLUDE
#ifdef CONFIG_DEBUG_ICEDCC
#if defined(CONFIG_CPU_V6) || defined(CONFIG_CPU_V6K) || defined(CONFIG_CPU_V7)
static void icedcc_putc(int ch)
{
int status, i = 0x4000000;
do {
if (--i < 0)
return;
asm volatile ("mrc p14, 0, %0, c0, c1, 0" : "=r" (status));
} while (status & (1 << 29));
asm("mcr p14, 0, %0, c0, c5, 0" : : "r" (ch));
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Tony Lindgren | 42 | 100.00% | 1 | 100.00% |
Total | 42 | 100.00% | 1 | 100.00% |
#elif defined(CONFIG_CPU_XSCALE)
static void icedcc_putc(int ch)
{
int status, i = 0x4000000;
do {
if (--i < 0)
return;
asm volatile ("mrc p14, 0, %0, c14, c0, 0" : "=r" (status));
} while (status & (1 << 28));
asm("mcr p14, 0, %0, c8, c0, 0" : : "r" (ch));
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Jean-Christophe Plagniol-Villard | 42 | 100.00% | 1 | 100.00% |
Total | 42 | 100.00% | 1 | 100.00% |
#else
static void icedcc_putc(int ch)
{
int status, i = 0x4000000;
do {
if (--i < 0)
return;
asm volatile ("mrc p14, 0, %0, c0, c0, 0" : "=r" (status));
} while (status & 2);
asm("mcr p14, 0, %0, c1, c0, 0" : : "r" (ch));
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Russell King | 28 | 73.68% | 1 | 25.00% |
Ben Dooks | 5 | 13.16% | 1 | 25.00% |
Uwe Zeisberger | 4 | 10.53% | 1 | 25.00% |
Al Viro | 1 | 2.63% | 1 | 25.00% |
Total | 38 | 100.00% | 4 | 100.00% |
#endif
#define putc(ch) icedcc_putc(ch)
#endif
static void putstr(const char *ptr)
{
char c;
while ((c = *ptr++) != '\0') {
if (c == '\n')
putc('\r');
putc(c);
}
flush();
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Russell King | 28 | 59.57% | 1 | 50.00% |
Ben Dooks | 19 | 40.43% | 1 | 50.00% |
Total | 47 | 100.00% | 2 | 100.00% |
/*
* gzip declarations
*/
extern char input_data[];
extern char input_data_end[];
unsigned char *output_data;
unsigned long free_mem_ptr;
unsigned long free_mem_end_ptr;
#ifndef arch_error
#define arch_error(x)
#endif
void error(char *x)
{
arch_error(x);
putstr("\n\n");
putstr(x);
putstr("\n\n -- System halted");
while(1); /* Halt */
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Linus Torvalds (pre-git) | 27 | 77.14% | 1 | 33.33% |
Ben Dooks | 5 | 14.29% | 1 | 33.33% |
Nico Pitre | 3 | 8.57% | 1 | 33.33% |
Total | 35 | 100.00% | 3 | 100.00% |
asmlinkage void __div0(void)
{
error("Attempting division by 0!");
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Albin Tonnerre | 13 | 100.00% | 1 | 100.00% |
Total | 13 | 100.00% | 1 | 100.00% |
unsigned long __stack_chk_guard;
void __stack_chk_guard_setup(void)
{
__stack_chk_guard = 0x000a0dff;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Kees Cook | 11 | 100.00% | 1 | 100.00% |
Total | 11 | 100.00% | 1 | 100.00% |
void __stack_chk_fail(void)
{
error("stack-protector: Kernel stack is corrupted\n");
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Kees Cook | 12 | 100.00% | 1 | 100.00% |
Total | 12 | 100.00% | 1 | 100.00% |
extern int do_decompress(u8 *input, int len, u8 *output, void (*error)(char *x));
void
decompress_kernel(unsigned long output_start, unsigned long free_mem_ptr_p,
unsigned long free_mem_ptr_end_p,
int arch_id)
{
int ret;
__stack_chk_guard_setup();
output_data = (unsigned char *)output_start;
free_mem_ptr = free_mem_ptr_p;
free_mem_end_ptr = free_mem_ptr_end_p;
__machine_arch_type = arch_id;
arch_decomp_setup();
putstr("Uncompressing Linux...");
ret = do_decompress(input_data, input_data_end - input_data,
output_data, error);
if (ret)
error("decompressor returned an error");
else
putstr(" done, booting the kernel.\n");
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Linus Torvalds (pre-git) | 43 | 50.59% | 4 | 36.36% |
Albin Tonnerre | 20 | 23.53% | 1 | 9.09% |
Nico Pitre | 17 | 20.00% | 3 | 27.27% |
Kees Cook | 3 | 3.53% | 1 | 9.09% |
Russell King | 1 | 1.18% | 1 | 9.09% |
Thomas Petazzoni | 1 | 1.18% | 1 | 9.09% |
Total | 85 | 100.00% | 11 | 100.00% |
Overall Contributors
Person | Tokens | Prop | Commits | CommitProp |
Russell King | 115 | 24.68% | 4 | 16.67% |
Linus Torvalds (pre-git) | 93 | 19.96% | 4 | 16.67% |
Jean-Christophe Plagniol-Villard | 48 | 10.30% | 1 | 4.17% |
Tony Lindgren | 47 | 10.09% | 1 | 4.17% |
Ben Dooks | 43 | 9.23% | 2 | 8.33% |
Albin Tonnerre | 39 | 8.37% | 1 | 4.17% |
Kees Cook | 30 | 6.44% | 1 | 4.17% |
Nico Pitre | 22 | 4.72% | 3 | 12.50% |
Mark Brown | 9 | 1.93% | 1 | 4.17% |
Rusty Russell | 7 | 1.50% | 1 | 4.17% |
Stephen Boyd | 5 | 1.07% | 1 | 4.17% |
Uwe Zeisberger | 4 | 0.86% | 1 | 4.17% |
Thomas Petazzoni | 2 | 0.43% | 1 | 4.17% |
Shawn Guo | 1 | 0.21% | 1 | 4.17% |
Al Viro | 1 | 0.21% | 1 | 4.17% |
Total | 466 | 100.00% | 24 | 100.00% |
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.