
From: Deepak Saxena <dsaxena@plexity.net>

UARTS on several Intel IXP2000 systems are connected in such a way that
they can only be addressed using full word accesses instead of bytes. 
Following patch adds a UPIO_MEM32 io-type to identify these UARTs.

Signed-off-by: Deepak Saxena <dsaxena@plexity.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/drivers/serial/8250.c        |    7 +++++++
 25-akpm/drivers/serial/serial_core.c |    1 +
 25-akpm/include/linux/serial_core.h  |    1 +
 3 files changed, 9 insertions(+)

diff -puN drivers/serial/8250.c~add-support-for-word-length-uart-registers drivers/serial/8250.c
--- 25/drivers/serial/8250.c~add-support-for-word-length-uart-registers	2004-09-11 15:59:52.178263016 -0700
+++ 25-akpm/drivers/serial/8250.c	2004-09-11 15:59:52.198259976 -0700
@@ -188,6 +188,9 @@ static _INLINE_ unsigned int serial_in(s
 	case UPIO_MEM:
 		return readb(up->port.membase + offset);
 
+	case UPIO_MEM32:
+		return readl(up->port.membase + offset);
+
 	default:
 		return inb(up->port.iobase + offset);
 	}
@@ -208,6 +211,10 @@ serial_out(struct uart_8250_port *up, in
 		writeb(value, up->port.membase + offset);
 		break;
 
+	case UPIO_MEM32:
+		writel(value, up->port.membase + offset);
+		break;
+
 	default:
 		outb(value, up->port.iobase + offset);
 	}
diff -puN drivers/serial/serial_core.c~add-support-for-word-length-uart-registers drivers/serial/serial_core.c
--- 25/drivers/serial/serial_core.c~add-support-for-word-length-uart-registers	2004-09-11 15:59:52.180262712 -0700
+++ 25-akpm/drivers/serial/serial_core.c	2004-09-11 15:59:52.200259672 -0700
@@ -1978,6 +1978,7 @@ uart_report_port(struct uart_driver *drv
 		printk("I/O 0x%x offset 0x%x", port->iobase, port->hub6);
 		break;
 	case UPIO_MEM:
+	case UPIO_MEM32:
 		printk("MMIO 0x%lx", port->mapbase);
 		break;
 	}
diff -puN include/linux/serial_core.h~add-support-for-word-length-uart-registers include/linux/serial_core.h
--- 25/include/linux/serial_core.h~add-support-for-word-length-uart-registers	2004-09-11 15:59:52.181262560 -0700
+++ 25-akpm/include/linux/serial_core.h	2004-09-11 15:59:52.201259520 -0700
@@ -178,6 +178,7 @@ struct uart_port {
 #define UPIO_PORT		(0)
 #define UPIO_HUB6		(1)
 #define UPIO_MEM		(2)
+#define UPIO_MEM32		(3)
 
 	unsigned int		read_status_mask;	/* driver specific */
 	unsigned int		ignore_status_mask;	/* driver specific */
_
