---
 drivers/char/virtio_console.c  |    2 +-
 include/linux/virtio_console.h |   13 +++++++++++--
 2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c
--- a/drivers/char/virtio_console.c
+++ b/drivers/char/virtio_console.c
@@ -308,7 +308,7 @@ static struct virtio_device_id id_table[
 };
 
 static unsigned int features[] = {
-	VIRTIO_CONSOLE_F_SIZE,
+	VIRTIO_CONSOLE_F_SIZE, VIRTIO_CONSOLE_F_MULTIPORT,
 };
 
 static struct virtio_driver virtio_console = {
diff --git a/include/linux/virtio_console.h b/include/linux/virtio_console.h
--- a/include/linux/virtio_console.h
+++ b/include/linux/virtio_console.h
@@ -8,14 +8,23 @@
 
 /* Feature bits */
 #define VIRTIO_CONSOLE_F_SIZE	0	/* Does host provide console size? */
+#define VIRTIO_CONSOLE_F_MULTIPORT 1	/* Does host provide multiple ports? */
 
 struct virtio_console_config {
-	/* colums of the screens */
+	/* VIRTIO_CONSOLE_F_SIZE: colums of the screens */
 	__u16 cols;
-	/* rows of the screens */
+	/* VIRTIO_CONSOLE_F_SIZE: rows of the screens */
 	__u16 rows;
+	/* VIRTIO_CONSOLE_F_MULTIPORT: number of ports in use */
+	__u32 nr_active_ports;
 } __attribute__((packed));
 
+struct virtio_console_header {
+	/* Port number */
+	__u32 id;
+	/* VIRTIO_CONSOLE_HDR_CONTROLMSG, VIRTIO_CONSOLE_HDR_CONTINUES. */
+	__u32 flags;
+} __attribute__((packed));
 
 #ifdef __KERNEL__
 int __init virtio_cons_early_init(int (*put_chars)(u32, const char *, int));
