On 2024-12-05 23:42, Denis Mukhin via B4 Relay wrote:
From: Denis Mukhin <dmuk...@ford.com>

Enable console focus for domains w/ virtual NS8250.

Code change allows to capture the output from the guest OS now and send it to
the physical console device.

Signed-off-by: Denis Mukhin <dmuk...@ford.com>
---
  xen/drivers/char/console.c | 5 +++++
  1 file changed, 5 insertions(+)

diff --git a/xen/drivers/char/console.c b/xen/drivers/char/console.c
index 
a26daee9c4c4b1134d0ae3d105ffdb656340b6df..798dfdf3412a2feef35e72946d6c59bee59a9251
 100644
--- a/xen/drivers/char/console.c
+++ b/xen/drivers/char/console.c
@@ -41,6 +41,9 @@
  #ifdef CONFIG_SBSA_VUART_CONSOLE
  #include <asm/vpl011.h>
  #endif
+#if defined(CONFIG_HAS_VUART_NS8250)
+#include <asm/hvm/vuart_ns8250.h>
+#endif
/* console: comma-separated list of console outputs. */
  static char __initdata opt_console[30] = OPT_CONSOLE_STR;
@@ -627,6 +630,8 @@ static void handle_keypress_in_domain(struct domain *d, 
char c)
      {
  #if defined(CONFIG_SBSA_VUART_CONSOLE)
          rc = vpl011_rx_char_xen(d, c);
+#elif defined(CONFIG_HAS_VUART_NS8250)
+        rc = vuart_putchar(&d->arch.hvm.vuart, c);
  #endif

I think it would be nicer to just use a single name and avoid ifdef-ery. vuart_putchar() is generic and matches domain_has_vuart(), so that seems good.

You can then have a default stub that returns -ENODEV for when an implementation is not built. (This goes along with Jan's suggestion of a common, default domain_has_vuart().) Something like:

#ifndef vuart_putchar
static inline int vuart_putchar(struct domain *d, char c) {
    return -ENODEV;
}
#define vuart_putchar vuart_putchar
#endif

and ARM can do:
#define vuart_putchar vpl011_rx_char_xen

x86 would need to change its arguments, but that should be straight forward.

What do you think?

Regards,
Jason


Reply via email to