]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[gdb] Use new UART abstraction in GDB serial transport
authorMichael Brown <mcb30@ipxe.org>
Mon, 29 Jun 2015 09:07:56 +0000 (10:07 +0100)
committerMichael Brown <mcb30@ipxe.org>
Mon, 29 Jun 2015 10:03:12 +0000 (11:03 +0100)
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/core/gdbserial.c
src/include/ipxe/gdbserial.h

index 255acea718e8a5554245217deb12091327132b01..802463f4508b89595bc1ee29383ba3b7f96bd9a8 100644 (file)
 
 FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
 
+#include <stddef.h>
 #include <assert.h>
-#include <ipxe/serial.h>
+#include <ipxe/uart.h>
 #include <ipxe/gdbstub.h>
 #include <ipxe/gdbserial.h>
+#include <config/serial.h>
 
-struct gdb_transport serial_gdb_transport __gdb_transport;
+/* UART port number */
+#ifdef COMCONSOLE
+#define GDBSERIAL_PORT COMCONSOLE
+#else
+#define GDBSERIAL_PORT 0
+#endif
+
+/* UART baud rate */
+#ifdef COMPRESERVE
+#define GDBSERIAL_BAUD 0
+#else
+#define GDBSERIAL_BAUD COMSPEED
+#endif
+
+/* UART line control register value */
+#ifdef COMPRESERVE
+#define GDBSERIAL_LCR 0
+#else
+#define GDBSERIAL_LCR UART_LCR_WPS ( COMDATA, COMPARITY, COMSTOP )
+#endif
+
+/** GDB serial UART */
+static struct uart gdbserial_uart;
 
 static size_t gdbserial_recv ( char *buf, size_t len ) {
+
        assert ( len > 0 );
-       buf [ 0 ] = serial_getc();
+       while ( ! uart_data_ready ( &gdbserial_uart ) ) {}
+       buf[0] = uart_receive ( &gdbserial_uart );
        return 1;
 }
 
 static void gdbserial_send ( const char *buf, size_t len ) {
+
        while ( len-- > 0 ) {
-               serial_putc ( *buf++ );
+               uart_transmit ( &gdbserial_uart, *buf++ );
        }
 }
 
+static int gdbserial_init ( int argc __unused, char **argv __unused ) {
+       int rc;
+
+       if ( ( rc = uart_select ( &gdbserial_uart, GDBSERIAL_PORT ) ) != 0 )
+               return rc;
+
+       if ( ( rc = uart_init ( &gdbserial_uart, GDBSERIAL_BAUD,
+                               GDBSERIAL_LCR ) ) != 0 )
+               return rc;
+
+       return 0;
+}
+
 struct gdb_transport serial_gdb_transport __gdb_transport = {
        .name = "serial",
+       .init = gdbserial_init,
        .recv = gdbserial_recv,
        .send = gdbserial_send,
 };
-
-struct gdb_transport *gdbserial_configure ( void ) {
-       return &serial_gdb_transport;
-}
index d02fb8d1b6023da9f50a1a53af923699848d3a8a..db9cb1567aee0ec919e029fc4e88a610e176c0d8 100644 (file)
@@ -9,13 +9,4 @@
 
 FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
 
-struct gdb_transport;
-
-/**
- * Set up the serial transport
- *
- * @ret transport suitable for starting the GDB stub or NULL on error
- */
-struct gdb_transport *gdbserial_configure ( void );
-
 #endif /* _IPXE_GDBSERIAL_H */