xref: /freebsd/sys/dev/uart/uart_dbg.c (revision fdafd315ad0d0f28a11b9fb4476a9ab059c62b92)
1098ca2bdSWarner Losh /*-
2*4d846d26SWarner Losh  * SPDX-License-Identifier: BSD-2-Clause
3718cf2ccSPedro F. Giffuni  *
489438367SMarcel Moolenaar  * Copyright (c) 2004 Marcel Moolenaar
589438367SMarcel Moolenaar  * All rights reserved.
689438367SMarcel Moolenaar  *
789438367SMarcel Moolenaar  * Redistribution and use in source and binary forms, with or without
889438367SMarcel Moolenaar  * modification, are permitted provided that the following conditions
989438367SMarcel Moolenaar  * are met:
1089438367SMarcel Moolenaar  *
1189438367SMarcel Moolenaar  * 1. Redistributions of source code must retain the above copyright
1289438367SMarcel Moolenaar  *    notice, this list of conditions and the following disclaimer.
1389438367SMarcel Moolenaar  * 2. Redistributions in binary form must reproduce the above copyright
1489438367SMarcel Moolenaar  *    notice, this list of conditions and the following disclaimer in the
1589438367SMarcel Moolenaar  *    documentation and/or other materials provided with the distribution.
1689438367SMarcel Moolenaar  *
1789438367SMarcel Moolenaar  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
1889438367SMarcel Moolenaar  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
1989438367SMarcel Moolenaar  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
2089438367SMarcel Moolenaar  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
2189438367SMarcel Moolenaar  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
2289438367SMarcel Moolenaar  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2389438367SMarcel Moolenaar  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2489438367SMarcel Moolenaar  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2589438367SMarcel Moolenaar  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
2689438367SMarcel Moolenaar  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2789438367SMarcel Moolenaar  */
2889438367SMarcel Moolenaar 
2989438367SMarcel Moolenaar #include <sys/param.h>
3089438367SMarcel Moolenaar #include <sys/systm.h>
3189438367SMarcel Moolenaar #include <sys/bus.h>
3289438367SMarcel Moolenaar #include <sys/kernel.h>
3389438367SMarcel Moolenaar #include <machine/bus.h>
3489438367SMarcel Moolenaar 
3589438367SMarcel Moolenaar #include <gdb/gdb.h>
3689438367SMarcel Moolenaar 
3789438367SMarcel Moolenaar #include <dev/uart/uart.h>
3889438367SMarcel Moolenaar #include <dev/uart/uart_cpu.h>
3989438367SMarcel Moolenaar 
4089438367SMarcel Moolenaar static gdb_probe_f uart_dbg_probe;
4189438367SMarcel Moolenaar static gdb_init_f uart_dbg_init;
4289438367SMarcel Moolenaar static gdb_term_f uart_dbg_term;
4389438367SMarcel Moolenaar static gdb_getc_f uart_dbg_getc;
4489438367SMarcel Moolenaar static gdb_putc_f uart_dbg_putc;
4589438367SMarcel Moolenaar 
4689438367SMarcel Moolenaar GDB_DBGPORT(uart, uart_dbg_probe, uart_dbg_init, uart_dbg_term,
479b188af1SPoul-Henning Kamp     uart_dbg_getc, uart_dbg_putc);
4889438367SMarcel Moolenaar 
4989438367SMarcel Moolenaar static struct uart_devinfo uart_dbgport;
5089438367SMarcel Moolenaar 
5189438367SMarcel Moolenaar static int
uart_dbg_probe(void)5289438367SMarcel Moolenaar uart_dbg_probe(void)
5389438367SMarcel Moolenaar {
5489438367SMarcel Moolenaar 
5589438367SMarcel Moolenaar 	if (uart_cpu_getdev(UART_DEV_DBGPORT, &uart_dbgport))
5689438367SMarcel Moolenaar 		return (-1);
5789438367SMarcel Moolenaar 
5889438367SMarcel Moolenaar 	if (uart_probe(&uart_dbgport))
5989438367SMarcel Moolenaar 		return (-1);
6089438367SMarcel Moolenaar 
6189438367SMarcel Moolenaar 	return (0);
6289438367SMarcel Moolenaar }
6389438367SMarcel Moolenaar 
6489438367SMarcel Moolenaar static void
uart_dbg_init(void)6589438367SMarcel Moolenaar uart_dbg_init(void)
6689438367SMarcel Moolenaar {
6789438367SMarcel Moolenaar 
6889438367SMarcel Moolenaar 	uart_dbgport.type = UART_DEV_DBGPORT;
6989438367SMarcel Moolenaar 	uart_add_sysdev(&uart_dbgport);
7089438367SMarcel Moolenaar 	uart_init(&uart_dbgport);
7189438367SMarcel Moolenaar }
7289438367SMarcel Moolenaar 
7389438367SMarcel Moolenaar static void
uart_dbg_term(void)7489438367SMarcel Moolenaar uart_dbg_term(void)
7589438367SMarcel Moolenaar {
7689438367SMarcel Moolenaar 
7789438367SMarcel Moolenaar 	uart_term(&uart_dbgport);
7889438367SMarcel Moolenaar }
7989438367SMarcel Moolenaar 
8089438367SMarcel Moolenaar static void
uart_dbg_putc(int c)8189438367SMarcel Moolenaar uart_dbg_putc(int c)
8289438367SMarcel Moolenaar {
8389438367SMarcel Moolenaar 
8489438367SMarcel Moolenaar 	uart_putc(&uart_dbgport, c);
8589438367SMarcel Moolenaar }
8689438367SMarcel Moolenaar 
8789438367SMarcel Moolenaar static int
uart_dbg_getc(void)8889438367SMarcel Moolenaar uart_dbg_getc(void)
8989438367SMarcel Moolenaar {
9089438367SMarcel Moolenaar 
919b188af1SPoul-Henning Kamp 	return (uart_poll(&uart_dbgport));
9289438367SMarcel Moolenaar }
93