Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
sh
boot
compressed
misc.c
Go to the documentation of this file.
1
/*
2
* arch/sh/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
* Modified to use standard LinuxSH BIOS by Greg Banks 7Jul2000
12
*/
13
14
#include <asm/uaccess.h>
15
#include <asm/addrspace.h>
16
#include <asm/page.h>
17
18
/*
19
* gzip declarations
20
*/
21
22
#define STATIC static
23
24
#undef memset
25
#undef memcpy
26
#define memzero(s, n) memset ((s), 0, (n))
27
28
/* cache.c */
29
#define CACHE_ENABLE 0
30
#define CACHE_DISABLE 1
31
int
cache_control
(
unsigned
int
command
);
32
33
extern
char
input_data
[];
34
extern
int
input_len
;
35
static
unsigned
char
*
output
;
36
37
static
void
error
(
char
*
m
);
38
39
int
puts
(
const
char
*);
40
41
extern
int
_text
;
/* Defined in vmlinux.lds.S */
42
extern
int
_end
;
43
static
unsigned
long
free_mem_ptr
;
44
static
unsigned
long
free_mem_end_ptr
;
45
46
#ifdef CONFIG_HAVE_KERNEL_BZIP2
47
#define HEAP_SIZE 0x400000
48
#else
49
#define HEAP_SIZE 0x10000
50
#endif
51
52
#ifdef CONFIG_KERNEL_GZIP
53
#include "../../../../lib/decompress_inflate.c"
54
#endif
55
56
#ifdef CONFIG_KERNEL_BZIP2
57
#include "../../../../lib/decompress_bunzip2.c"
58
#endif
59
60
#ifdef CONFIG_KERNEL_LZMA
61
#include "../../../../lib/decompress_unlzma.c"
62
#endif
63
64
#ifdef CONFIG_KERNEL_XZ
65
#include "../../../../lib/decompress_unxz.c"
66
#endif
67
68
#ifdef CONFIG_KERNEL_LZO
69
#include "../../../../lib/decompress_unlzo.c"
70
#endif
71
72
int
puts
(
const
char
*
s
)
73
{
74
/* This should be updated to use the sh-sci routines */
75
return
0;
76
}
77
78
void
*
memset
(
void
*
s
,
int
c
,
size_t
n
)
79
{
80
int
i
;
81
char
*
ss
= (
char
*)s;
82
83
for
(i=0;i<
n
;i++) ss[i] = c;
84
return
s
;
85
}
86
87
void
*
memcpy
(
void
* __dest, __const
void
* __src,
88
size_t
__n)
89
{
90
int
i
;
91
char
*
d
= (
char
*)__dest, *
s
= (
char
*)__src;
92
93
for
(i=0;i<__n;i++) d[i] =
s
[i];
94
return
__dest;
95
}
96
97
static
void
error
(
char
*
x
)
98
{
99
puts
(
"\n\n"
);
100
puts
(x);
101
puts
(
"\n\n -- System halted"
);
102
103
while
(1);
/* Halt */
104
}
105
106
#ifdef CONFIG_SUPERH64
107
#define stackalign 8
108
#else
109
#define stackalign 4
110
#endif
111
112
#define STACK_SIZE (4096)
113
long
__attribute__
((
aligned
(
stackalign
)))
user_stack
[
STACK_SIZE
];
114
long
*
stack_start
= &
user_stack
[STACK_SIZE];
115
116
void
decompress_kernel
(
void
)
117
{
118
unsigned
long
output_addr;
119
120
#ifdef CONFIG_SUPERH64
121
output_addr = (CONFIG_MEMORY_START + 0x2000);
122
#else
123
output_addr =
__pa
((
unsigned
long
)&
_text
+
PAGE_SIZE
);
124
#if defined(CONFIG_29BIT)
125
output_addr |=
P2SEG
;
126
#endif
127
#endif
128
129
output
= (
unsigned
char
*)output_addr;
130
free_mem_ptr
= (
unsigned
long
)&
_end
;
131
free_mem_end_ptr
=
free_mem_ptr
+
HEAP_SIZE
;
132
133
puts
(
"Uncompressing Linux... "
);
134
cache_control
(
CACHE_ENABLE
);
135
decompress
(
input_data
,
input_len
,
NULL
,
NULL
,
output
,
NULL
,
error
);
136
cache_control
(
CACHE_DISABLE
);
137
puts
(
"Ok, booting the kernel.\n"
);
138
}
Generated on Thu Jan 10 2013 12:48:59 for Linux Kernel by
1.8.2