Index: kernel/generic/src/console/chardev.c
===================================================================
--- kernel/generic/src/console/chardev.c	(revision 099aa78d1800ffcd774ba1b82de0ce32c3337949)
+++ kernel/generic/src/console/chardev.c	(revision 2a34e4c88f99ff600ede84d45f559c28c65e2ea5)
@@ -38,39 +38,59 @@
 #include <synch/spinlock.h>
 
-/** Initialize character device.
+/** Initialize input character device.
  *
- * @param chardev Character device.
- * @param op Implementation of character device operations.
+ * @param indev Input character device.
+ * @param op    Implementation of input character device operations.
+ *
  */
-void chardev_initialize(char *name, chardev_t *chardev, 
-			chardev_operations_t *op)
+void indev_initialize(char *name, indev_t *indev,
+    indev_operations_t *op)
 {
-	chardev->name = name;
-
-	waitq_initialize(&chardev->wq);
-	spinlock_initialize(&chardev->lock, "chardev");
-	chardev->counter = 0;
-	chardev->index = 0;
-	chardev->op = op;
+	indev->name = name;
+	waitq_initialize(&indev->wq);
+	spinlock_initialize(&indev->lock, "indev");
+	indev->counter = 0;
+	indev->index = 0;
+	indev->op = op;
 }
 
 /** Push character read from input character device.
  *
- * @param chardev Character device.
- * @param ch Character being pushed.
+ * @param indev Input character device.
+ * @param ch    Character being pushed.
+ *
  */
-void chardev_push_character(chardev_t *chardev, uint8_t ch)
+void indev_push_character(indev_t *indev, uint8_t ch)
 {
-	spinlock_lock(&chardev->lock);
-	chardev->counter++;
-	if (chardev->counter == CHARDEV_BUFLEN - 1) {
-		/* buffer full => disable device interrupt */
-		chardev->op->suspend(chardev);
+	ASSERT(indev);
+	
+	spinlock_lock(&indev->lock);
+	if (indev->counter == INDEV_BUFLEN - 1) {
+		/* Buffer full */
+		spinlock_unlock(&indev->lock);
+		return;
 	}
 	
-	chardev->buffer[chardev->index++] = ch;
-	chardev->index = chardev->index % CHARDEV_BUFLEN; /* index modulo size of buffer */
-	waitq_wakeup(&chardev->wq, WAKEUP_FIRST);
-	spinlock_unlock(&chardev->lock);
+	indev->counter++;
+	indev->buffer[indev->index++] = ch;
+	
+	/* Index modulo size of buffer */
+	indev->index = indev->index % INDEV_BUFLEN;
+	waitq_wakeup(&indev->wq, WAKEUP_FIRST);
+	spinlock_unlock(&indev->lock);
+}
+
+/** Initialize output character device.
+ *
+ * @param outdev Output character device.
+ * @param op     Implementation of output character device operations.
+ *
+ */
+void outdev_initialize(char *name, outdev_t *outdev,
+    outdev_operations_t *op)
+{
+	outdev->name = name;
+	spinlock_initialize(&outdev->lock, "outdev");
+	outdev->op = op;
 }
 
