From c12b25aa7ddb70cefacb119e1ff7573906a7284d Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Wed, 17 Jun 2009 07:22:18 +0100 Subject: minios: support secondary guest consoles. Signed-off-by: Stefano Stabellini --- extras/mini-os/lib/sys.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) (limited to 'extras/mini-os/lib') diff --git a/extras/mini-os/lib/sys.c b/extras/mini-os/lib/sys.c index d0bc76a659..045481e73f 100644 --- a/extras/mini-os/lib/sys.c +++ b/extras/mini-os/lib/sys.c @@ -167,6 +167,18 @@ int mkdir(const char *pathname, mode_t mode) return 0; } +int openpty(void) +{ + struct consfront_dev *dev; + + dev = init_consfront(NULL); + dev->fd = alloc_fd(FTYPE_CONSOLE); + files[dev->fd].cons.dev = dev; + + printk("fd(%d) = openpty\n", dev->fd); + return(dev->fd); +} + int open(const char *pathname, int flags, ...) { int fs_fd, fd; @@ -219,7 +231,7 @@ int read(int fd, void *buf, size_t nbytes) DEFINE_WAIT(w); while(1) { add_waiter(w, console_queue); - ret = xencons_ring_recv(buf, nbytes); + ret = xencons_ring_recv(files[fd].cons.dev, buf, nbytes); if (ret) break; schedule(); @@ -286,7 +298,7 @@ int write(int fd, const void *buf, size_t nbytes) { switch (files[fd].type) { case FTYPE_CONSOLE: - console_print((char *)buf, nbytes); + console_print(files[fd].cons.dev, (char *)buf, nbytes); return nbytes; case FTYPE_FILE: { ssize_t ret; @@ -416,6 +428,10 @@ int close(int fd) shutdown_fbfront(files[fd].fb.dev); files[fd].type = FTYPE_NONE; return 0; + case FTYPE_CONSOLE: + fini_console(files[fd].cons.dev); + files[fd].type = FTYPE_NONE; + return 0; case FTYPE_NONE: break; } @@ -735,7 +751,7 @@ static int select_poll(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exce break; case FTYPE_CONSOLE: if (FD_ISSET(i, readfds)) { - if (xencons_ring_avail()) + if (xencons_ring_avail(files[i].cons.dev)) n++; else FD_CLR(i, readfds); -- cgit v1.2.3