aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/boot
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/boot')
-rw-r--r--arch/x86/boot/compressed/misc.c66
1 files changed, 34 insertions, 32 deletions
diff --git a/arch/x86/boot/compressed/misc.c b/arch/x86/boot/compressed/misc.c
index 69aec2f4155d..50d054c29018 100644
--- a/arch/x86/boot/compressed/misc.c
+++ b/arch/x86/boot/compressed/misc.c
@@ -127,7 +127,8 @@ typedef unsigned char uch;
127typedef unsigned short ush; 127typedef unsigned short ush;
128typedef unsigned long ulg; 128typedef unsigned long ulg;
129 129
130#define WSIZE 0x80000000 /* Window size must be at least 32k, 130#define WSIZE 0x80000000 /*
131 * Window size must be at least 32k,
131 * and a power of two 132 * and a power of two
132 * We don't actually have a window just 133 * We don't actually have a window just
133 * a huge output buffer so I report 134 * a huge output buffer so I report
@@ -152,22 +153,22 @@ static unsigned outcnt; /* bytes in output buffer */
152#define RESERVED 0xC0 /* bit 6,7: reserved */ 153#define RESERVED 0xC0 /* bit 6,7: reserved */
153 154
154#define get_byte() (inptr < insize ? inbuf[inptr++] : fill_inbuf()) 155#define get_byte() (inptr < insize ? inbuf[inptr++] : fill_inbuf())
155 156
156/* Diagnostic functions */ 157/* Diagnostic functions */
157#ifdef DEBUG 158#ifdef DEBUG
158# define Assert(cond,msg) {if(!(cond)) error(msg);} 159# define Assert(cond, msg) {if(!(cond)) error(msg); }
159# define Trace(x) fprintf x 160# define Trace(x) fprintf x
160# define Tracev(x) {if (verbose) fprintf x ;} 161# define Tracev(x) {if (verbose) fprintf x ; }
161# define Tracevv(x) {if (verbose>1) fprintf x ;} 162# define Tracevv(x) {if (verbose > 1) fprintf x ; }
162# define Tracec(c,x) {if (verbose && (c)) fprintf x ;} 163# define Tracec(c, x) {if (verbose && (c)) fprintf x ; }
163# define Tracecv(c,x) {if (verbose>1 && (c)) fprintf x ;} 164# define Tracecv(c, x) {if (verbose > 1 && (c)) fprintf x ; }
164#else 165#else
165# define Assert(cond,msg) 166# define Assert(cond, msg)
166# define Trace(x) 167# define Trace(x)
167# define Tracev(x) 168# define Tracev(x)
168# define Tracevv(x) 169# define Tracevv(x)
169# define Tracec(c,x) 170# define Tracec(c, x)
170# define Tracecv(c,x) 171# define Tracecv(c, x)
171#endif 172#endif
172 173
173static int fill_inbuf(void); 174static int fill_inbuf(void);
@@ -175,7 +176,7 @@ static void flush_window(void);
175static void error(char *m); 176static void error(char *m);
176static void gzip_mark(void **); 177static void gzip_mark(void **);
177static void gzip_release(void **); 178static void gzip_release(void **);
178 179
179/* 180/*
180 * This is set up by the setup-routine at boot-time 181 * This is set up by the setup-routine at boot-time
181 */ 182 */
@@ -190,7 +191,7 @@ static unsigned char *real_mode; /* Pointer to real-mode data */
190extern unsigned char input_data[]; 191extern unsigned char input_data[];
191extern int input_len; 192extern int input_len;
192 193
193static long bytes_out = 0; 194static long bytes_out;
194 195
195static void *malloc(int size); 196static void *malloc(int size);
196static void free(void *where); 197static void free(void *where);
@@ -229,8 +230,10 @@ static void *malloc(int size)
229{ 230{
230 void *p; 231 void *p;
231 232
232 if (size <0) error("Malloc error"); 233 if (size < 0)
233 if (free_mem_ptr <= 0) error("Memory error"); 234 error("Malloc error");
235 if (free_mem_ptr <= 0)
236 error("Memory error");
234 237
235 free_mem_ptr = (free_mem_ptr + 3) & ~3; /* Align */ 238 free_mem_ptr = (free_mem_ptr + 3) & ~3; /* Align */
236 239
@@ -256,19 +259,19 @@ static void gzip_release(void **ptr)
256{ 259{
257 free_mem_ptr = (memptr) *ptr; 260 free_mem_ptr = (memptr) *ptr;
258} 261}
259 262
260static void scroll(void) 263static void scroll(void)
261{ 264{
262 int i; 265 int i;
263 266
264 memcpy ( vidmem, vidmem + cols * 2, ( lines - 1 ) * cols * 2 ); 267 memcpy(vidmem, vidmem + cols * 2, (lines - 1) * cols * 2);
265 for ( i = ( lines - 1 ) * cols * 2; i < lines * cols * 2; i += 2 ) 268 for (i = (lines - 1) * cols * 2; i < lines * cols * 2; i += 2)
266 vidmem[i] = ' '; 269 vidmem[i] = ' ';
267} 270}
268 271
269static void putstr(const char *s) 272static void putstr(const char *s)
270{ 273{
271 int x,y,pos; 274 int x, y, pos;
272 char c; 275 char c;
273 276
274#ifdef CONFIG_X86_32 277#ifdef CONFIG_X86_32
@@ -279,18 +282,18 @@ static void putstr(const char *s)
279 x = RM_SCREEN_INFO.orig_x; 282 x = RM_SCREEN_INFO.orig_x;
280 y = RM_SCREEN_INFO.orig_y; 283 y = RM_SCREEN_INFO.orig_y;
281 284
282 while ( ( c = *s++ ) != '\0' ) { 285 while ((c = *s++) != '\0') {
283 if ( c == '\n' ) { 286 if (c == '\n') {
284 x = 0; 287 x = 0;
285 if ( ++y >= lines ) { 288 if (++y >= lines) {
286 scroll(); 289 scroll();
287 y--; 290 y--;
288 } 291 }
289 } else { 292 } else {
290 vidmem [(x + cols * y) * 2] = c; 293 vidmem [(x + cols * y) * 2] = c;
291 if ( ++x >= cols ) { 294 if (++x >= cols) {
292 x = 0; 295 x = 0;
293 if ( ++y >= lines ) { 296 if (++y >= lines) {
294 scroll(); 297 scroll();
295 y--; 298 y--;
296 } 299 }
@@ -308,22 +311,22 @@ static void putstr(const char *s)
308 outb(0xff & (pos >> 1), vidport+1); 311 outb(0xff & (pos >> 1), vidport+1);
309} 312}
310 313
311static void* memset(void* s, int c, unsigned n) 314static void *memset(void *s, int c, unsigned n)
312{ 315{
313 int i; 316 int i;
314 char *ss = s; 317 char *ss = s;
315 318
316 for (i=0;i<n;i++) ss[i] = c; 319 for (i = 0; i < n; i++) ss[i] = c;
317 return s; 320 return s;
318} 321}
319 322
320static void* memcpy(void* dest, const void* src, unsigned n) 323static void *memcpy(void *dest, const void *src, unsigned n)
321{ 324{
322 int i; 325 int i;
323 const char *s = src; 326 const char *s = src;
324 char *d = dest; 327 char *d = dest;
325 328
326 for (i=0;i<n;i++) d[i] = s[i]; 329 for (i = 0; i < n; i++) d[i] = s[i];
327 return dest; 330 return dest;
328} 331}
329 332
@@ -383,11 +386,10 @@ static void parse_elf(void *output)
383 int i; 386 int i;
384 387
385 memcpy(&ehdr, output, sizeof(ehdr)); 388 memcpy(&ehdr, output, sizeof(ehdr));
386 if(ehdr.e_ident[EI_MAG0] != ELFMAG0 || 389 if (ehdr.e_ident[EI_MAG0] != ELFMAG0 ||
387 ehdr.e_ident[EI_MAG1] != ELFMAG1 || 390 ehdr.e_ident[EI_MAG1] != ELFMAG1 ||
388 ehdr.e_ident[EI_MAG2] != ELFMAG2 || 391 ehdr.e_ident[EI_MAG2] != ELFMAG2 ||
389 ehdr.e_ident[EI_MAG3] != ELFMAG3) 392 ehdr.e_ident[EI_MAG3] != ELFMAG3) {
390 {
391 error("Kernel is not a valid ELF file"); 393 error("Kernel is not a valid ELF file");
392 return; 394 return;
393 } 395 }
@@ -400,7 +402,7 @@ static void parse_elf(void *output)
400 402
401 memcpy(phdrs, output + ehdr.e_phoff, sizeof(*phdrs) * ehdr.e_phnum); 403 memcpy(phdrs, output + ehdr.e_phoff, sizeof(*phdrs) * ehdr.e_phnum);
402 404
403 for (i=0; i<ehdr.e_phnum; i++) { 405 for (i = 0; i < ehdr.e_phnum; i++) {
404 phdr = &phdrs[i]; 406 phdr = &phdrs[i];
405 407
406 switch (phdr->p_type) { 408 switch (phdr->p_type) {
@@ -409,7 +411,7 @@ static void parse_elf(void *output)
409 dest = output; 411 dest = output;
410 dest += (phdr->p_paddr - LOAD_PHYSICAL_ADDR); 412 dest += (phdr->p_paddr - LOAD_PHYSICAL_ADDR);
411#else 413#else
412 dest = (void*)(phdr->p_paddr); 414 dest = (void *)(phdr->p_paddr);
413#endif 415#endif
414 memcpy(dest, 416 memcpy(dest,
415 output + phdr->p_offset, 417 output + phdr->p_offset,