
From: Tom Rini <trini@kernel.crashing.org>

When <linux/timex.h> started including <asm/io.h> this exposed one of the
fragilities of the code in arch/ppc/boot/, namely that it is tied to the
kernel headers for some information, yet not really the kernel.  The
following starts us in the direction of being less tied to the kernel by
providing our own serial_state definition (all we care about is the ability
to grab information from SERIAL_PORT_DFNS).

Signed-off-by: Tom Rini <trini@kernel.crashing.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/arch/ppc/boot/common/ns16550.c |    6 ++--
 25-akpm/arch/ppc/boot/include/serial.h |   46 +++++++++++++++++++++++++++++++++
 2 files changed, 49 insertions(+), 3 deletions(-)

diff -puN arch/ppc/boot/common/ns16550.c~ppc32-fix-arch-ppc-boot-common-ns16550c arch/ppc/boot/common/ns16550.c
--- 25/arch/ppc/boot/common/ns16550.c~ppc32-fix-arch-ppc-boot-common-ns16550c	Tue Sep 14 15:34:35 2004
+++ 25-akpm/arch/ppc/boot/common/ns16550.c	Tue Sep 14 15:34:35 2004
@@ -5,14 +5,14 @@
 #include <linux/config.h>
 #include <linux/types.h>
 #include <linux/serial.h>
-#include <linux/serialP.h>
 #include <linux/serial_reg.h>
 #include <asm/serial.h>
 
+#include "nonstdio.h"
+#include "serial.h"
+
 #define SERIAL_BAUD	9600
 
-extern void outb(int port, unsigned char val);
-extern unsigned char inb(int port);
 extern unsigned long ISA_io;
 
 static struct serial_state rs_table[RS_TABLE_SIZE] = {
diff -puN /dev/null arch/ppc/boot/include/serial.h
--- /dev/null	Thu Apr 11 07:25:15 2002
+++ 25-akpm/arch/ppc/boot/include/serial.h	Tue Sep 14 15:34:35 2004
@@ -0,0 +1,46 @@
+/*
+ * A really private header file for the (dumb) serial driver in arch/ppc/boot
+ *
+ * Shamelessly taken from include/linux/serialP.h:
+ *
+ * Copyright (C) 1997 by Theodore Ts'o.
+ *
+ * Redistribution of this file is permitted under the terms of the GNU
+ * Public License (GPL)
+ */
+
+#ifndef _PPC_BOOT_SERIALP_H
+#define _PPC_BOOT_SERIALP_H
+
+/*
+ * This is our internal structure for each serial port's state.
+ *
+ * Many fields are paralleled by the structure used by the serial_struct
+ * structure.
+ *
+ * Given that this is how SERIAL_PORT_DFNS are done, and that we need
+ * to use a few of their fields, we need to have our own copy of it.
+ */
+struct serial_state {
+	int	magic;
+	int	baud_base;
+	unsigned long	port;
+	int	irq;
+	int	flags;
+	int	hub6;
+	int	type;
+	int	line;
+	int	revision;	/* Chip revision (950) */
+	int	xmit_fifo_size;
+	int	custom_divisor;
+	int	count;
+	u8	*iomem_base;
+	u16	iomem_reg_shift;
+	unsigned short	close_delay;
+	unsigned short	closing_wait; /* time to wait before closing */
+	unsigned long	icount;
+	int	io_type;
+	void    *info;
+	void    *dev;
+};
+#endif /* _PPC_BOOT_SERIAL_H */
_
