Index: kernel/printk.c =================================================================== RCS file: /home/bh/cvskern/linux.220p7/kernel/printk.c,v retrieving revision 1.1.1.1 diff -a -u -r1.1.1.1 printk.c --- printk.c 1999/01/13 19:10:47 1.1.1.1 +++ printk.c 1999/01/18 16:50:24 @@ -229,6 +229,56 @@ return do_syslog(type, buf, len); } +#if 1 + +/* + * Some code fragments to do direct output on the uart + * + * $Revision: 1.1 $ + */ +#define UART_0_BASE 0x03f8 /* The DB9 on Hugh/Borg backplane */ +#define UART_1_BASE 0x02f8 /* Not brought out on Hugh/Borg */ + +/* copied from arcs/include/sys/uart16550.h */ +#define REG_DAT 0 +#define REG_LSR 5 + +#define LSR_XHRE 0x20 /* tx hold reg is now empty */ + +/* somewhat ripped off from Linux kernel source file include/asm-i386/io.h */ +static inline void +__outb(unsigned char value, unsigned short port) +{ + __asm__ __volatile__ ("outb %b0,%w1" : : "a" (value), "Nd" (port)); +} + +static inline unsigned char +__inb(unsigned short port) +{ + unsigned char _v; + __asm__ __volatile__ ("inb %w1,%0" : "=a" (_v) : "Nd" (port)); + return _v; +} + +static void inline +prbyte(unsigned char byte) +{ +#define BASE UART_0_BASE + while ((__inb(BASE + REG_LSR) & LSR_XHRE) == 0) { + } + __outb(byte, BASE + REG_DAT); +} +prstr(char *str, int bytes) +{ + while (bytes--) { + char c = *str++; + if (c == '\n') { + prbyte('\r'); + } + prbyte(c); + } +} +#endif spinlock_t console_lock; @@ -278,6 +328,7 @@ break; } } +#if 0 if (msg_level < console_loglevel && console_drivers) { struct console *c = console_drivers; while(c) { @@ -286,6 +337,9 @@ c = c->next; } } +#else + prstr(msg, p - msg + line_feed); +#endif if (line_feed) msg_level = -1; }