Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[gdb] Use new UART abstraction in GDB serial transport
Signed-off-by: Michael Brown <mcb30@ipxe.org>
  • Loading branch information
mcb30 committed Jun 29, 2015
1 parent 611c9e3 commit 5e622dc
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 17 deletions.
53 changes: 45 additions & 8 deletions src/core/gdbserial.c
Expand Up @@ -23,31 +23,68 @@

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;
}
9 changes: 0 additions & 9 deletions src/include/ipxe/gdbserial.h
Expand Up @@ -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 */

0 comments on commit 5e622dc

Please sign in to comment.