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