Index: uspace/lib/c/generic/io/chardev.c
===================================================================
--- uspace/lib/c/generic/io/chardev.c	(revision c477c804d1208352d69c7b069a54d3e3b650ff96)
+++ uspace/lib/c/generic/io/chardev.c	(revision 063a364794dc48510948ecc3cf9196cd0a7cee9e)
@@ -91,8 +91,11 @@
  * @param size Maximum number of bytes to read
  * @param nread Place to store actual number of bytes read
+ * @param flags @c chardev_f_nonblock to return immediately even if no
+ *              bytes are available
  *
  * @return EOK on success or non-zero error code
  */
-errno_t chardev_read(chardev_t *chardev, void *buf, size_t size, size_t *nread)
+errno_t chardev_read(chardev_t *chardev, void *buf, size_t size, size_t *nread,
+    chardev_flags_t flags)
 {
 	async_exch_t *exch = async_exchange_begin(chardev->sess);
@@ -104,5 +107,5 @@
 
 	ipc_call_t answer;
-	aid_t req = async_send_0(exch, CHARDEV_READ, &answer);
+	aid_t req = async_send_1(exch, CHARDEV_READ, flags, &answer);
 	errno_t rc = async_data_read_start(exch, buf, size);
 	async_exchange_end(exch);
Index: uspace/lib/c/generic/io/chardev_srv.c
===================================================================
--- uspace/lib/c/generic/io/chardev_srv.c	(revision c477c804d1208352d69c7b069a54d3e3b650ff96)
+++ uspace/lib/c/generic/io/chardev_srv.c	(revision 063a364794dc48510948ecc3cf9196cd0a7cee9e)
@@ -48,5 +48,8 @@
 	size_t size;
 	size_t nread;
+	chardev_flags_t flags;
 	errno_t rc;
+
+	flags = IPC_GET_ARG1(*icall);
 
 	ipc_call_t call;
@@ -70,5 +73,5 @@
 	}
 
-	rc = srv->srvs->ops->read(srv, buf, size, &nread);
+	rc = srv->srvs->ops->read(srv, buf, size, &nread, flags);
 	if (rc != EOK && nread == 0) {
 		async_answer_0(&call, rc);
