Index: kernel/generic/include/console/chardev.h
===================================================================
--- kernel/generic/include/console/chardev.h	(revision 411b6a6f0339f865eaac5f492f2277fdfbbd5fcc)
+++ kernel/generic/include/console/chardev.h	(revision 8030f499b40bd1ac96c03796aede95dfb937ed6d)
@@ -40,38 +40,57 @@
 #include <synch/spinlock.h>
 
-#define CHARDEV_BUFLEN 512
+#define INDEV_BUFLEN  512
 
-struct chardev;
+struct indev;
 
-/* Character device operations interface. */
+/* Input character device operations interface. */
 typedef struct {
-	/** Suspend pushing characters. */
-	void (* suspend)(struct chardev *);
-	/** Resume pushing characters. */
-	void (* resume)(struct chardev *);
-	/** Write character to stream. */
-	void (* write)(struct chardev *, char c, bool silent);
 	/** Read character directly from device, assume interrupts disabled. */
-	char (* read)(struct chardev *); 
-} chardev_operations_t;
+	char (* poll)(struct indev *);
+} indev_operations_t;
 
 /** Character input device. */
-typedef struct chardev {
+typedef struct indev {
+	char *name;
+	waitq_t wq;
+	
+	/** Protects everything below. */
+	SPINLOCK_DECLARE(lock);
+	uint8_t buffer[INDEV_BUFLEN];
+	count_t counter;
+	
+	/** Implementation of indev operations. */
+	indev_operations_t *op;
+	index_t index;
+	void *data;
+} indev_t;
+
+
+struct outdev;
+
+/* Output character device operations interface. */
+typedef struct {
+	/** Write character to output. */
+	void (* write)(struct outdev *, char c, bool silent);
+} outdev_operations_t;
+
+/** Character input device. */
+typedef struct outdev {
 	char *name;
 	
-	waitq_t wq;
 	/** Protects everything below. */
-	SPINLOCK_DECLARE(lock);	
-	uint8_t buffer[CHARDEV_BUFLEN];
-	count_t counter;
-	/** Implementation of chardev operations. */
-	chardev_operations_t *op;
-	index_t index;
+	SPINLOCK_DECLARE(lock);
+	
+	/** Implementation of outdev operations. */
+	outdev_operations_t *op;
 	void *data;
-} chardev_t;
+} outdev_t;
 
-extern void chardev_initialize(char *name, chardev_t *chardev,
-    chardev_operations_t *op);
-extern void chardev_push_character(chardev_t *chardev, uint8_t ch);
+extern void indev_initialize(char *name, indev_t *indev,
+    indev_operations_t *op);
+extern void indev_push_character(indev_t *indev, uint8_t ch);
+
+extern void outdev_initialize(char *name, outdev_t *outdev,
+    outdev_operations_t *op);
 
 #endif /* KERN_CHARDEV_H_ */
