linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / include / asm-arm / arch-ebsa110 / uncompress.h
index ae5b775..eee9558 100644 (file)
@@ -8,34 +8,33 @@
  * published by the Free Software Foundation.
  */
 
-#include <linux/serial_reg.h>
-
-#define SERIAL_BASE    ((unsigned char *)0xf0000be0)
-
 /*
  * This does not append a newline
  */
-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)
+static void putstr(const char *s)
 {
-       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));
+       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");
 }
 
 /*