perf: Do the big rename: Performance Counters -> Performance Events
[safe/jmp/linux-2.6] / arch / parisc / kernel / pdc_cons.c
index 01f676d..1ff366c 100644 (file)
 
 /* Define EARLY_BOOTUP_DEBUG to debug kernel related boot problems. 
  * On production kernels EARLY_BOOTUP_DEBUG should be undefined. */
-#undef EARLY_BOOTUP_DEBUG
+#define EARLY_BOOTUP_DEBUG
 
 
-#include <linux/config.h>
 #include <linux/kernel.h>
 #include <linux/console.h>
 #include <linux/string.h>
 #include <linux/init.h>
-#include <linux/delay.h>
-#include <linux/sched.h>
-#include <linux/interrupt.h>
 #include <linux/major.h>
 #include <linux/tty.h>
-#include <asm/page.h>
-#include <asm/types.h>
-#include <asm/system.h>
 #include <asm/pdc.h>           /* for iodc_call() proto and friends */
 
+static DEFINE_SPINLOCK(pdc_console_lock);
 
 static void pdc_console_write(struct console *co, const char *s, unsigned count)
 {
-       while(count--)
-               pdc_iodc_putc(*s++);
+       int i = 0;
+       unsigned long flags;
+
+       spin_lock_irqsave(&pdc_console_lock, flags);
+       do {
+               i += pdc_iodc_print(s + i, count - i);
+       } while (i < count);
+       spin_unlock_irqrestore(&pdc_console_lock, flags);
 }
 
-void pdc_outc(unsigned char c)
-{
-       pdc_iodc_outc(c);
-}
-
-void pdc_printf(const char *fmt, ...)
+int pdc_console_poll_key(struct console *co)
 {
-       va_list args;
-       char buf[1024];
-       int i, len;
+       int c;
+       unsigned long flags;
 
-       va_start(args, fmt);
-       len = vscnprintf(buf, sizeof(buf), fmt, args);
-       va_end(args);
+       spin_lock_irqsave(&pdc_console_lock, flags);
+       c = pdc_iodc_getc();
+       spin_unlock_irqrestore(&pdc_console_lock, flags);
 
-       for (i = 0; i < len; i++)
-               pdc_iodc_outc(buf[i]);
-}
-
-int pdc_console_poll_key(struct console *co)
-{
-       return pdc_iodc_getc();
+       return c;
 }
 
 static int pdc_console_setup(struct console *co, char *options)
@@ -96,7 +84,8 @@ static int pdc_console_setup(struct console *co, char *options)
 }
 
 #if defined(CONFIG_PDC_CONSOLE)
-#define PDC_CONSOLE_DEVICE pdc_console_device
+#include <linux/vt_kern.h>
+
 static struct tty_driver * pdc_console_device (struct console *c, int *index)
 {
        extern struct tty_driver console_driver;
@@ -104,22 +93,19 @@ static struct tty_driver * pdc_console_device (struct console *c, int *index)
        return &console_driver;
 }
 #else
-#define PDC_CONSOLE_DEVICE NULL
+#define pdc_console_device NULL
 #endif
 
 static struct console pdc_cons = {
        .name =         "ttyB",
        .write =        pdc_console_write,
-       .device =       PDC_CONSOLE_DEVICE,
+       .device =       pdc_console_device,
        .setup =        pdc_console_setup,
-       .flags =        CON_BOOT|CON_PRINTBUFFER|CON_ENABLED,
+       .flags =        CON_BOOT | CON_PRINTBUFFER | CON_ENABLED,
        .index =        -1,
 };
 
 static int pdc_console_initialized;
-extern unsigned long con_start;        /* kernel/printk.c */
-extern unsigned long log_end;  /* kernel/printk.c */
-
 
 static void pdc_console_init_force(void)
 {
@@ -146,27 +132,11 @@ void __init pdc_console_init(void)
 }
 
 
-/* Unregister the pdc console with the printk console layer */
-void pdc_console_die(void)
-{
-       if (!pdc_console_initialized)
-               return;
-       --pdc_console_initialized;
-
-       printk(KERN_INFO "Switching from PDC console\n");
-
-       /* Don't repeat what we've already printed */
-       con_start = log_end;
-
-       unregister_console(&pdc_cons);
-}
-
-
 /*
  * Used for emergencies. Currently only used if an HPMC occurs. If an
  * HPMC occurs, it is possible that the current console may not be
- * properly initialed after the PDC IO reset. This routine unregisters all
- * of the current consoles, reinitializes the pdc console and
+ * properly initialised after the PDC IO reset. This routine unregisters
+ * all of the current consoles, reinitializes the pdc console and
  * registers it.
  */
 
@@ -177,13 +147,13 @@ void pdc_console_restart(void)
        if (pdc_console_initialized)
                return;
 
+       /* If we've already seen the output, don't bother to print it again */
+       if (console_drivers != NULL)
+               pdc_cons.flags &= ~CON_PRINTBUFFER;
+
        while ((console = console_drivers) != NULL)
                unregister_console(console_drivers);
 
-       /* Don't repeat what we've already printed */
-       con_start = log_end;
-       
        /* force registering the pdc console */
        pdc_console_init_force();
 }
-