X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=include%2Fpcmcia%2Fmem_op.h;h=8d19b9401a5bba76d7f7614728e6d7496c78c998;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=559d87352f9a83e896f0340c70ab484df3cffee7;hpb=87fc8d1bb10cd459024a742c6a10961fefcef18f;p=linux-2.6.git diff --git a/include/pcmcia/mem_op.h b/include/pcmcia/mem_op.h index 559d87352..8d19b9401 100644 --- a/include/pcmcia/mem_op.h +++ b/include/pcmcia/mem_op.h @@ -1,30 +1,15 @@ /* - * mem_op.h 1.13 2000/06/12 21:55:40 + * mem_op.h * - * The contents of this file are subject to the Mozilla Public License - * Version 1.1 (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License - * at http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" - * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - * the License for the specific language governing rights and - * limitations under the License. + * 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. * * The initial developer of the original code is David A. Hinds * . Portions created by David A. Hinds * are Copyright (C) 1999 David A. Hinds. All Rights Reserved. * - * Alternatively, the contents of this file may be used under the - * terms of the GNU General Public License version 2 (the "GPL"), in which - * case the provisions of the GPL are applicable instead of the - * above. If you wish to allow the use of your version of this file - * only under the terms of the GPL and not to allow others to use - * your version of this file under the MPL, indicate your decision by - * deleting the provisions above and replace them with the notice and - * other provisions required by the GPL. If you do not delete the - * provisions above, a recipient may use your version of this file - * under either the MPL or the GPL. + * (C) 1999 David A. Hinds */ #ifndef _LINUX_MEM_OP_H @@ -76,67 +61,54 @@ static inline void copy_user_to_pc(void *to, const void *from, size_t n) #else /* UNSAFE_MEMCPY */ -static inline void copy_from_pc(void *to, const void *from, size_t n) +static inline void copy_from_pc(void *to, void __iomem *from, size_t n) { - size_t odd = (n & 1); - n -= odd; - while (n) { - u_short *t = to; - - *t = __raw_readw(from); - to = (void *)((long)to + 2); - from = (const void *)((long)from + 2); - n -= 2; - } - if (odd) - *(u_char *)to = readb(from); + __u16 *t = to; + __u16 __iomem *f = from; + size_t odd = (n & 1); + for (n >>= 1; n; n--) + *t++ = __raw_readw(f++); + if (odd) + *(__u8 *)t = readb(f); } -static inline void copy_to_pc(void *to, const void *from, size_t n) +static inline void copy_to_pc(void __iomem *to, const void *from, size_t n) { - size_t odd = (n & 1); - n -= odd; - while (n) { - __raw_writew(*(u_short *)from, to); - to = (void *)((long)to + 2); - from = (const void *)((long)from + 2); - n -= 2; - } - if (odd) - writeb(*(u_char *)from, to); + __u16 __iomem *t = to; + const __u16 *f = from; + size_t odd = (n & 1); + for (n >>= 1; n ; n--) + __raw_writew(*f++, t++); + if (odd) + writeb(*(__u8 *)f, t); } -static inline void copy_pc_to_user(void *to, const void *from, size_t n) +static inline void copy_pc_to_user(void __user *to, void __iomem *from, size_t n) { - size_t odd = (n & 1); - n -= odd; - while (n) { - put_user(__raw_readw(from), (short *)to); - to = (void *)((long)to + 2); - from = (const void *)((long)from + 2); - n -= 2; - } - if (odd) - put_user(readb(from), (char *)to); + __u16 __user *t = to; + __u16 __iomem *f = from; + size_t odd = (n & 1); + for (n >>= 1; n ; n--) + put_user(__raw_readw(f++), t++); + if (odd) + put_user(readb(f), (char __user *)t); } -static inline void copy_user_to_pc(void *to, const void *from, size_t n) +static inline void copy_user_to_pc(void __iomem *to, void __user *from, size_t n) { - short s; - char c; - size_t odd = (n & 1); - n -= odd; - while (n) { - get_user(s, (short *)from); - __raw_writew(s, to); - to = (void *)((long)to + 2); - from = (const void *)((long)from + 2); - n -= 2; - } - if (odd) { - get_user(c, (char *)from); - writeb(c, to); - } + __u16 __user *f = from; + __u16 __iomem *t = to; + short s; + char c; + size_t odd = (n & 1); + for (n >>= 1; n; n--) { + get_user(s, f++); + __raw_writew(s, t++); + } + if (odd) { + get_user(c, (char __user *)f); + writeb(c, t); + } } #endif /* UNSAFE_MEMCPY */