#define COMCONSOLE COM1 /* I/O port address */
/* Keep settings from a previous user of the serial port (e.g. lilo or
- * LinuxBIOS), ignoring COMSPEED, COMDATA, COMPARITY and COMSTOP.
+ * LinuxBIOS), ignoring COMSPEED.
*/
#undef COMPRESERVE
#ifndef COMPRESERVE
#define COMSPEED 115200 /* Baud rate */
-#define COMDATA 8 /* Data bits */
-#define COMPARITY 0 /* Parity: 0=None, 1=Odd, 2=Even */
-#define COMSTOP 1 /* Stop bits */
#endif
/* Early UART configuration (for bare metal prefix debugging only) */
#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;
return 1;
}
- if ( ! gdbserial_configure ( port, GDBSERIAL_BAUD, GDBSERIAL_LCR ) ) {
+ if ( ! gdbserial_configure ( port, GDBSERIAL_BAUD ) ) {
printf ( "serial: unable to configure\n" );
return 1;
}
};
struct gdb_transport * gdbserial_configure ( unsigned int port,
- unsigned int baud, uint8_t lcr ) {
+ unsigned int baud ) {
int rc;
if ( ( rc = uart_select ( &gdbserial_uart, port ) ) != 0 )
return NULL;
- if ( ( rc = uart_init ( &gdbserial_uart, baud, lcr ) ) != 0 )
+ if ( ( rc = uart_init ( &gdbserial_uart, baud ) ) != 0 )
return NULL;
return &serial_gdb_transport;
#define CONSOLE_BAUD COMSPEED
#endif
-/* UART line control register value */
-#ifdef COMPRESERVE
-#define CONSOLE_LCR 0
-#else
-#define CONSOLE_LCR UART_LCR_WPS ( COMDATA, COMPARITY, COMSTOP )
-#endif
-
/** Serial console UART */
struct uart serial_console;
}
/* Initialise UART */
- if ( ( rc = uart_init ( &serial_console, CONSOLE_BAUD,
- CONSOLE_LCR ) ) != 0 ) {
- DBG ( "Could not initialise UART %d baud %d LCR %#02x: %s\n",
- CONSOLE_PORT, CONSOLE_BAUD, CONSOLE_LCR, strerror ( rc ));
+ if ( ( rc = uart_init ( &serial_console, CONSOLE_BAUD ) ) != 0 ) {
+ DBG ( "Could not initialise UART %d baud %d: %s\n",
+ CONSOLE_PORT, CONSOLE_BAUD, strerror ( rc ) );
return;
}
}
*
* @v uart UART
* @v baud Baud rate, or zero to leave unchanged
- * @v lcr Line control register value, or zero to leave unchanged
* @ret rc Return status code
*/
-int uart_init ( struct uart *uart, unsigned int baud, uint8_t lcr ) {
+int uart_init ( struct uart *uart, unsigned int baud ) {
uint8_t dlm;
uint8_t dll;
int rc;
return rc;
/* Configure divisor and line control register, if applicable */
- if ( ! lcr )
- lcr = uart_read ( uart, UART_LCR );
- uart->lcr = lcr;
- uart_write ( uart, UART_LCR, ( lcr | UART_LCR_DLAB ) );
+ uart_write ( uart, UART_LCR, ( UART_LCR_8N1 | UART_LCR_DLAB ) );
if ( baud ) {
uart->divisor = ( UART_MAX_BAUD / baud );
dlm = ( ( uart->divisor >> 8 ) & 0xff );
dll = uart_read ( uart, UART_DLL );
uart->divisor = ( ( dlm << 8 ) | dll );
}
- uart_write ( uart, UART_LCR, ( lcr & ~UART_LCR_DLAB ) );
+ uart_write ( uart, UART_LCR, UART_LCR_8N1 );
/* Disable interrupts */
uart_write ( uart, UART_IER, 0 );
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
-#include <stdint.h>
-
struct gdb_transport;
extern struct gdb_transport * gdbserial_configure ( unsigned int port,
- unsigned int baud,
- uint8_t lcr );
+ unsigned int baud );
#endif /* _IPXE_GDBSERIAL_H */
void *base;
/** Baud rate divisor */
uint16_t divisor;
- /** Line control register */
- uint8_t lcr;
};
/** Symbolic names for port indexes */
extern void uart_transmit ( struct uart *uart, uint8_t data );
extern void uart_flush ( struct uart *uart );
extern int uart_exists ( struct uart *uart );
-extern int uart_init ( struct uart *uart, unsigned int baud, uint8_t lcr );
+extern int uart_init ( struct uart *uart, unsigned int baud );
#endif /* _IPXE_UART_H */