xref: /rk3399_rockchip-uboot/drivers/serial/sandbox.c (revision cef46b7792d4171bc7b17a3a4ae4c53bb6e78654)
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