io.c 904 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #include <linux/module.h>
  2. #include <linux/types.h>
  3. #include <asm/io.h>
  4. /*
  5. * Copy data from IO memory space to "real" memory space.
  6. * This needs to be optimized.
  7. */
  8. void _memcpy_fromio(void *to, const volatile void __iomem *from, size_t count)
  9. {
  10. unsigned char *t = to;
  11. while (count) {
  12. count--;
  13. *t = readb(from);
  14. t++;
  15. from++;
  16. }
  17. }
  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, size_t count)
  23. {
  24. const unsigned char *f = from;
  25. while (count) {
  26. count--;
  27. writeb(*f, to);
  28. f++;
  29. to++;
  30. }
  31. }
  32. /*
  33. * "memset" on IO memory space.
  34. * This needs to be optimized.
  35. */
  36. void _memset_io(volatile void __iomem *dst, int c, size_t count)
  37. {
  38. while (count) {
  39. count--;
  40. writeb(c, dst);
  41. dst++;
  42. }
  43. }
  44. EXPORT_SYMBOL(_memcpy_fromio);
  45. EXPORT_SYMBOL(_memcpy_toio);
  46. EXPORT_SYMBOL(_memset_io);