17accb6eaSSimon Glass /* 27accb6eaSSimon Glass * Copyright (c) 2011 The Chromium OS Authors. 37accb6eaSSimon Glass * See file CREDITS for list of people who contributed to this 47accb6eaSSimon Glass * project. 57accb6eaSSimon Glass * 67accb6eaSSimon Glass * This program is free software; you can redistribute it and/or 77accb6eaSSimon Glass * modify it under the terms of the GNU General Public License as 87accb6eaSSimon Glass * published by the Free Software Foundation; either version 2 of 97accb6eaSSimon Glass * the License, or (at your option) any later version. 107accb6eaSSimon Glass * 117accb6eaSSimon Glass * This program is distributed in the hope that it will be useful, 127accb6eaSSimon Glass * but WITHOUT ANY WARRANTY; without even the implied warranty of 137accb6eaSSimon Glass * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 147accb6eaSSimon Glass * GNU General Public License for more details. 157accb6eaSSimon Glass * 167accb6eaSSimon Glass * You should have received a copy of the GNU General Public License 177accb6eaSSimon Glass * along with this program; if not, write to the Free Software 187accb6eaSSimon Glass * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 197accb6eaSSimon Glass * MA 02111-1307 USA 207accb6eaSSimon Glass */ 217accb6eaSSimon Glass 227accb6eaSSimon Glass /* 237accb6eaSSimon Glass * This provide a test serial port. It provides an emulated serial port where 247accb6eaSSimon Glass * a test program and read out the serial output and inject serial input for 257accb6eaSSimon Glass * U-Boot. 267accb6eaSSimon Glass */ 277accb6eaSSimon Glass 287accb6eaSSimon Glass #include <common.h> 297accb6eaSSimon Glass #include <os.h> 30*cef46b77SMarek Vasut #include <serial.h> 31*cef46b77SMarek Vasut #include <linux/compiler.h> 327accb6eaSSimon Glass 33*cef46b77SMarek Vasut static int sandbox_serial_init(void) 347accb6eaSSimon Glass { 35ab06a758SMike Frysinger os_tty_raw(0); 367accb6eaSSimon Glass return 0; 377accb6eaSSimon Glass } 387accb6eaSSimon Glass 39*cef46b77SMarek Vasut static void sandbox_serial_setbrg(void) 407accb6eaSSimon Glass { 417accb6eaSSimon Glass } 427accb6eaSSimon Glass 43*cef46b77SMarek Vasut static void sandbox_serial_putc(const char ch) 447accb6eaSSimon Glass { 457accb6eaSSimon Glass os_write(1, &ch, 1); 467accb6eaSSimon Glass } 477accb6eaSSimon Glass 48*cef46b77SMarek Vasut static void sandbox_serial_puts(const char *str) 497accb6eaSSimon Glass { 505778d54aSMike Frysinger os_write(1, str, strlen(str)); 517accb6eaSSimon Glass } 527accb6eaSSimon Glass 53*cef46b77SMarek Vasut static int sandbox_serial_getc(void) 547accb6eaSSimon Glass { 557accb6eaSSimon Glass char buf; 56ec8f0b90SMike Frysinger ssize_t count; 577accb6eaSSimon Glass 587accb6eaSSimon Glass count = os_read(0, &buf, 1); 597accb6eaSSimon Glass return count == 1 ? buf : 0; 607accb6eaSSimon Glass } 617accb6eaSSimon Glass 62*cef46b77SMarek Vasut static int sandbox_serial_tstc(void) 637accb6eaSSimon Glass { 647accb6eaSSimon Glass return 0; 657accb6eaSSimon Glass } 66*cef46b77SMarek Vasut 67*cef46b77SMarek Vasut #ifdef CONFIG_SERIAL_MULTI 68*cef46b77SMarek Vasut static struct serial_device sandbox_serial_drv = { 69*cef46b77SMarek Vasut .name = "sandbox_serial", 70*cef46b77SMarek Vasut .start = sandbox_serial_init, 71*cef46b77SMarek Vasut .stop = NULL, 72*cef46b77SMarek Vasut .setbrg = sandbox_serial_setbrg, 73*cef46b77SMarek Vasut .putc = sandbox_serial_putc, 74*cef46b77SMarek Vasut .puts = sandbox_serial_puts, 75*cef46b77SMarek Vasut .getc = sandbox_serial_getc, 76*cef46b77SMarek Vasut .tstc = sandbox_serial_tstc, 77*cef46b77SMarek Vasut }; 78*cef46b77SMarek Vasut 79*cef46b77SMarek Vasut void sandbox_serial_initialize(void) 80*cef46b77SMarek Vasut { 81*cef46b77SMarek Vasut serial_register(&sandbox_serial_drv); 82*cef46b77SMarek Vasut } 83*cef46b77SMarek Vasut 84*cef46b77SMarek Vasut __weak struct serial_device *default_serial_console(void) 85*cef46b77SMarek Vasut { 86*cef46b77SMarek Vasut return &sandbox_serial_drv; 87*cef46b77SMarek Vasut } 88*cef46b77SMarek Vasut #else 89*cef46b77SMarek Vasut int serial_init(void) 90*cef46b77SMarek Vasut { 91*cef46b77SMarek Vasut return sandbox_serial_init(); 92*cef46b77SMarek Vasut } 93*cef46b77SMarek Vasut 94*cef46b77SMarek Vasut void serial_setbrg(void) 95*cef46b77SMarek Vasut { 96*cef46b77SMarek Vasut sandbox_serial_setbrg(); 97*cef46b77SMarek Vasut } 98*cef46b77SMarek Vasut 99*cef46b77SMarek Vasut void serial_putc(const char c) 100*cef46b77SMarek Vasut { 101*cef46b77SMarek Vasut sandbox_serial_putc(c); 102*cef46b77SMarek Vasut } 103*cef46b77SMarek Vasut 104*cef46b77SMarek Vasut void serial_puts(const char *s) 105*cef46b77SMarek Vasut { 106*cef46b77SMarek Vasut sandbox_serial_puts(s); 107*cef46b77SMarek Vasut } 108*cef46b77SMarek Vasut 109*cef46b77SMarek Vasut int serial_getc(void) 110*cef46b77SMarek Vasut { 111*cef46b77SMarek Vasut return sandbox_serial_getc(); 112*cef46b77SMarek Vasut } 113*cef46b77SMarek Vasut 114*cef46b77SMarek Vasut int serial_tstc(void) 115*cef46b77SMarek Vasut { 116*cef46b77SMarek Vasut return sandbox_serial_tstc(); 117*cef46b77SMarek Vasut } 118*cef46b77SMarek Vasut #endif 119