root/sound/core/memory.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. copy_to_user_fromio
  2. copy_from_user_toio

   1 // SPDX-License-Identifier: GPL-2.0-or-later
   2 /*
   3  *  Copyright (c) by Jaroslav Kysela <perex@perex.cz>
   4  * 
   5  *  Misc memory accessors
   6  */
   7 
   8 #include <linux/export.h>
   9 #include <linux/io.h>
  10 #include <linux/uaccess.h>
  11 #include <sound/core.h>
  12 
  13 /**
  14  * copy_to_user_fromio - copy data from mmio-space to user-space
  15  * @dst: the destination pointer on user-space
  16  * @src: the source pointer on mmio
  17  * @count: the data size to copy in bytes
  18  *
  19  * Copies the data from mmio-space to user-space.
  20  *
  21  * Return: Zero if successful, or non-zero on failure.
  22  */
  23 int copy_to_user_fromio(void __user *dst, const volatile void __iomem *src, size_t count)
  24 {
  25 #if defined(__i386__) || defined(CONFIG_SPARC32)
  26         return copy_to_user(dst, (const void __force*)src, count) ? -EFAULT : 0;
  27 #else
  28         char buf[256];
  29         while (count) {
  30                 size_t c = count;
  31                 if (c > sizeof(buf))
  32                         c = sizeof(buf);
  33                 memcpy_fromio(buf, (void __iomem *)src, c);
  34                 if (copy_to_user(dst, buf, c))
  35                         return -EFAULT;
  36                 count -= c;
  37                 dst += c;
  38                 src += c;
  39         }
  40         return 0;
  41 #endif
  42 }
  43 EXPORT_SYMBOL(copy_to_user_fromio);
  44 
  45 /**
  46  * copy_from_user_toio - copy data from user-space to mmio-space
  47  * @dst: the destination pointer on mmio-space
  48  * @src: the source pointer on user-space
  49  * @count: the data size to copy in bytes
  50  *
  51  * Copies the data from user-space to mmio-space.
  52  *
  53  * Return: Zero if successful, or non-zero on failure.
  54  */
  55 int copy_from_user_toio(volatile void __iomem *dst, const void __user *src, size_t count)
  56 {
  57 #if defined(__i386__) || defined(CONFIG_SPARC32)
  58         return copy_from_user((void __force *)dst, src, count) ? -EFAULT : 0;
  59 #else
  60         char buf[256];
  61         while (count) {
  62                 size_t c = count;
  63                 if (c > sizeof(buf))
  64                         c = sizeof(buf);
  65                 if (copy_from_user(buf, src, c))
  66                         return -EFAULT;
  67                 memcpy_toio(dst, buf, c);
  68                 count -= c;
  69                 dst += c;
  70                 src += c;
  71         }
  72         return 0;
  73 #endif
  74 }
  75 EXPORT_SYMBOL(copy_from_user_toio);

/* [<][>][^][v][top][bottom][index][help] */