Index: arch/ia64/Makefile.inc
===================================================================
--- arch/ia64/Makefile.inc	(revision f4338d2fac6a4e6b6236f00ee0b78b29bc920b0a)
+++ arch/ia64/Makefile.inc	(revision a8c482416088afaeb8e859ce90ef77f82a93b672)
@@ -57,3 +57,4 @@
 	arch/$(ARCH)/src/fmath.c \
 	arch/$(ARCH)/src/mm/frame.c \
-	arch/$(ARCH)/src/drivers/it.c
+	arch/$(ARCH)/src/drivers/it.c \
+	arch/$(ARCH)/src/drivers/keyboard.c
Index: arch/ia64/include/ski/ski.h
===================================================================
--- arch/ia64/include/ski/ski.h	(revision f4338d2fac6a4e6b6236f00ee0b78b29bc920b0a)
+++ arch/ia64/include/ski/ski.h	(revision a8c482416088afaeb8e859ce90ef77f82a93b672)
@@ -30,9 +30,14 @@
 #define __SKI_H__
 
+#include <arch/types.h>
+
+
 #define SKI_INIT_CONSOLE	20
+#define SKI_GETCHAR		21
 #define SKI_PUTCHAR		31
 
 extern void ski_init_console(void);
 extern void ski_putchar(const char ch);
+extern  __s32 ski_getchar(void);
 	
 #endif
Index: arch/ia64/include/types.h
===================================================================
--- arch/ia64/include/types.h	(revision f4338d2fac6a4e6b6236f00ee0b78b29bc920b0a)
+++ arch/ia64/include/types.h	(revision a8c482416088afaeb8e859ce90ef77f82a93b672)
@@ -33,4 +33,9 @@
 
 typedef signed char __s8;
+typedef signed short int __s16;
+typedef signed int __s32;
+typedef signed long __s64;
+
+
 
 typedef unsigned char __u8;
Index: arch/ia64/src/drivers/it.c
===================================================================
--- arch/ia64/src/drivers/it.c	(revision f4338d2fac6a4e6b6236f00ee0b78b29bc920b0a)
+++ arch/ia64/src/drivers/it.c	(revision a8c482416088afaeb8e859ce90ef77f82a93b672)
@@ -36,4 +36,6 @@
 #include <time/clock.h>
 
+void keyboard(void);
+
 /** Initialize Interval Timer. */
 void it_init(void)
@@ -64,3 +66,4 @@
 	srlz_d();				/* propagate changes */
 	clock();
+	keyboard();
 }
Index: arch/ia64/src/ia64.c
===================================================================
--- arch/ia64/src/ia64.c	(revision f4338d2fac6a4e6b6236f00ee0b78b29bc920b0a)
+++ arch/ia64/src/ia64.c	(revision a8c482416088afaeb8e859ce90ef77f82a93b672)
@@ -33,4 +33,7 @@
 #include <arch/barrier.h>
 #include <arch/types.h>
+#include <arch/drivers/keyboard.h>
+
+#include <console/console.h>
 
 void arch_pre_mm_init(void)
@@ -41,4 +44,5 @@
 	
 	ski_init_console();
+	keyboard_init();
 	it_init();
 }
Index: arch/ia64/src/ski/ski.c
===================================================================
--- arch/ia64/src/ski/ski.c	(revision f4338d2fac6a4e6b6236f00ee0b78b29bc920b0a)
+++ arch/ia64/src/ski/ski.c	(revision a8c482416088afaeb8e859ce90ef77f82a93b672)
@@ -65,2 +65,25 @@
 	if (ch == '\n') ski_putchar('\r');
 }
+
+
+/** Display character on debug console
+ *
+ * Use SSC (Simulator System Call) to
+ * get character from debug console.
+ */
+__s32 ski_getchar(void)
+{
+	__u64 ch;
+	
+	__asm__ (
+		"mov r15=%0\n"
+		"break 0x80000;;\n"	/* modifies r8 */
+		"mov %1=r8;;\n"		
+
+		:
+		: "i" (SKI_GETCHAR), "r" (ch)
+		: "r15",  "r8"
+	);
+
+	return (__s32)ch;
+}
