Implement early console functionality based on available SBI calls.
authorkettenis <kettenis@openbsd.org>
Sat, 1 May 2021 12:29:05 +0000 (12:29 +0000)
committerkettenis <kettenis@openbsd.org>
Sat, 1 May 2021 12:29:05 +0000 (12:29 +0000)
While these calls are part of the legacy extensions and deprecated, they
are really useful for debugging purposes.

ok jsg@

sys/arch/riscv64/conf/files.riscv64
sys/arch/riscv64/riscv64/machdep.c
sys/arch/riscv64/riscv64/sbi.c

index 2e08f6b..6111eec 100644 (file)
@@ -8,8 +8,6 @@ major   { sd = 0 }
 #major { wd = 4 }
 major  { rd = 8 }
 
-file   dev/cninit.c
-
 file   arch/riscv64/riscv64/autoconf.c
 file   arch/riscv64/riscv64/ast.c
 file   arch/riscv64/riscv64/bus_space.c
index 834631f..90da72a 100644 (file)
@@ -75,8 +75,6 @@ struct vm_map *phys_map = NULL;
 
 int physmem;
 
-//struct consdev *cn_tab;
-
 caddr_t msgbufaddr;
 paddr_t msgbufphys;
 
@@ -180,12 +178,6 @@ consinit(void)
        com_fdt_init_cons();
 }
 
-//XXX TODO: need to populate console for qemu
-//maybe no longer needed, as already have cn_tab ??
-struct consdev constab[] = {
-       { NULL }
-};
-
 void
 cpu_idle_enter(void)
 {
@@ -919,5 +911,3 @@ pmap_bootstrap_bs_map(bus_space_tag_t t, bus_addr_t bpa, bus_size_t size,
 
        return 0;
 }
-
-
index a988a65..02deb80 100644 (file)
  * SUCH DAMAGE.
  */
 
-#include <sys/cdefs.h>
-
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/types.h>
 
-#if 0
-#include <machine/md_var.h>
-#endif
 #include <machine/sbi.h>
 
+#include <dev/cons.h>
+
 /* SBI Implementation-Specific Definitions */
 #define        OPENSBI_VERSION_MAJOR_OFFSET    16
 #define        OPENSBI_VERSION_MINOR_MASK      0xFFFF
@@ -167,3 +164,52 @@ sbi_init(void)
        KASSERTMSG(sbi_probe_extension(SBI_SHUTDOWN) != 0,
            "SBI doesn't implement sbi_shutdown()");
 }
+
+/*
+ * Early console implementation based on the Console Putchar and
+ * Console Getchar legacy extensions.  These extensions are deprecated
+ * but extremely useful for bringing up new boards.
+ */
+
+void
+sbi_cnprobe(struct consdev *cd)
+{
+}
+
+void
+sbi_cninit(struct consdev *cd)
+{
+}
+
+int
+sbi_cngetc(dev_t dev)
+{
+       int c;
+
+       for (;;) {
+               c = sbi_console_getchar();
+               if (c != -1)
+                       return c;
+       }
+}
+
+void
+sbi_cnputc(dev_t dev, int c)
+{
+       sbi_console_putchar(c);
+}
+
+void
+sbi_cnpollc(dev_t dev, int on)
+{
+}
+
+struct consdev sbi_consdev = {
+       .cn_probe = sbi_cnprobe,
+       .cn_init = sbi_cninit,
+       .cn_getc = sbi_cngetc,
+       .cn_putc = sbi_cnputc,
+       .cn_pollc = sbi_cnpollc,
+};
+
+struct consdev *cn_tab = &sbi_consdev;