Index: kernel/arch/amd64/Makefile.inc
===================================================================
--- kernel/arch/amd64/Makefile.inc	(revision 287920fbf506e950a6b1035b8520eeaf673338bf)
+++ kernel/arch/amd64/Makefile.inc	(revision a710680c4299b4bf82de04a739448ab83fc1b87f)
@@ -62,4 +62,5 @@
 
 CONFIG_I8042 = y
+DEFS += -DCONFIG_I8042
 
 ## Accepted configuration directives
Index: kernel/arch/ia32/Makefile.inc
===================================================================
--- kernel/arch/ia32/Makefile.inc	(revision 287920fbf506e950a6b1035b8520eeaf673338bf)
+++ kernel/arch/ia32/Makefile.inc	(revision a710680c4299b4bf82de04a739448ab83fc1b87f)
@@ -81,4 +81,5 @@
 
 CONFIG_I8042 = y
+DEFS += -DCONFIG_I8042
 
 ## Accepted configuration directives
Index: kernel/arch/sparc64/Makefile.inc
===================================================================
--- kernel/arch/sparc64/Makefile.inc	(revision 287920fbf506e950a6b1035b8520eeaf673338bf)
+++ kernel/arch/sparc64/Makefile.inc	(revision a710680c4299b4bf82de04a739448ab83fc1b87f)
@@ -61,9 +61,22 @@
 CONFIG_FB = y
 
-## Compile with support for z8530 controller.
-#
 
-CONFIG_Z8530 = y
-DEFS += -DCONFIG_Z8530
+ifeq ($(MACHINE),enterprise)
+	## Compile with support for z8530 controller.
+	#
+
+	CONFIG_Z8530 = y
+	DEFS += -DCONFIG_Z8530
+endif
+ifeq ($(MACHINE),ultra)
+	## Compile with support for ns16550 controller.
+	#
+	
+	CONFIG_NS16550 = y
+	DEFS += -DCONFIG_NS16550
+	
+	DEFS += -DKBD_ADDR_OVRD=0x1fff13083f8ULL
+endif
+
 
 ARCH_SOURCES = \
Index: kernel/arch/sparc64/include/drivers/ns16550.h
===================================================================
--- kernel/arch/sparc64/include/drivers/ns16550.h	(revision a710680c4299b4bf82de04a739448ab83fc1b87f)
+++ kernel/arch/sparc64/include/drivers/ns16550.h	(revision a710680c4299b4bf82de04a739448ab83fc1b87f)
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2006 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup sparc64	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef KERN_sparc64_NS16550_H_
+#define KERN_sparc64_NS16550_H_
+
+#include <arch/types.h>
+#include <arch/drivers/kbd.h>
+
+#define RBR_REG		0	/** Receiver Buffer Register. */
+#define LSR_REG		5	/** Line Status Register. */
+
+static inline uint8_t ns16550_rbr_read(void)
+{
+	return kbd_virt_address[RBR_REG];
+}
+
+static inline uint8_t ns16550_lsr_read(void)
+{
+	return kbd_virt_address[LSR_REG];
+}
+
+#endif
+
+/** @}
+ */
Index: kernel/arch/sparc64/src/console.c
===================================================================
--- kernel/arch/sparc64/src/console.c	(revision 287920fbf506e950a6b1035b8520eeaf673338bf)
+++ kernel/arch/sparc64/src/console.c	(revision a710680c4299b4bf82de04a739448ab83fc1b87f)
@@ -43,6 +43,6 @@
 #include <genarch/kbd/z8530.h>
 #endif
-#ifdef CONFIG_16550A
-#include <genarch/kbd/16550a.h>
+#ifdef CONFIG_NS16550
+#include <genarch/kbd/ns16550.h>
 #endif
 
@@ -65,4 +65,9 @@
 		bootinfo.screen.bpp, bootinfo.screen.scanline, true);
 
+#ifdef KBD_ADDR_OVRD
+	if (!bootinfo.keyboard.addr)
+		bootinfo.keyboard.addr = KBD_ADDR_OVRD;
+#endif
+
 	if (bootinfo.keyboard.addr)
 		kbd_init();
@@ -82,6 +87,6 @@
 		z8530_poll();
 #endif
-#ifdef CONFIG_16550A
-		16550a_poll();
+#ifdef CONFIG_NS16550
+		ns16550_poll();
 #endif
 		thread_usleep(KEYBOARD_POLL_PAUSE);
Index: kernel/arch/sparc64/src/drivers/kbd.c
===================================================================
--- kernel/arch/sparc64/src/drivers/kbd.c	(revision 287920fbf506e950a6b1035b8520eeaf673338bf)
+++ kernel/arch/sparc64/src/drivers/kbd.c	(revision a710680c4299b4bf82de04a739448ab83fc1b87f)
@@ -37,6 +37,6 @@
 #include <genarch/kbd/z8530.h>
 #endif
-#ifdef CONFIG_16650A
-#include <genarch/kbd/16650a.h>
+#ifdef CONFIG_NS16550
+#include <genarch/kbd/ns16550.h>
 #endif
 
@@ -70,6 +70,6 @@
 	z8530_init();
 #endif
-#ifdef CONFIG_16650A
-	16650A_init();
+#ifdef CONFIG_NS16550
+	ns16550_init();
 #endif
 }
