Index: uspace/drv/char/i8042/i8042.c
===================================================================
--- uspace/drv/char/i8042/i8042.c	(revision a8f7029eac2da3f3cb8d49bac5fe5f75d6148b70)
+++ uspace/drv/char/i8042/i8042.c	(revision e747303594ff18bae4f0da1f5985531c8e768d87)
@@ -150,9 +150,9 @@
 	    controller->aux_buffer_end : controller->kbd_buffer_end;
 	if (*buffer != NULL && *buffer < buffer_end) {
-		*(*buffer)++ = data;
-		if (*buffer == buffer_end)
+		*(*buffer) = data;
+		if (++(*buffer) == buffer_end)
 			fibril_condvar_signal(&controller->data_avail);
 	} else {
-		ddf_msg(LVL_WARN, "Unhandled %s data: %x , status: %x.",
+		ddf_msg(LVL_WARN, "Unhandled %s data: %hhx , status: %hhx.",
 		    (status & i8042_AUX_DATA) ? "AUX" : "KBD", data, status);
 	}
@@ -173,7 +173,12 @@
 		return -1;
 
-	dev->kbd_fun = ddf_fun_create(ddf_dev, fun_exposed, "ps2a");
+	dev->kbd_fun = ddf_fun_create(ddf_dev, fun_inner, "ps2a");
 	if (!dev->kbd_fun)
 		return ENOMEM;
+	int ret = ddf_fun_add_match_id(dev->kbd_fun, "xtkbd", 90);
+	if (ret != EOK) {
+		ddf_fun_destroy(dev->kbd_fun);
+		return ret;
+	}
 
 	dev->mouse_fun = ddf_fun_create(ddf_dev, fun_exposed, "ps2b");
@@ -208,5 +213,5 @@
 } else (void)0
 
-	int ret = ddf_fun_bind(dev->kbd_fun);
+	ret = ddf_fun_bind(dev->kbd_fun);
 	CHECK_RET_DESTROY(ret,
 	    "Failed to bind keyboard function: %s.\n", str_error(ret));
@@ -291,5 +296,5 @@
 	}
 	fibril_mutex_unlock(&controller->guard);
-	return EOK;
+	return size;
 }
 /*----------------------------------------------------------------------------*/
@@ -317,5 +322,5 @@
 	controller->kbd_buffer_end = NULL;
 	fibril_mutex_unlock(&controller->guard);
-	return EOK;
+	return size;
 }
 /*----------------------------------------------------------------------------*/
@@ -332,5 +337,5 @@
 	}
 	fibril_mutex_unlock(&controller->guard);
-	return EOK;
+	return size;
 }
 /*----------------------------------------------------------------------------*/
@@ -358,5 +363,5 @@
 	controller->aux_buffer_end = NULL;
 	fibril_mutex_unlock(&controller->guard);
-	return EOK;
+	return size;
 }
 /*----------------------------------------------------------------------------*/
