[PATCH] ppc64: Take udbg out of ppc_md

Anton Blanchard anton at samba.org
Tue Sep 6 11:56:42 EST 2005


From: Milton Miller <miltonm at bga.com>

Take udbg out of ppc_md. Allows us to not overwrite early udbg inits
when assigning ppc_md.

Signed-off-by: Milton Miller <miltonm at bga.com>
Signed-off-by: Anton Blanchard <anton at samba.org>

Index: build/arch/ppc64/kernel/pSeries_lpar.c
===================================================================
--- build.orig/arch/ppc64/kernel/pSeries_lpar.c	2005-09-05 16:11:18.000000000 +1000
+++ build/arch/ppc64/kernel/pSeries_lpar.c	2005-09-05 20:29:46.000000000 +1000
@@ -192,9 +192,9 @@
 void udbg_init_debug_lpar(void)
 {
 	vtermno = 0;
-	ppc_md.udbg_putc = udbg_putcLP;
-	ppc_md.udbg_getc = udbg_getcLP;
-	ppc_md.udbg_getc_poll = udbg_getc_pollLP;
+	udbg_putc = udbg_putcLP;
+	udbg_getc = udbg_getcLP;
+	udbg_getc_poll = udbg_getc_pollLP;
 }
 
 /* returns 0 if couldn't find or use /chosen/stdout as console */
@@ -227,18 +227,18 @@
 			termno = (u32 *)get_property(stdout_node, "reg", NULL);
 			if (termno) {
 				vtermno = termno[0];
-				ppc_md.udbg_putc = udbg_putcLP;
-				ppc_md.udbg_getc = udbg_getcLP;
-				ppc_md.udbg_getc_poll = udbg_getc_pollLP;
+				udbg_putc = udbg_putcLP;
+				udbg_getc = udbg_getcLP;
+				udbg_getc_poll = udbg_getc_pollLP;
 				found = 1;
 			}
 		} else if (device_is_compatible(stdout_node, "hvterm-protocol")) {
 			termno = (u32 *)get_property(stdout_node, "reg", NULL);
 			if (termno) {
 				vtermno = termno[0];
-				ppc_md.udbg_putc = udbg_hvsi_putc;
-				ppc_md.udbg_getc = udbg_hvsi_getc;
-				ppc_md.udbg_getc_poll = udbg_hvsi_getc_poll;
+				udbg_putc = udbg_hvsi_putc;
+				udbg_getc = udbg_hvsi_getc;
+				udbg_getc_poll = udbg_hvsi_getc_poll;
 				found = 1;
 			}
 		}
Index: build/arch/ppc64/kernel/pmac_setup.c
===================================================================
--- build.orig/arch/ppc64/kernel/pmac_setup.c	2005-09-05 20:29:37.000000000 +1000
+++ build/arch/ppc64/kernel/pmac_setup.c	2005-09-05 20:29:46.000000000 +1000
@@ -332,16 +332,13 @@
 		sccdbg = 1;
        		udbg_init_scc(NULL);
        	}
-
-	else {
 #ifdef CONFIG_BOOTX_TEXT
+	else {
 		init_boot_display();
 
-		ppc_md.udbg_putc = btext_putc;
-		ppc_md.udbg_getc = NULL;
-		ppc_md.udbg_getc_poll = NULL;
-#endif /* CONFIG_BOOTX_TEXT */
+		udbg_putc = btext_putc;
 	}
+#endif /* CONFIG_BOOTX_TEXT */
 
 	/* Setup interrupt mapping options */
 	ppc64_interrupt_controller = IC_OPEN_PIC;
Index: build/arch/ppc64/kernel/setup.c
===================================================================
--- build.orig/arch/ppc64/kernel/setup.c	2005-09-05 16:11:18.000000000 +1000
+++ build/arch/ppc64/kernel/setup.c	2005-09-05 20:29:46.000000000 +1000
@@ -89,7 +89,7 @@
 #define EARLY_DEBUG_INIT() udbg_init_maple_realmode()
 #define EARLY_DEBUG_INIT() udbg_init_pmac_realmode()
 #define EARLY_DEBUG_INIT()						\
-	do { ppc_md.udbg_putc = call_rtas_display_status_delay; } while(0)
+	do { udbg_putc = call_rtas_display_status_delay; } while(0)
 #endif
 
 /* extern void *stab; */
@@ -425,12 +425,6 @@
 	}
 	ppc_md = **mach;
 
-	/* our udbg callbacks got overriden by the above, let's put them
-	 * back in. Ultimately, I want those things to be split from the
-	 * main ppc_md
-	 */
-	EARLY_DEBUG_INIT();
-
 	DBG("Found, Initializing memory management...\n");
 
 	/*
Index: build/arch/ppc64/kernel/udbg.c
===================================================================
--- build.orig/arch/ppc64/kernel/udbg.c	2005-09-05 20:29:39.000000000 +1000
+++ build/arch/ppc64/kernel/udbg.c	2005-09-05 20:29:46.000000000 +1000
@@ -20,14 +20,18 @@
 #include <asm/io.h>
 #include <asm/prom.h>
 
+void (*udbg_putc)(unsigned char c);
+unsigned char (*udbg_getc)(void);
+int (*udbg_getc_poll)(void);
+
 void udbg_puts(const char *s)
 {
-	if (ppc_md.udbg_putc) {
+	if (udbg_putc) {
 		char c;
 
 		if (s && *s != '\0') {
 			while ((c = *s++) != '\0')
-				ppc_md.udbg_putc(c);
+				udbg_putc(c);
 		}
 	}
 #if 0
@@ -42,12 +46,12 @@
 	int remain = n;
 	char c;
 
-	if (!ppc_md.udbg_putc)
+	if (!udbg_putc)
 		return 0;
 
 	if (s && *s != '\0') {
 		while (((c = *s++) != '\0') && (remain-- > 0)) {
-			ppc_md.udbg_putc(c);
+			udbg_putc(c);
 		}
 	}
 
@@ -59,12 +63,12 @@
 	char c, *p = buf;
 	int i;
 
-	if (!ppc_md.udbg_getc)
+	if (!udbg_getc)
 		return 0;
 
 	for (i = 0; i < buflen; ++i) {
 		do {
-			c = ppc_md.udbg_getc();
+			c = udbg_getc();
 		} while (c == 0x11 || c == 0x13);
 		if (c == 0)
 			break;
Index: build/arch/ppc64/kernel/udbg_16550.c
===================================================================
--- build.orig/arch/ppc64/kernel/udbg_16550.c	2005-09-05 20:29:39.000000000 +1000
+++ build/arch/ppc64/kernel/udbg_16550.c	2005-09-05 20:29:46.000000000 +1000
@@ -99,9 +99,9 @@
 		out_8(&udbg_comport->lcr, 0x03);	/* 8 data, 1 stop, no parity */
 		out_8(&udbg_comport->mcr, 0x03);	/* RTS/DTR */
 		out_8(&udbg_comport->fcr ,0x07);	/* Clear & enable FIFOs */
-		ppc_md.udbg_putc = udbg_550_putc;
-		ppc_md.udbg_getc = udbg_550_getc;
-		ppc_md.udbg_getc_poll = udbg_550_getc_poll;
+		udbg_putc = udbg_550_putc;
+		udbg_getc = udbg_550_getc;
+		udbg_getc_poll = udbg_550_getc_poll;
 	}
 }
 
@@ -121,8 +121,8 @@
 {
 	udbg_comport = (volatile struct NS16550 __iomem *)0xf40003f8;
 
-	ppc_md.udbg_putc = udbg_maple_real_putc;
-	ppc_md.udbg_getc = NULL;
-	ppc_md.udbg_getc_poll = NULL;
+	udbg_putc = udbg_maple_real_putc;
+	udbg_getc = NULL;
+	udbg_getc_poll = NULL;
 }
 #endif /* CONFIG_PPC_MAPLE */
Index: build/arch/ppc64/kernel/udbg_scc.c
===================================================================
--- build.orig/arch/ppc64/kernel/udbg_scc.c	2005-09-05 20:29:39.000000000 +1000
+++ build/arch/ppc64/kernel/udbg_scc.c	2005-09-05 20:29:46.000000000 +1000
@@ -111,9 +111,9 @@
 	for (i = 0; i < sizeof(scc_inittab); ++i)
 		out_8(sccc, scc_inittab[i]);
 
-	ppc_md.udbg_putc = udbg_scc_putc;
-	ppc_md.udbg_getc = udbg_scc_getc;
-	ppc_md.udbg_getc_poll = udbg_scc_getc_poll;
+	udbg_putc = udbg_scc_putc;
+	udbg_getc = udbg_scc_getc;
+	udbg_getc_poll = udbg_scc_getc_poll;
 
 	udbg_puts("Hello World !\n");
 }
@@ -132,7 +132,7 @@
 	sccc = (volatile u8 __iomem *)0x80013020ul;
 	sccd = (volatile u8 __iomem *)0x80013030ul;
 
-	ppc_md.udbg_putc = udbg_real_scc_putc;
-	ppc_md.udbg_getc = NULL;
-	ppc_md.udbg_getc_poll = NULL;
+	udbg_putc = udbg_real_scc_putc;
+	udbg_getc = NULL;
+	udbg_getc_poll = NULL;
 }
Index: build/arch/ppc64/xmon/start.c
===================================================================
--- build.orig/arch/ppc64/xmon/start.c	2005-09-05 20:29:36.000000000 +1000
+++ build/arch/ppc64/xmon/start.c	2005-09-05 20:29:46.000000000 +1000
@@ -61,8 +61,8 @@
 int
 xmon_read_poll(void)
 {
-	if (ppc_md.udbg_getc_poll)
-		return ppc_md.udbg_getc_poll();
+	if (udbg_getc_poll)
+		return udbg_getc_poll();
 	return -1;
 }
  
Index: build/include/asm-ppc64/machdep.h
===================================================================
--- build.orig/include/asm-ppc64/machdep.h	2005-09-05 16:11:21.000000000 +1000
+++ build/include/asm-ppc64/machdep.h	2005-09-05 20:29:46.000000000 +1000
@@ -103,11 +103,6 @@
 
 	void		(*progress)(char *, unsigned short);
 
-	/* Debug interface.  Low level I/O to some terminal device */
-	void		(*udbg_putc)(unsigned char c);
-	unsigned char	(*udbg_getc)(void);
-	int		(*udbg_getc_poll)(void);
-
 	/* Interface for platform error logging */
 	void 		(*log_error)(char *buf, unsigned int err_type, int fatal);
 
Index: build/include/asm-ppc64/udbg.h
===================================================================
--- build.orig/include/asm-ppc64/udbg.h	2005-09-05 16:11:21.000000000 +1000
+++ build/include/asm-ppc64/udbg.h	2005-09-05 20:29:46.000000000 +1000
@@ -12,17 +12,20 @@
  * 2 of the License, or (at your option) any later version.
  */
 
-void udbg_init_uart(void __iomem *comport, unsigned int speed);
-void udbg_putc(unsigned char c);
-unsigned char udbg_getc(void);
-int udbg_getc_poll(void);
-void udbg_puts(const char *s);
-int udbg_write(const char *s, int n);
-int udbg_read(char *buf, int buflen);
+extern void (*udbg_putc)(unsigned char c);
+extern unsigned char (*udbg_getc)(void);
+extern int (*udbg_getc_poll)(void);
+
+extern void udbg_puts(const char *s);
+extern int udbg_write(const char *s, int n);
+extern int udbg_read(char *buf, int buflen);
+
 struct console;
-void udbg_console_write(struct console *con, const char *s, unsigned int n);
-void udbg_printf(const char *fmt, ...);
-void udbg_ppcdbg(unsigned long flags, const char *fmt, ...);
-unsigned long udbg_ifdebug(unsigned long flags);
+extern void udbg_console_write(struct console *con, const char *s, unsigned int n);
+extern void udbg_printf(const char *fmt, ...);
+extern void udbg_ppcdbg(unsigned long flags, const char *fmt, ...);
+extern unsigned long udbg_ifdebug(unsigned long flags);
+
 
+extern void udbg_init_uart(void __iomem *comport, unsigned int speed);
 #endif



More information about the Linuxppc64-dev mailing list