* it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
  */
+#include <linux/io.h>
 #include <linux/module.h>
 
 #include <asm/checksum.h>
 EXPORT_SYMBOL(find_first_bit);
 EXPORT_SYMBOL(find_next_bit);
 EXPORT_SYMBOL(generic_find_next_zero_le_bit);
+
+/* I/O primitives (lib/io-*.S) */
+EXPORT_SYMBOL(__raw_readsb);
+EXPORT_SYMBOL(__raw_readsw);
+EXPORT_SYMBOL(__raw_readsl);
+EXPORT_SYMBOL(__raw_writesb);
+EXPORT_SYMBOL(__raw_writesw);
+EXPORT_SYMBOL(__raw_writesl);
 
 lib-y  += delay.o memset.o memcpy.o findbit.o
 lib-y  += csum_partial.o csum_partial_copy_generic.o
 lib-y  += io-readsw.o io-readsl.o io-writesw.o io-writesl.o
+lib-y  += io-readsb.o io-writesb.o
 lib-y  += __avr32_lsl64.o __avr32_lsr64.o __avr32_asr64.o
 
--- /dev/null
+/*
+ * Copyright (C) 2004-2006 Atmel Corporation
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+       .text
+.Lnot_word_aligned:
+1:     ld.ub   r8, r12[0]
+       sub     r10, 1
+       st.b    r11++, r8
+       reteq   r12
+       tst     r11, r9
+       brne    1b
+
+       /* fall through */
+
+       .global __raw_readsb
+       .type   __raw_readsb,@function
+__raw_readsb:
+       cp.w    r10, 0
+       mov     r9, 3
+       reteq   r12
+
+       tst     r11, r9
+       brne    .Lnot_word_aligned
+
+       sub     r10, 4
+       brlt    2f
+
+1:     ldins.b r8:t, r12[0]
+       ldins.b r8:u, r12[0]
+       ldins.b r8:l, r12[0]
+       ldins.b r8:b, r12[0]
+       st.w    r11++, r8
+       sub     r10, 4
+       brge    1b
+
+2:     sub     r10, -4
+       reteq   r12
+
+3:     ld.uh   r8, r12[0]
+       sub     r10, 1
+       st.b    r11++, r8
+       brne    3b
 
--- /dev/null
+/*
+ * Copyright (C) 2004-2006 Atmel Corporation
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+       .text
+.Lnot_word_aligned:
+1:     ld.ub   r8, r11++
+       sub     r10, 1
+       st.b    r12[0], r8
+       reteq   r12
+       tst     r11, r9
+       brne    1b
+
+       /* fall through */
+
+       .global __raw_writesb
+       .type   __raw_writesb,@function
+__raw_writesb:
+       cp.w    r10, 0
+       mov     r9, 3
+       reteq   r12
+
+       tst     r11, r9
+       brne    .Lnot_word_aligned
+
+       sub     r10, 4
+       brlt    2f
+
+1:     ld.w    r8, r11++
+       bfextu  r9, r8, 24, 8
+       st.b    r12[0], r9
+       bfextu  r9, r8, 16, 8
+       st.b    r12[0], r9
+       bfextu  r9, r8, 8, 8
+       st.b    r12[0], r9
+       st.b    r12[0], r8
+       sub     r10, 4
+       brge    1b
+
+2:     sub     r10, -4
+       reteq   r12
+
+3:     ld.ub   r8, r11++
+       sub     r10, 1
+       st.b    r12[0], r8
+       brne    3b
+
+       retal   r12