vserver 1.9.3
[linux-2.6.git] / include / asm-arm / arch-iop3xx / uncompress.h
index fd7e72b..673fabc 100644 (file)
@@ -1,26 +1,32 @@
 /*
- *  linux/include/asm-arm/arch-iop80310/uncompress.h
+ *  linux/include/asm-arm/arch-iop3xx/uncompress.h
  */
 #include <linux/config.h>
+#include <asm/types.h>
+#include <asm/mach-types.h>
 #include <linux/serial_reg.h>
 #include <asm/hardware.h>
 
-#ifdef CONFIG_ARCH_IQ80310
-#define UART2_BASE    ((volatile unsigned char *)IQ80310_UART2)
-#elif defined(CONFIG_ARCH_IQ80321)
-#define UART2_BASE    ((volatile unsigned char *)IQ80321_UART1)
+#ifdef CONFIG_ARCH_IOP321
+#define UTYPE unsigned char *
+#else
+#define UTYPE u32 *
 #endif
 
+static volatile UTYPE uart_base;
+
+#define TX_DONE (UART_LSR_TEMT|UART_LSR_THRE)
+
 static __inline__ void putc(char c)
 {
-       while ((UART2_BASE[5] & 0x60) != 0x60);
-       UART2_BASE[0] = c;
+       while ((uart_base[UART_LSR] & TX_DONE) != TX_DONE);
+       *uart_base = c;
 }
 
 /*
  * This does not append a newline
  */
-static void puts(const char *s)
+static void putstr(const char *s)
 {
        while (*s) {
                putc(*s);
@@ -30,8 +36,20 @@ static void puts(const char *s)
        }
 }
 
+static __inline__ void __arch_decomp_setup(unsigned long arch_id)
+{
+        if(machine_is_iq80321())
+                       uart_base = (volatile UTYPE)IQ80321_UART;
+               else if(machine_is_iq31244())
+                       uart_base = (volatile UTYPE)IQ31244_UART;
+               else if(machine_is_iq80331())
+                       uart_base = (volatile UTYPE)IQ80331_UART0_PHYS;
+               else
+                       uart_base = (volatile UTYPE)0xfe800000;
+}
+
 /*
  * nothing to do
  */
-#define arch_decomp_setup()
+#define arch_decomp_setup()    __arch_decomp_setup(arch_id)
 #define arch_decomp_wdog()