1 /*- 2 * Copyright (C) 2014 Nathan Whitehorn 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 15 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 16 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 17 * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 18 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 20 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 21 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 22 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 23 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26 #include <sys/types.h> 27 #include "bootstrap.h" 28 #include "host_syscall.h" 29 #include "termios.h" 30 31 static void hostcons_probe(struct console *cp); 32 static int hostcons_init(int arg); 33 static void hostcons_putchar(int c); 34 static int hostcons_getchar(void); 35 static int hostcons_poll(void); 36 37 struct console hostconsole = { 38 "host", 39 "Host Console", 40 0, 41 hostcons_probe, 42 hostcons_init, 43 hostcons_putchar, 44 hostcons_getchar, 45 hostcons_poll, 46 }; 47 48 static struct host_termios old_settings; 49 50 static void 51 hostcons_probe(struct console *cp) 52 { 53 54 cp->c_flags |= C_PRESENTIN|C_PRESENTOUT; 55 } 56 57 static int 58 hostcons_init(int arg) 59 { 60 struct host_termios new_settings; 61 62 host_tcgetattr(0, &old_settings); 63 new_settings = old_settings; 64 host_cfmakeraw(&new_settings); 65 host_tcsetattr(0, HOST_TCSANOW, &new_settings); 66 67 return (0); 68 } 69 70 static void 71 hostcons_putchar(int c) 72 { 73 uint8_t ch = c; 74 75 host_write(1, &ch, 1); 76 } 77 78 static int 79 hostcons_getchar(void) 80 { 81 uint8_t ch; 82 int rv; 83 84 rv = host_read(0, &ch, 1); 85 if (rv == 1) 86 return (ch); 87 return (-1); 88 } 89 90 static int 91 hostcons_poll(void) 92 { 93 struct host_timeval tv = {0,0}; 94 long fds = 1 << 0; 95 int ret; 96 97 ret = host_select(32, &fds, NULL, NULL, &tv); 98 return (ret > 0); 99 } 100