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