Index: uspace/lib/c/Makefile
===================================================================
--- uspace/lib/c/Makefile	(revision 57914494f0017d0618e3eaa16f2ae9c2fd1baefd)
+++ uspace/lib/c/Makefile	(revision c4c60250a236ed30397cd89ce5cea5eaf59cfba5)
@@ -118,4 +118,5 @@
 	generic/io/kio.c \
 	generic/io/klog.c \
+	generic/io/serial.c \
 	generic/io/snprintf.c \
 	generic/io/vprintf.c \
Index: uspace/lib/c/generic/io/serial.c
===================================================================
--- uspace/lib/c/generic/io/serial.c	(revision c4c60250a236ed30397cd89ce5cea5eaf59cfba5)
+++ uspace/lib/c/generic/io/serial.c	(revision c4c60250a236ed30397cd89ce5cea5eaf59cfba5)
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2017 Jiri Svoboda
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <async.h>
+#include <errno.h>
+#include <io/serial.h>
+#include <ipc/serial_ctl.h>
+#include <ipc/services.h>
+#include <stdlib.h>
+
+/** Open serial port device.
+ *
+ * @param sess Session with the serial port device
+ * @param rchardev Place to store pointer to the new serial port device structure
+ *
+ * @return EOK on success, ENOMEM if out of memory, EIO on I/O error
+ */
+int serial_open(async_sess_t *sess, serial_t **rserial)
+{
+	serial_t *serial;
+
+	serial = calloc(1, sizeof(serial_t));
+	if (serial == NULL)
+		return ENOMEM;
+
+	serial->sess = sess;
+	*rserial = serial;
+
+	return EOK;
+}
+
+/** Close serial port device.
+ *
+ * Frees the serial port device structure. The underlying session is
+ * not affected.
+ *
+ * @param serial Serial port device or @c NULL
+ */
+void serial_close(serial_t *serial)
+{
+	free(serial);
+}
+
+/** Set serial port communication properties. */
+int serial_set_comm_props(serial_t *serial, unsigned rate,
+    serial_parity_t parity, unsigned datab, unsigned stopb)
+{
+	async_exch_t *exch = async_exchange_begin(serial->sess);
+
+	int rc = async_req_4_0(exch, SERIAL_SET_COM_PROPS, rate, parity,
+	    datab, stopb);
+
+	async_exchange_end(exch);
+	return rc;
+}
+
+/** Get serial port communication properties. */
+int serial_get_comm_props(serial_t *serial, unsigned *rrate,
+    serial_parity_t *rparity, unsigned *rdatab, unsigned *rstopb)
+{
+	async_exch_t *exch = async_exchange_begin(serial->sess);
+	sysarg_t rate, parity, datab, stopb;
+
+	int rc = async_req_0_4(exch, SERIAL_GET_COM_PROPS, &rate, &parity,
+	    &datab, &stopb);
+
+	async_exchange_end(exch);
+	if (rc != EOK)
+		return rc;
+
+	*rrate = rate;
+	*rparity = parity;
+	*rdatab = datab;
+	*rstopb = stopb;
+
+	return EOK;
+}
+
+/** @}
+ */
Index: uspace/lib/c/include/io/serial.h
===================================================================
--- uspace/lib/c/include/io/serial.h	(revision c4c60250a236ed30397cd89ce5cea5eaf59cfba5)
+++ uspace/lib/c/include/io/serial.h	(revision c4c60250a236ed30397cd89ce5cea5eaf59cfba5)
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2017 Jiri Svoboda
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_IO_SERIAL_H_
+#define LIBC_IO_SERIAL_H_
+
+#include <async.h>
+#include <ipc/serial_ctl.h>
+
+typedef struct {
+	async_sess_t *sess;
+} serial_t;
+
+extern int serial_open(async_sess_t *, serial_t **);
+extern void serial_close(serial_t *);
+extern int serial_set_comm_props(serial_t *, unsigned, serial_parity_t,
+    unsigned, unsigned);
+extern int serial_get_comm_props(serial_t *, unsigned *, serial_parity_t *,
+    unsigned *, unsigned *);
+
+#endif
+
+/** @}
+ */
