Index: HelenOS.config
===================================================================
--- HelenOS.config	(revision 648c9d96c0f1fac40bb51cbd1cc306101c6b6735)
+++ HelenOS.config	(revision 969383551290fbbbc07fb4c7ee15832d490665b5)
@@ -330,10 +330,10 @@
 @ "generic" Keyboard or serial line
 @ "none" No input device
-! [PLATFORM=ia32|PLATFORM=arm32|PLATFORM=amd64|PLATFORM=mips32] CONFIG_HID_IN (choice)
+! [PLATFORM=ia32|PLATFORM=arm32|PLATFORM=amd64|PLATFORM=mips32|PLATFORM=sparc64] CONFIG_HID_IN (choice)
 
 % Output device class
 @ "generic" Monitor or serial line
 @ "none" No output device
-! [PLATFORM=ia32|PLATFORM=amd64|(PLATFORM=mips32&MACHINE=msim)] CONFIG_HID_OUT (choice)
+! [PLATFORM=ia32|PLATFORM=amd64|PLATFORM=sparc64|(PLATFORM=mips32&MACHINE=msim)] CONFIG_HID_OUT (choice)
 
 % Output device class
@@ -366,7 +366,16 @@
 ! [(CONFIG_HID_OUT=generic|CONFIG_HID_OUT=serial)&PLATFORM=arm32] CONFIG_ARM_PRN (y/n)
 
+% Support for NS16550 controller
+! [(CONFIG_HID_IN=generic|CONFIG_HID_IN=keyboard)&PLATFORM=sparc64] CONFIG_NS16550 (y/n)
+
+% Support for Z8530 controller
+! [(CONFIG_HID_IN=generic|CONFIG_HID_IN=keyboardl)&PLATFORM=sparc64] CONFIG_Z8530 (y/n)
+
 % i8042 controller support
 ! [CONFIG_PC_KBD=y] CONFIG_I8042 (y)
 
+% Sun keyboard support
+! [PLATFORM=sparc64&(CONFIG_NS16550=y|CONFIG_Z8530=y] CONFIG_SUN_KBD (y)
+
 % Dummy serial line input
 ! [CONFIG_MIPS_KBD=y|CONFIG_ARM_KBD=y] CONFIG_DSRLNIN (y)
@@ -384,7 +393,4 @@
 #! [(CONFIG_HID_IN=keyboard&PLATFORM=sparc64)|(CONFIG_HID_IN=serial&PLATFORM=ia64)] CONFIG_NS16550 (y/n)
 
-#% Support for Z8530 controller
-#! [(CONFIG_HID_IN!=none|CONFIG_HID_OUT=generic|CONFIG_HID_OUT=serial)&PLATFORM=sparc64] CONFIG_Z8530 (y/n)
-
 #% Support for Serengeti console
 #! [(CONFIG_HID_IN=serial|CONFIG_HID_OUT=serial)&MACHINE=serengeti] CONFIG_SGCN (y/n)
@@ -393,7 +399,4 @@
 #! [(CONFIG_HID_IN=generic|CONFIG_HID_IN=keyboard)&MACHINE=i460GX] CONFIG_PC_KBD (y/n)
 
-#% Sun keyboard support
-#! [(CONFIG_HID_IN=generic|CONFIG_HID_IN=keyboard)&PLATFORM=sparc64] CONFIG_SUN_KBD (y/n)
-
 % EGA support
 ! [CONFIG_HID_OUT=generic&(PLATFORM=ia32|PLATFORM=amd64)] CONFIG_EGA (y/n)
@@ -409,8 +412,5 @@
 
 % Framebuffer support
-! [(CONFIG_HID_OUT=generic|CONFIG_HID_OUT=monitor)&PLATFORM=arm32] CONFIG_FB (y/n)
-
-% Framebuffer support
-! [CONFIG_HID_OUT=none] CONFIG_FB (n)
+! [(CONFIG_HID_OUT=generic|CONFIG_HID_OUT=monitor)&(PLATFORM=arm32|PLATFORM=sparc64)] CONFIG_FB (y/n)
 
 % Framebuffer width
@@ -424,5 +424,5 @@
 @ "1600"
 @ "2048"
-! [(PLATFORM=ia32|PLATFORM=amd64)&CONFIG_FB=y] CONFIG_VESA_WIDTH (choice)
+! [(PLATFORM=ia32|PLATFORM=amd64)&CONFIG_HID_OUT!=none&CONFIG_FB=y] CONFIG_VESA_WIDTH (choice)
 
 % Framebuffer height
@@ -437,5 +437,5 @@
 @ "1200"
 @ "1536"
-! [(PLATFORM=ia32|PLATFORM=amd64)&CONFIG_FB=y] CONFIG_VESA_HEIGHT (choice)
+! [(PLATFORM=ia32|PLATFORM=amd64)&CONFIG_HID_OUT!=none&CONFIG_FB=y] CONFIG_VESA_HEIGHT (choice)
 
 % Framebuffer depth
@@ -443,5 +443,5 @@
 @ "16"
 @ "24"
-! [(PLATFORM=ia32|PLATFORM=amd64)&CONFIG_FB=y] CONFIG_VESA_BPP (choice)
+! [(PLATFORM=ia32|PLATFORM=amd64)&CONFIG_HID_OUT!=none&CONFIG_FB=y] CONFIG_VESA_BPP (choice)
 
 % Start AP processors by the loader
Index: kernel/arch/sparc64/Makefile.inc
===================================================================
--- kernel/arch/sparc64/Makefile.inc	(revision 648c9d96c0f1fac40bb51cbd1cc306101c6b6735)
+++ kernel/arch/sparc64/Makefile.inc	(revision 969383551290fbbbc07fb4c7ee15832d490665b5)
@@ -77,5 +77,6 @@
 	arch/$(KARCH)/src/drivers/kbd.c \
 	arch/$(KARCH)/src/drivers/sgcn.c \
-	arch/$(KARCH)/src/drivers/pci.c
+	arch/$(KARCH)/src/drivers/pci.c \
+	arch/$(KARCH)/src/drivers/fhc.c
 
 ifeq ($(CONFIG_FB),y)
@@ -94,7 +95,2 @@
 		arch/$(KARCH)/src/mm/tsb.c
 endif
-
-ifdef CONFIG_Z8530
-	ARCH_SOURCES += \
-		arch/$(KARCH)/src/drivers/fhc.c
-endif
Index: kernel/arch/sparc64/src/console.c
===================================================================
--- kernel/arch/sparc64/src/console.c	(revision 648c9d96c0f1fac40bb51cbd1cc306101c6b6735)
+++ kernel/arch/sparc64/src/console.c	(revision 969383551290fbbbc07fb4c7ee15832d490665b5)
@@ -63,32 +63,27 @@
 {
 #ifdef CONFIG_FB
-	ofw_tree_property_t *prop;
-	ofw_tree_node_t *screen;
-	ofw_tree_node_t *keyboard;
+	ofw_tree_property_t *prop_scr = ofw_tree_getprop(aliases, "screen");
+	if (!prop_scr)
+		panic("Cannot find property 'screen'.");
+	if (!prop_scr->value)
+		panic("Cannot find screen alias.");
+	ofw_tree_node_t *screen = ofw_tree_lookup(prop_scr->value);
+	if (!screen)
+		panic("Cannot find %s.", prop_scr->value);
 	
-	prop = ofw_tree_getprop(aliases, "screen");
-	if (!prop)
-		panic("Cannot find property 'screen'.");
-	if (!prop->value)
-		panic("Cannot find screen alias.");
-	screen = ofw_tree_lookup(prop->value);
-	if (!screen)
-		panic("Cannot find %s.", prop->value);
+	scr_init(screen);
+#endif
 
-	scr_init(screen);
-
-	prop = ofw_tree_getprop(aliases, "keyboard");
-	if (!prop)
+#ifdef CONFIG_SUN_KBD
+	ofw_tree_property_t *prop_kbd = ofw_tree_getprop(aliases, "keyboard");
+	if (!prop_kbd)
 		panic("Cannot find property 'keyboard'.");
-	if (!prop->value)
+	if (!prop_kbd->value)
 		panic("Cannot find keyboard alias.");
-	keyboard = ofw_tree_lookup(prop->value);
+	ofw_tree_node_t *keyboard = ofw_tree_lookup(prop_kbd->value);
 	if (!keyboard)
-		panic("Cannot find %s.", prop->value);
-
+		panic("Cannot find %s.", prop_kbd->value);
+	
 	kbd_init(keyboard);
-#else
-	panic("Standard console requires FB, "
-	      "but the kernel is not compiled with FB support.");
 #endif
 }
Index: kernel/arch/sparc64/src/drivers/kbd.c
===================================================================
--- kernel/arch/sparc64/src/drivers/kbd.c	(revision 648c9d96c0f1fac40bb51cbd1cc306101c6b6735)
+++ kernel/arch/sparc64/src/drivers/kbd.c	(revision 969383551290fbbbc07fb4c7ee15832d490665b5)
@@ -58,5 +58,5 @@
 kbd_type_t kbd_type = KBD_UNKNOWN;
 
-#if defined (CONFIG_Z8530) || defined (CONFIG_NS16550)
+#ifdef CONFIG_SUN_KBD
 
 /** Initialize keyboard.
@@ -169,7 +169,7 @@
 		    offset;
 		
-		indev_t *kbrdin = z8530_init(z8530, devno, inr, cir, cir_arg);
-		if (kbrdin)
-			kbrd_init(kbrdin);
+		indev_t *kbrdin_z8530 = z8530_init(z8530, devno, inr, cir, cir_arg);
+		if (kbrdin_z8530)
+			kbrd_init(kbrdin_z8530);
 		
 		/*
@@ -192,7 +192,7 @@
 		    offset;
 		
-		indev_t *kbrdin = ns16550_init(ns16550, devno, inr, cir, cir_arg);
-		if (kbrdin)
-			kbrd_init(kbrdin);
+		indev_t *kbrdin_ns16550 = ns16550_init(ns16550, devno, inr, cir, cir_arg);
+		if (kbrdin_ns16550)
+			kbrd_init(kbrdin_ns16550);
 		
 		/*
@@ -215,5 +215,6 @@
 }
 
-	#endif
+#endif
+
 /** @}
  */
Index: kernel/genarch/include/drivers/z8530/z8530.h
===================================================================
--- kernel/genarch/include/drivers/z8530/z8530.h	(revision 648c9d96c0f1fac40bb51cbd1cc306101c6b6735)
+++ kernel/genarch/include/drivers/z8530/z8530.h	(revision 969383551290fbbbc07fb4c7ee15832d490665b5)
@@ -121,5 +121,5 @@
 } z8530_instance_t;
 
-extern devin_t *z8530_init(z8530_t *, devno_t, inr_t, cir_t, void *);
+extern indev_t *z8530_init(z8530_t *, devno_t, inr_t, cir_t, void *);
 
 #endif
Index: kernel/genarch/src/drivers/dsrln/dsrlnin.c
===================================================================
--- kernel/genarch/src/drivers/dsrln/dsrlnin.c	(revision 648c9d96c0f1fac40bb51cbd1cc306101c6b6735)
+++ kernel/genarch/src/drivers/dsrln/dsrlnin.c	(revision 969383551290fbbbc07fb4c7ee15832d490665b5)
@@ -40,5 +40,5 @@
 #include <arch/asm.h>
 
-indev_operations_t kbrdin_ops = {
+static indev_operations_t kbrdin_ops = {
 	.poll = NULL
 };
Index: kernel/genarch/src/drivers/i8042/i8042.c
===================================================================
--- kernel/genarch/src/drivers/i8042/i8042.c	(revision 648c9d96c0f1fac40bb51cbd1cc306101c6b6735)
+++ kernel/genarch/src/drivers/i8042/i8042.c	(revision 969383551290fbbbc07fb4c7ee15832d490665b5)
@@ -43,5 +43,5 @@
 #include <mm/slab.h>
 
-indev_operations_t kbrdin_ops = {
+static indev_operations_t kbrdin_ops = {
 	.poll = NULL
 };
Index: kernel/genarch/src/drivers/ns16550/ns16550.c
===================================================================
--- kernel/genarch/src/drivers/ns16550/ns16550.c	(revision 648c9d96c0f1fac40bb51cbd1cc306101c6b6735)
+++ kernel/genarch/src/drivers/ns16550/ns16550.c	(revision 969383551290fbbbc07fb4c7ee15832d490665b5)
@@ -43,5 +43,5 @@
 #define LSR_DATA_READY  0x01
 
-indev_operations_t kbrdin_ops = {
+static indev_operations_t kbrdin_ops = {
 	.poll = NULL
 };
@@ -65,5 +65,5 @@
 	if (pio_read_8(&dev->lsr) & LSR_DATA_READY) {
 		uint8_t x = pio_read_8(&dev->rbr);
-		chardev_push_character(&instance->kbrdin, x);
+		indev_push_character(&instance->kbrdin, x);
 	}
 }
Index: kernel/genarch/src/drivers/z8530/z8530.c
===================================================================
--- kernel/genarch/src/drivers/z8530/z8530.c	(revision 648c9d96c0f1fac40bb51cbd1cc306101c6b6735)
+++ kernel/genarch/src/drivers/z8530/z8530.c	(revision 969383551290fbbbc07fb4c7ee15832d490665b5)
@@ -41,5 +41,5 @@
 #include <mm/slab.h>
 
-indev_operations_t kbrdin_ops = {
+static indev_operations_t kbrdin_ops = {
 	.poll = NULL
 };
@@ -83,5 +83,5 @@
 	if (z8530_read(&dev->ctl_a, RR0) & RR0_RCA) {
 		uint8_t x = z8530_read(&dev->ctl_a, RR8);
-		chardev_push_character(&instance->kbrdin, x);
+		indev_push_character(&instance->kbrdin, x);
 	}
 }
