fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / include / asm-arm / arch-ebsa110 / uncompress.h
index eee9558..ae5b775 100644 (file)
@@ -8,33 +8,34 @@
  * published by the Free Software Foundation.
  */
 
+#include <linux/serial_reg.h>
+
+#define SERIAL_BASE    ((unsigned char *)0xf0000be0)
+
 /*
  * This does not append a newline
  */
-static void putstr(const char *s)
+static inline void putc(int c)
+{
+       unsigned char v, *base = SERIAL_BASE;
+
+       do {
+               v = base[UART_LSR << 2];
+               barrier();
+       } while (!(v & UART_LSR_THRE));
+
+       base[UART_TX << 2] = c;
+}
+
+static inline void flush(void)
 {
-       unsigned long tmp1, tmp2;
-       __asm__ __volatile__(
-       "ldrb   %0, [%2], #1\n"
-"      teq     %0, #0\n"
-"      beq     3f\n"
-"1:    strb    %0, [%3]\n"
-"2:    ldrb    %1, [%3, #0x14]\n"
-"      and     %1, %1, #0x60\n"
-"      teq     %1, #0x60\n"
-"      bne     2b\n"
-"      teq     %0, #'\n'\n"
-"      moveq   %0, #'\r'\n"
-"      beq     1b\n"
-"      ldrb    %0, [%2], #1\n"
-"      teq     %0, #0\n"
-"      bne     1b\n"
-"3:    ldrb    %1, [%3, #0x14]\n"
-"      and     %1, %1, #0x60\n"
-"      teq     %1, #0x60\n"
-"      bne     3b"
-       : "=&r" (tmp1), "=&r" (tmp2)
-       : "r" (s), "r" (0xf0000be0) : "cc");
+       unsigned char v, *base = SERIAL_BASE;
+
+       do {
+               v = base[UART_LSR << 2];
+               barrier();
+       } while ((v & (UART_LSR_TEMT|UART_LSR_THRE)) !=
+                (UART_LSR_TEMT|UART_LSR_THRE));
 }
 
 /*