xref: /freebsd/sys/dev/uart/uart_dbg.c (revision 718cf2ccb9956613756ab15d7a0e28f2c8e91cab)
1098ca2bdSWarner Losh /*-
2*718cf2ccSPedro F. Giffuni  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3*718cf2ccSPedro 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/cdefs.h>
3089438367SMarcel Moolenaar __FBSDID("$FreeBSD$");
3189438367SMarcel Moolenaar 
3289438367SMarcel Moolenaar #include <sys/param.h>
3389438367SMarcel Moolenaar #include <sys/systm.h>
3489438367SMarcel Moolenaar #include <sys/bus.h>
3589438367SMarcel Moolenaar #include <sys/kernel.h>
3689438367SMarcel Moolenaar #include <machine/bus.h>
3789438367SMarcel Moolenaar 
3889438367SMarcel Moolenaar #include <gdb/gdb.h>
3989438367SMarcel Moolenaar 
4089438367SMarcel Moolenaar #include <dev/uart/uart.h>
4189438367SMarcel Moolenaar #include <dev/uart/uart_cpu.h>
4289438367SMarcel Moolenaar 
4389438367SMarcel Moolenaar static gdb_probe_f uart_dbg_probe;
4489438367SMarcel Moolenaar static gdb_init_f uart_dbg_init;
4589438367SMarcel Moolenaar static gdb_term_f uart_dbg_term;
4689438367SMarcel Moolenaar static gdb_getc_f uart_dbg_getc;
4789438367SMarcel Moolenaar static gdb_putc_f uart_dbg_putc;
4889438367SMarcel Moolenaar 
4989438367SMarcel Moolenaar GDB_DBGPORT(uart, uart_dbg_probe, uart_dbg_init, uart_dbg_term,
509b188af1SPoul-Henning Kamp     uart_dbg_getc, uart_dbg_putc);
5189438367SMarcel Moolenaar 
5289438367SMarcel Moolenaar static struct uart_devinfo uart_dbgport;
5389438367SMarcel Moolenaar 
5489438367SMarcel Moolenaar static int
5589438367SMarcel Moolenaar uart_dbg_probe(void)
5689438367SMarcel Moolenaar {
5789438367SMarcel Moolenaar 
5889438367SMarcel Moolenaar 	if (uart_cpu_getdev(UART_DEV_DBGPORT, &uart_dbgport))
5989438367SMarcel Moolenaar 		return (-1);
6089438367SMarcel Moolenaar 
6189438367SMarcel Moolenaar 	if (uart_probe(&uart_dbgport))
6289438367SMarcel Moolenaar 		return (-1);
6389438367SMarcel Moolenaar 
6489438367SMarcel Moolenaar 	return (0);
6589438367SMarcel Moolenaar }
6689438367SMarcel Moolenaar 
6789438367SMarcel Moolenaar static void
6889438367SMarcel Moolenaar uart_dbg_init(void)
6989438367SMarcel Moolenaar {
7089438367SMarcel Moolenaar 
7189438367SMarcel Moolenaar 	uart_dbgport.type = UART_DEV_DBGPORT;
7289438367SMarcel Moolenaar 	uart_add_sysdev(&uart_dbgport);
7389438367SMarcel Moolenaar 	uart_init(&uart_dbgport);
7489438367SMarcel Moolenaar }
7589438367SMarcel Moolenaar 
7689438367SMarcel Moolenaar static void
7789438367SMarcel Moolenaar uart_dbg_term(void)
7889438367SMarcel Moolenaar {
7989438367SMarcel Moolenaar 
8089438367SMarcel Moolenaar 	uart_term(&uart_dbgport);
8189438367SMarcel Moolenaar }
8289438367SMarcel Moolenaar 
8389438367SMarcel Moolenaar static void
8489438367SMarcel Moolenaar uart_dbg_putc(int c)
8589438367SMarcel Moolenaar {
8689438367SMarcel Moolenaar 
8789438367SMarcel Moolenaar 	uart_putc(&uart_dbgport, c);
8889438367SMarcel Moolenaar }
8989438367SMarcel Moolenaar 
9089438367SMarcel Moolenaar static int
9189438367SMarcel Moolenaar uart_dbg_getc(void)
9289438367SMarcel Moolenaar {
9389438367SMarcel Moolenaar 
949b188af1SPoul-Henning Kamp 	return (uart_poll(&uart_dbgport));
9589438367SMarcel Moolenaar }
96