linux-bk/include/asm-arm/arch-rpc/uncompress.h
<<
>>
Prefs
   1/*
   2 *  linux/include/asm-arm/arch-rpc/uncompress.h
   3 *
   4 *  Copyright (C) 1996 Russell King
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License version 2 as
   8 * published by the Free Software Foundation.
   9 */
  10#define VIDMEM ((char *)SCREEN_START)
  11 
  12#include <asm/hardware.h>
  13#include <asm/io.h>
  14
  15int video_num_columns, video_num_lines, video_size_row;
  16int white, bytes_per_char_h;
  17extern unsigned long con_charconvtable[256];
  18
  19struct param_struct {
  20        unsigned long page_size;
  21        unsigned long nr_pages;
  22        unsigned long ramdisk_size;
  23        unsigned long mountrootrdonly;
  24        unsigned long rootdev;
  25        unsigned long video_num_cols;
  26        unsigned long video_num_rows;
  27        unsigned long video_x;
  28        unsigned long video_y;
  29        unsigned long memc_control_reg;
  30        unsigned char sounddefault;
  31        unsigned char adfsdrives;
  32        unsigned char bytes_per_char_h;
  33        unsigned char bytes_per_char_v;
  34        unsigned long unused[256/4-11];
  35};
  36
  37static const unsigned long palette_4[16] = {
  38        0x00000000,
  39        0x000000cc,
  40        0x0000cc00,             /* Green   */
  41        0x0000cccc,             /* Yellow  */
  42        0x00cc0000,             /* Blue    */
  43        0x00cc00cc,             /* Magenta */
  44        0x00cccc00,             /* Cyan    */
  45        0x00cccccc,             /* White   */
  46        0x00000000,
  47        0x000000ff,
  48        0x0000ff00,
  49        0x0000ffff,
  50        0x00ff0000,
  51        0x00ff00ff,
  52        0x00ffff00,
  53        0x00ffffff
  54};
  55
  56#define palette_setpixel(p)     *(unsigned long *)(IO_START+0x00400000) = 0x10000000|((p) & 255)
  57#define palette_write(v)        *(unsigned long *)(IO_START+0x00400000) = 0x00000000|((v) & 0x00ffffff)
  58
  59/*
  60 * params_phys is a linker defined symbol - see
  61 * arch/arm/boot/compressed/Makefile
  62 */
  63extern struct param_struct params_phys;
  64#define params (&params_phys)
  65
  66#ifndef STANDALONE_DEBUG 
  67/*
  68 * This does not append a newline
  69 */
  70static void puts(const char *s)
  71{
  72        extern void ll_write_char(char *, char c, char white);
  73        int x,y;
  74        unsigned char c;
  75        char *ptr;
  76
  77        x = params->video_x;
  78        y = params->video_y;
  79
  80        while ( ( c = *(unsigned char *)s++ ) != '\0' ) {
  81                if ( c == '\n' ) {
  82                        x = 0;
  83                        if ( ++y >= video_num_lines ) {
  84                                y--;
  85                        }
  86                } else {
  87                        ptr = VIDMEM + ((y*video_num_columns*params->bytes_per_char_v+x)*bytes_per_char_h);
  88                        ll_write_char(ptr, c, white);
  89                        if ( ++x >= video_num_columns ) {
  90                                x = 0;
  91                                if ( ++y >= video_num_lines ) {
  92                                        y--;
  93                                }
  94                        }
  95                }
  96        }
  97
  98        params->video_x = x;
  99        params->video_y = y;
 100}
 101
 102static void error(char *x);
 103
 104/*
 105 * Setup for decompression
 106 */
 107static void arch_decomp_setup(void)
 108{
 109        int i;
 110        
 111        video_num_lines = params->video_num_rows;
 112        video_num_columns = params->video_num_cols;
 113        bytes_per_char_h = params->bytes_per_char_h;
 114        video_size_row = video_num_columns * bytes_per_char_h;
 115        if (bytes_per_char_h == 4)
 116                for (i = 0; i < 256; i++)
 117                        con_charconvtable[i] =
 118                                (i & 128 ? 1 << 0  : 0) |
 119                                (i & 64  ? 1 << 4  : 0) |
 120                                (i & 32  ? 1 << 8  : 0) |
 121                                (i & 16  ? 1 << 12 : 0) |
 122                                (i & 8   ? 1 << 16 : 0) |
 123                                (i & 4   ? 1 << 20 : 0) |
 124                                (i & 2   ? 1 << 24 : 0) |
 125                                (i & 1   ? 1 << 28 : 0);
 126        else
 127                for (i = 0; i < 16; i++)
 128                        con_charconvtable[i] =
 129                                (i & 8   ? 1 << 0  : 0) |
 130                                (i & 4   ? 1 << 8  : 0) |
 131                                (i & 2   ? 1 << 16 : 0) |
 132                                (i & 1   ? 1 << 24 : 0);
 133
 134
 135        palette_setpixel(0);
 136        if (bytes_per_char_h == 1) {
 137                palette_write (0);
 138                palette_write (0x00ffffff);
 139                for (i = 2; i < 256; i++)
 140                        palette_write (0);
 141                white = 1;
 142        } else {
 143                for (i = 0; i < 256; i++)
 144                        palette_write (i < 16 ? palette_4[i] : 0);
 145                white = 7;
 146        }
 147
 148        if (params->nr_pages * params->page_size < 4096*1024) error("<4M of mem\n");
 149}
 150#endif
 151
 152/*
 153 * nothing to do
 154 */
 155#define arch_decomp_wdog()
 156
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.