patch-2.4.22 linux-2.4.22/arch/mips/sgi-ip27/ip27-console.c

Next file: linux-2.4.22/arch/mips/sgi-ip27/ip27-init.c
Previous file: linux-2.4.22/arch/mips/sgi-ip27/ip27-berr.c
Back to the patch index
Back to the overall index

diff -urN linux-2.4.21/arch/mips/sgi-ip27/ip27-console.c linux-2.4.22/arch/mips/sgi-ip27/ip27-console.c
@@ -3,25 +3,35 @@
  * License.  See the file "COPYING" in the main directory of this archive
  * for more details.
  *
- * Copyright (C) 2001 Ralf Baechle
+ * Copyright (C) 2001, 2002 Ralf Baechle
  */
 #include <linux/init.h>
 #include <linux/console.h>
 #include <linux/kdev_t.h>
 #include <linux/major.h>
+#include <linux/serial.h>
+#include <asm/page.h>
 #include <asm/sn/addrs.h>
 #include <asm/sn/sn0/hub.h>
 #include <asm/sn/klconfig.h>
 #include <asm/sn/ioc3.h>
 #include <asm/sn/sn_private.h>
 
-void prom_putchar(char c)
+#define IOC3_BAUD (22000000 / (3*16))
+#define IOC3_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST)
+
+static inline struct ioc3_uartregs *console_uart(void)
 {
 	struct ioc3 *ioc3;
-	struct ioc3_uartregs *uart;
 
-	ioc3 = (struct ioc3 *)KL_CONFIG_CH_CONS_INFO(master_nasid)->memory_base;
-	uart = &ioc3->sregs.uarta;
+	ioc3 = (struct ioc3 *)KL_CONFIG_CH_CONS_INFO(get_nasid())->memory_base;
+
+	return &ioc3->sregs.uarta;
+}
+
+void prom_putchar(char c)
+{
+	struct ioc3_uartregs *uart = console_uart();
 
 	while ((uart->iu_lsr & 0x20) == 0);
 	uart->iu_thr = c;
@@ -32,27 +42,24 @@
 	return 0;
 }
 
-static void
-ip27prom_console_write(struct console *con, const char *s, unsigned n)
+static void inline ioc3_console_probe(void)
 {
-	prom_printf("%s", s);
-}
+	struct serial_struct req;
 
-static kdev_t
-ip27prom_console_dev(struct console *c)
-{
-	return MKDEV(TTY_MAJOR, 64 + c->index);
-}
+	/* Register to interrupt zero because we share the interrupt with
+	   the serial driver which we don't properly support yet.  */
+	memset(&req, 0, sizeof(req));
+	req.irq             = 0;
+	req.flags           = IOC3_COM_FLAGS;
+	req.io_type         = SERIAL_IO_MEM;
+	req.iomem_reg_shift = 0;
+	req.baud_base       = IOC3_BAUD;
 
-static struct console ip27_prom_console = {
-    name:	"prom",
-    write:	ip27prom_console_write,
-    device:	ip27prom_console_dev,
-    flags:	CON_PRINTBUFFER,
-    index:	-1,
-};
+	req.iomem_base      = (unsigned char *) console_uart();
+	register_serial(&req);
+}
 
 __init void ip27_setup_console(void)
 {
-	register_console(&ip27_prom_console);
+	ioc3_console_probe();
 }

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)