io.c 935 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. // SPDX-License-Identifier: GPL-2.0
  2. #include <linux/module.h>
  3. #include <linux/types.h>
  4. #include <asm/io.h>
  5. /*
  6. * Copy data from IO memory space to "real" memory space.
  7. * This needs to be optimized.
  8. */
  9. void memcpy_fromio(void *to, const volatile void __iomem *from, long count)
  10. {
  11. char *dst = to;
  12. while (count) {
  13. count--;
  14. *dst++ = readb(from++);
  15. }
  16. }
  17. EXPORT_SYMBOL(memcpy_fromio);
  18. /*
  19. * Copy data from "real" memory space to IO memory space.
  20. * This needs to be optimized.
  21. */
  22. void memcpy_toio(volatile void __iomem *to, const void *from, long count)
  23. {
  24. const char *src = from;
  25. while (count) {
  26. count--;
  27. writeb(*src++, to++);
  28. }
  29. }
  30. EXPORT_SYMBOL(memcpy_toio);
  31. /*
  32. * "memset" on IO memory space.
  33. * This needs to be optimized.
  34. */
  35. void memset_io(volatile void __iomem *dst, int c, long count)
  36. {
  37. unsigned char ch = (char)(c & 0xff);
  38. while (count) {
  39. count--;
  40. writeb(ch, dst);
  41. dst++;
  42. }
  43. }
  44. EXPORT_SYMBOL(memset_io);