[PATCH v3 5/6] lib: sbi: Add console_puts() callback in the console device

Xiang W wxjstz at 126.com
Sat Nov 26 04:55:38 PST 2022


在 2022-11-24星期四的 18:59 +0530,Anup Patel写道:
> We add console_puts() callback in the console device which allows
> console drivers (such as semihosting) to implement a specialized
> way to output character string.
> 
> Signed-off-by: Anup Patel <apatel at ventanamicro.com>
Look good to me

Reviewed-by: Xiang W <wxjstz at 126.com>
> ---
>  include/sbi/sbi_console.h |  3 +++
>  lib/sbi/sbi_console.c     | 19 ++++++++++++++-----
>  2 files changed, 17 insertions(+), 5 deletions(-)
> 
> diff --git a/include/sbi/sbi_console.h b/include/sbi/sbi_console.h
> index 1bdeeb9..7e757a7 100644
> --- a/include/sbi/sbi_console.h
> +++ b/include/sbi/sbi_console.h
> @@ -19,6 +19,9 @@ struct sbi_console_device {
>         /** Write a character to the console output */
>         void (*console_putc)(char ch);
>  
> +       /** Write a character string to the console output */
> +       void (*console_puts)(const char *str, unsigned long len);
> +
>         /** Read a character from the console input */
>         int (*console_getc)(void);
>  };
> diff --git a/lib/sbi/sbi_console.c b/lib/sbi/sbi_console.c
> index a975708..3c98f4e 100644
> --- a/lib/sbi/sbi_console.c
> +++ b/lib/sbi/sbi_console.c
> @@ -12,6 +12,7 @@
>  #include <sbi/sbi_hart.h>
>  #include <sbi/sbi_platform.h>
>  #include <sbi/sbi_scratch.h>
> +#include <sbi/sbi_string.h>
>  
>  static const struct sbi_console_device *console_dev = NULL;
>  static spinlock_t console_out_lock            = SPIN_LOCK_INITIALIZER;
> @@ -44,9 +45,13 @@ void sbi_putc(char ch)
>  void sbi_puts(const char *str)
>  {
>         spin_lock(&console_out_lock);
> -       while (*str) {
> -               sbi_putc(*str);
> -               str++;
> +       if (console_dev && console_dev->console_puts) {
> +               console_dev->console_puts(str, sbi_strlen(str));
> +       } else {
> +               while (*str) {
> +                       sbi_putc(*str);
> +                       str++;
> +               }
>         }
>         spin_unlock(&console_out_lock);
>  }
> @@ -56,8 +61,12 @@ void sbi_nputs(const char *str, unsigned long len)
>         unsigned long i;
>  
>         spin_lock(&console_out_lock);
> -       for (i = 0; i < len; i++)
> -               sbi_putc(str[i]);
> +       if (console_dev && console_dev->console_puts) {
> +               console_dev->console_puts(str, len);
> +       } else {
> +               for (i = 0; i < len; i++)
> +                       sbi_putc(str[i]);
> +       }
>         spin_unlock(&console_out_lock);
>  }
>  
> -- 
> 2.34.1
> 
> 





More information about the opensbi mailing list