lkml.org 
[lkml]   [2006]   [Oct]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 6/8] AVR32: Implement and export __raw_{read,write}s[bwl]
    Date
    Implement __raw_readsb and __raw_writesb. Export __raw_reads[bwl]
    and __raw_writes[bwl] for use by modules.

    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
    ---
    arch/avr32/kernel/avr32_ksyms.c | 9 +++++++
    arch/avr32/lib/Makefile | 1 +
    arch/avr32/lib/io-readsb.S | 47 +++++++++++++++++++++++++++++++++++
    arch/avr32/lib/io-writesb.S | 52 +++++++++++++++++++++++++++++++++++++++
    4 files changed, 109 insertions(+), 0 deletions(-)

    diff --git a/arch/avr32/kernel/avr32_ksyms.c b/arch/avr32/kernel/avr32_ksyms.c
    index 04f767a..372e3f8 100644
    --- a/arch/avr32/kernel/avr32_ksyms.c
    +++ b/arch/avr32/kernel/avr32_ksyms.c
    @@ -7,6 +7,7 @@
    * 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>
    @@ -53,3 +54,11 @@ EXPORT_SYMBOL(find_next_zero_bit);
    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);
    diff --git a/arch/avr32/lib/Makefile b/arch/avr32/lib/Makefile
    index 09ac43e..084d95b 100644
    --- a/arch/avr32/lib/Makefile
    +++ b/arch/avr32/lib/Makefile
    @@ -7,4 +7,5 @@ lib-y += strncpy_from_user.o strnlen_use
    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
    diff --git a/arch/avr32/lib/io-readsb.S b/arch/avr32/lib/io-readsb.S
    new file mode 100644
    index 0000000..b319d5e
    --- /dev/null
    +++ b/arch/avr32/lib/io-readsb.S
    @@ -0,0 +1,47 @@
    +/*
    + * 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
    diff --git a/arch/avr32/lib/io-writesb.S b/arch/avr32/lib/io-writesb.S
    new file mode 100644
    index 0000000..b4ebaac
    --- /dev/null
    +++ b/arch/avr32/lib/io-writesb.S
    @@ -0,0 +1,52 @@
    +/*
    + * 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
    --
    1.4.1.1
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2006-10-24 10:19    [W:0.028 / U:0.184 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site