Module Name: src
Committed By: matt
Date: Thu Dec 15 04:52:59 UTC 2011
Modified Files:
src/sys/arch/evbmips/rmixl [matt-nb5-mips64]: machdep.c
Log Message:
Add earlycons support.
To generate a diff of this commit:
cvs rdiff -u -r1.1.2.37 -r1.1.2.38 src/sys/arch/evbmips/rmixl/machdep.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/evbmips/rmixl/machdep.c
diff -u src/sys/arch/evbmips/rmixl/machdep.c:1.1.2.37 src/sys/arch/evbmips/rmixl/machdep.c:1.1.2.38
--- src/sys/arch/evbmips/rmixl/machdep.c:1.1.2.37 Sat Dec 3 01:56:55 2011
+++ src/sys/arch/evbmips/rmixl/machdep.c Thu Dec 15 04:52:59 2011
@@ -238,6 +238,42 @@ static void rmixl_wakeup_info_print(vola
#endif /* MULTIPROCESSOR */
static void rmixl_fixup_curcpu(void);
+#if NCOM > 0
+static volatile uint32_t *rmixl_com0addr;
+static int
+rmixl_cngetc(dev_t dv)
+{
+ volatile uint32_t * const com0addr = rmixl_com0addr;
+
+ if ((be32toh(com0addr[com_lsr]) & LSR_RXRDY) == 0)
+ return -1;
+
+ return be32toh(com0addr[com_data]) & 0xff;
+}
+
+static void
+rmixl_cnputc(dev_t dv, int c)
+{
+ volatile uint32_t * const com0addr = rmixl_com0addr;
+ int timo = 150000;
+
+ while ((be32toh(com0addr[com_lsr]) & LSR_TXRDY) == 0 && --timo > 0)
+ ;
+
+ com0addr[com_data] = htobe32(c);
+ __asm __volatile("sync");
+
+ while ((be32toh(com0addr[com_lsr]) & LSR_TSRE) == 0 && --timo > 0)
+ ;
+}
+
+struct consdev rmixl_earlycons = {
+ .cn_putc = rmixl_cnputc,
+ .cn_getc = rmixl_cngetc,
+ .cn_pollc = nullcnpollc,
+};
+#endif
+
/*
* Do all the stuff that locore normally does before calling main().
*/
@@ -265,6 +301,11 @@ mach_init(int argc, int32_t *argv, void
kernend = (void *)mips_round_page(end);
memset(edata, 0, (char *)kernend - edata);
+#if NCOM > 0
+ rmixl_com0addr = (void *)(vaddr_t)(RMIXL_IO_DEV_VBASE + comcnaddr);
+ cn_tab = &rmixl_earlycons; /* after clearing BSS, not before */
+#endif
+
/*
* Set up the exception vectors and CPU-specific function
* vectors early on. We need the wbflush() vector set up