X-Git-Url: http://pilppa.org/gitweb/?a=blobdiff_plain;f=arch%2Fparisc%2Fkernel%2Fpdc_cons.c;h=ccb68090781efdc24b553ce9e6162899ed349c03;hb=94ec359e45f2d6ec27027055f64bece03ea2bf07;hp=aab05767427c66222b0393c9aa38aedef9d00944;hpb=db1a19b38f3a85f475b4ad716c71be133d8ca48e;p=linux-2.6-omap-h63xx.git diff --git a/arch/parisc/kernel/pdc_cons.c b/arch/parisc/kernel/pdc_cons.c index aab05767427..ccb68090781 100644 --- a/arch/parisc/kernel/pdc_cons.c +++ b/arch/parisc/kernel/pdc_cons.c @@ -52,35 +52,30 @@ #include #include /* for iodc_call() proto and friends */ +static spinlock_t pdc_console_lock = SPIN_LOCK_UNLOCKED; 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)