Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
[pandora-kernel.git] / arch / mips / lasat / prom.c
index d47692f..6acc6cb 100644 (file)
 #define PROM_PUTC_ADDR         PROM_JUMP_TABLE_ENTRY(1)
 #define PROM_MONITOR_ADDR      PROM_JUMP_TABLE_ENTRY(2)
 
-static void null_prom_printf(const char * fmt, ...)
-{
-}
-
 static void null_prom_display(const char *string, int pos, int clear)
 {
 }
@@ -40,57 +36,47 @@ static void null_prom_putc(char c)
 }
 
 /* these are functions provided by the bootloader */
-static void (* prom_putc)(char c) = null_prom_putc;
-void (* prom_printf)(const char * fmt, ...) = null_prom_printf;
-void (* prom_display)(const char *string, int pos, int clear) =
-               null_prom_display;
-void (* prom_monitor)(void) = null_prom_monitor;
+static void (*__prom_putc)(char c) = null_prom_putc;
 
-unsigned int lasat_ndelay_divider;
-
-#define PROM_PRINTFBUF_SIZE 256
-static char prom_printfbuf[PROM_PRINTFBUF_SIZE];
-
-static void real_prom_printf(const char * fmt, ...)
+void prom_putchar(char c)
 {
-       va_list ap;
-       int len;
-       char *c = prom_printfbuf;
-       int i;
-
-       va_start(ap, fmt);
-       len = vsnprintf(prom_printfbuf, PROM_PRINTFBUF_SIZE, fmt, ap);
-       va_end(ap);
-
-       /* output overflowed the buffer */
-       if (len < 0 || len > PROM_PRINTFBUF_SIZE)
-               len = PROM_PRINTFBUF_SIZE;
-
-       for (i=0; i < len; i++) {
-               if (*c == '\n')
-                       prom_putc('\r');
-               prom_putc(*c++);
-       }
+       __prom_putc(c);
 }
 
+void (*prom_display)(const char *string, int pos, int clear) =
+               null_prom_display;
+void (*prom_monitor)(void) = null_prom_monitor;
+
+unsigned int lasat_ndelay_divider;
+
 static void setup_prom_vectors(void)
 {
        u32 version = *(u32 *)(RESET_VECTOR + 0x90);
 
        if (version >= 307) {
                prom_display = (void *)PROM_DISPLAY_ADDR;
-               prom_putc = (void *)PROM_PUTC_ADDR;
-               prom_printf = real_prom_printf;
+               __prom_putc = (void *)PROM_PUTC_ADDR;
                prom_monitor = (void *)PROM_MONITOR_ADDR;
        }
-       prom_printf("prom vectors set up\n");
+       printk(KERN_DEBUG "prom vectors set up\n");
 }
 
 static struct at93c_defs at93c_defs[N_MACHTYPES] = {
-       {(void *)AT93C_REG_100, (void *)AT93C_RDATA_REG_100, AT93C_RDATA_SHIFT_100,
-       AT93C_WDATA_SHIFT_100, AT93C_CS_M_100, AT93C_CLK_M_100},
-       {(void *)AT93C_REG_200, (void *)AT93C_RDATA_REG_200, AT93C_RDATA_SHIFT_200,
-       AT93C_WDATA_SHIFT_200, AT93C_CS_M_200, AT93C_CLK_M_200},
+       {
+               .reg            = (void *)AT93C_REG_100,
+               .rdata_reg      = (void *)AT93C_RDATA_REG_100,
+               .rdata_shift    = AT93C_RDATA_SHIFT_100,
+               .wdata_shift    = AT93C_WDATA_SHIFT_100,
+               .cs             = AT93C_CS_M_100,
+               .clk            = AT93C_CLK_M_100
+       }, {
+               .reg            = (void *)AT93C_REG_200,
+               .rdata_reg      = (void *)AT93C_RDATA_REG_200,
+               .rdata_shift    = AT93C_RDATA_SHIFT_200,
+               .wdata_shift    = AT93C_WDATA_SHIFT_200,
+               .cs             = AT93C_CS_M_200,
+               .clk            = AT93C_CLK_M_200
+       },
 };
 
 void __init prom_init(void)
@@ -100,22 +86,18 @@ void __init prom_init(void)
 
        setup_prom_vectors();
 
-       if (current_cpu_data.cputype == CPU_R5000) {
-               prom_printf("LASAT 200 board\n");
-               mips_machtype = MACH_LASAT_200;
-                lasat_ndelay_divider = LASAT_200_DIVIDER;
-        } else {
-               prom_printf("LASAT 100 board\n");
-               mips_machtype = MACH_LASAT_100;
-                lasat_ndelay_divider = LASAT_100_DIVIDER;
-        }
-
-       at93c = &at93c_defs[mips_machtype];
+       if (IS_LASAT_200()) {
+               printk(KERN_INFO "LASAT 200 board\n");
+               lasat_ndelay_divider = LASAT_200_DIVIDER;
+               at93c = &at93c_defs[1];
+       } else {
+               printk(KERN_INFO "LASAT 100 board\n");
+               lasat_ndelay_divider = LASAT_100_DIVIDER;
+               at93c = &at93c_defs[0];
+       }
 
        lasat_init_board_info();                /* Read info from EEPROM */
 
-       mips_machgroup = MACH_GROUP_LASAT;
-
        /* Get the command line */
        if (argc > 0) {
                strncpy(arcs_cmdline, argv[0], CL_SIZE-1);