Index: uspace/drv/char/sun4v-con/sun4v-con.c
===================================================================
--- uspace/drv/char/sun4v-con/sun4v-con.c	(revision d9ec808b547e5990edc7280d9d8399acd2a5d86f)
+++ uspace/drv/char/sun4v-con/sun4v-con.c	(revision 59953b57828b7195c42a7c30df3c06369f96e51b)
@@ -39,5 +39,4 @@
 #include <stdbool.h>
 
-#include "niagara_buf.h"
 #include "sun4v-con.h"
 
@@ -45,8 +44,4 @@
 
 #define POLL_INTERVAL  10000
-
-/* virtual address of the shared buffer */
-static niagara_input_buffer_t *input_buffer;
-static niagara_output_buffer_t *output_fifo;
 
 static int sun4v_con_read(chardev_srv_t *, void *, size_t, size_t *);
@@ -63,11 +58,11 @@
 		sun4v_con_putchar(con, '\r');
 
-	while (output_fifo->write_ptr ==
-	    (output_fifo->read_ptr + OUTPUT_BUFFER_SIZE - 1)
+	while (con->output_buffer->write_ptr ==
+	    (con->output_buffer->read_ptr + OUTPUT_BUFFER_SIZE - 1)
 	    % OUTPUT_BUFFER_SIZE);
 
-	output_fifo->data[output_fifo->write_ptr] = data;
-	output_fifo->write_ptr =
-	    ((output_fifo->write_ptr) + 1) % OUTPUT_BUFFER_SIZE;
+	con->output_buffer->data[con->output_buffer->write_ptr] = data;
+	con->output_buffer->write_ptr =
+	    ((con->output_buffer->write_ptr) + 1) % OUTPUT_BUFFER_SIZE;
 }
 
@@ -79,5 +74,5 @@
 
 	con->res = *res;
-	input_buffer = (niagara_input_buffer_t *) AS_AREA_ANY;
+	con->input_buffer = (niagara_input_buffer_t *) AS_AREA_ANY;
 
 	fun = ddf_fun_create(con->dev, fun_exposed, "a");
@@ -95,5 +90,5 @@
 
 	rc = physmem_map(res->in_base, 1, AS_AREA_READ | AS_AREA_WRITE,
-	    (void *) &input_buffer);
+	    (void *) &con->input_buffer);
 	if (rc != EOK) {
 		ddf_msg(LVL_ERROR, "Error mapping memory: %d", rc);
@@ -101,8 +96,8 @@
 	}
 
-	output_fifo = (niagara_output_buffer_t *) AS_AREA_ANY;
+	con->output_buffer = (niagara_output_buffer_t *) AS_AREA_ANY;
 
 	rc = physmem_map(res->out_base, 1, AS_AREA_READ | AS_AREA_WRITE,
-	    (void *) &output_fifo);
+	    (void *) &con->output_buffer);
 	if (rc != EOK) {
 		ddf_msg(LVL_ERROR, "Error mapping memory: %d", rc);
@@ -120,9 +115,9 @@
 	return EOK;
 error:
-	if (input_buffer != (niagara_input_buffer_t *) AS_AREA_ANY)
-		physmem_unmap((void *) input_buffer);
+	if (con->input_buffer != (niagara_input_buffer_t *) AS_AREA_ANY)
+		physmem_unmap((void *) con->input_buffer);
 
-	if (output_fifo != (niagara_output_buffer_t *) AS_AREA_ANY)
-		physmem_unmap((void *) output_fifo);
+	if (con->output_buffer != (niagara_output_buffer_t *) AS_AREA_ANY)
+		physmem_unmap((void *) con->output_buffer);
 
 	if (fun != NULL)
@@ -148,16 +143,17 @@
     size_t *nread)
 {
+	sun4v_con_t *con = (sun4v_con_t *) srv->srvs->sarg;
 	size_t p;
 	uint8_t *bp = (uint8_t *) buf;
 	char c;
 
-	while (input_buffer->read_ptr == input_buffer->write_ptr)
+	while (con->input_buffer->read_ptr == con->input_buffer->write_ptr)
 		fibril_usleep(POLL_INTERVAL);
 
 	p = 0;
-	while (p < size && input_buffer->read_ptr != input_buffer->write_ptr) {
-		c = input_buffer->data[input_buffer->read_ptr];
-		input_buffer->read_ptr =
-		    ((input_buffer->read_ptr) + 1) % INPUT_BUFFER_SIZE;
+	while (p < size && con->input_buffer->read_ptr != con->input_buffer->write_ptr) {
+		c = con->input_buffer->data[con->input_buffer->read_ptr];
+		con->input_buffer->read_ptr =
+		    ((con->input_buffer->read_ptr) + 1) % INPUT_BUFFER_SIZE;
 		bp[p++] = c;
 	}
Index: uspace/drv/char/sun4v-con/sun4v-con.h
===================================================================
--- uspace/drv/char/sun4v-con/sun4v-con.h	(revision d9ec808b547e5990edc7280d9d8399acd2a5d86f)
+++ uspace/drv/char/sun4v-con/sun4v-con.h	(revision 59953b57828b7195c42a7c30df3c06369f96e51b)
@@ -42,4 +42,6 @@
 #include <stdint.h>
 
+#include "niagara_buf.h"
+
 /** Sun4v console resources */
 typedef struct {
@@ -54,4 +56,8 @@
 	chardev_srvs_t cds;
 	sun4v_con_res_t res;
+	/** Virtual address of the shared input buffer */
+	niagara_input_buffer_t *input_buffer;
+	/** Virtual address of the shared input buffer */
+	niagara_output_buffer_t *output_buffer;
 } sun4v_con_t;
 
