[PATCH] i386/pc: Initialise the printk serial port on first use
Gedare Bloom
gedare at rtems.org
Thu Jun 18 01:36:25 UTC 2020
Looks good to me, thanks for the type fixes too.
On Tue, Jun 16, 2020, 11:58 PM <chrisj at rtems.org> wrote:
> From: Chris Johns <chrisj at rtems.org>
>
> ---
> bsps/i386/pc386/console/conscfg.c | 7 ++--
> bsps/i386/pc386/console/printk_support.c | 42 +++++++++++++++++++-----
> 2 files changed, 37 insertions(+), 12 deletions(-)
>
> diff --git a/bsps/i386/pc386/console/conscfg.c
> b/bsps/i386/pc386/console/conscfg.c
> index a4ae88626f..8aa8ab5c2a 100644
> --- a/bsps/i386/pc386/console/conscfg.c
> +++ b/bsps/i386/pc386/console/conscfg.c
> @@ -46,15 +46,14 @@
>
> #define CLOCK_RATE (115200 * 16)
>
> - static uint8_t com_get_register(uint32_t addr, uint8_t i)
> + static uint8_t com_get_register(uintptr_t addr, uint8_t i)
> {
> - register uint8_t val;
> -
> + uint8_t val;
> inport_byte( (addr + i), val );
> return val;
> }
>
> - static void com_set_register(uint32_t addr, uint8_t i, uint8_t val)
> + static void com_set_register(uintptr_t addr, uint8_t i, uint8_t val)
> {
> outport_byte( (addr + i), val );
> }
> diff --git a/bsps/i386/pc386/console/printk_support.c
> b/bsps/i386/pc386/console/printk_support.c
> index d7bc329868..c9e003dab0 100644
> --- a/bsps/i386/pc386/console/printk_support.c
> +++ b/bsps/i386/pc386/console/printk_support.c
> @@ -29,6 +29,28 @@
>
> rtems_device_minor_number BSPPrintkPort = 0;
>
> +static bool serialInit;
> +static bool serialOK;
> +
> +static bool serialValid(console_tbl *port)
> +{
> + if (port->pDeviceFns) {
> + if (!serialInit) {
> + serialOK = true;
> + if (port->pDeviceFns->deviceProbe != NULL) {
> + if (!port->pDeviceFns->deviceProbe( BSPPrintkPort ))
> + serialOK = false;
> + else if (port->pDeviceFns->deviceInitialize != NULL)
> + port->pDeviceFns->deviceInitialize( BSPPrintkPort );
> + else
> + serialOK = false;
> + }
> + serialInit = true;
> + }
> + }
> + return serialOK;
> +}
> +
> void BSP_outch(char ch);
> int BSP_inch(void);
>
> @@ -42,10 +64,12 @@ void BSP_outch(char ch)
>
> if ( !isVga ) {
> console_tbl *port = Console_Port_Tbl[BSPPrintkPort];
> - if (port->pDeviceFns && port->pDeviceFns->deviceWritePolled) {
> - port->pDeviceFns->deviceWritePolled( BSPPrintkPort, ch );
> + if (serialValid(port)) {
> + if (port->pDeviceFns->deviceWritePolled) {
> + port->pDeviceFns->deviceWritePolled( BSPPrintkPort, ch );
> + }
> + return;
> }
> - return;
> }
>
> #if BSP_ENABLE_VGA
> @@ -65,11 +89,13 @@ int BSP_inch(void)
>
> if ( !isVga ) {
> console_tbl *port = Console_Port_Tbl[BSPPrintkPort];
> - if (port->pDeviceFns && port->pDeviceFns->deviceRead) {
> - do {
> - result = port->pDeviceFns->deviceRead( BSPPrintkPort );
> - } while (result == -1);
> - return result;
> + if (serialValid(port)) {
> + if (port->pDeviceFns->deviceRead) {
> + do {
> + result = port->pDeviceFns->deviceRead( BSPPrintkPort );
> + } while (result == -1);
> + return result;
> + }
> }
> }
>
> --
> 2.24.1
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20200617/4ed1cc2f/attachment.html>
More information about the devel
mailing list