sync_write.h 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #ifndef _MT_SYNC_WRITE_H
  2. #define _MT_SYNC_WRITE_H
  3. #if defined(__KERNEL__)
  4. #include <linux/io.h>
  5. #include <asm/cacheflush.h>
  6. /*
  7. * Define macros.
  8. */
  9. #define mt_reg_sync_writel(v, a) \
  10. do { \
  11. __raw_writel((v), (void __force __iomem *)((a))); \
  12. mb(); \
  13. } while (0)
  14. #define mt_reg_sync_writew(v, a) \
  15. do { \
  16. __raw_writew((v), (void __force __iomem *)((a))); \
  17. mb(); \
  18. } while (0)
  19. #define mt_reg_sync_writeb(v, a) \
  20. do { \
  21. __raw_writeb((v), (void __force __iomem *)((a))); \
  22. mb(); \
  23. } while (0)
  24. #ifdef CONFIG_64BIT
  25. #define mt_reg_sync_writeq(v, a) \
  26. do { \
  27. __raw_writeq((v), (void __force __iomem *)((a))); \
  28. mb(); \
  29. } while (0)
  30. #endif
  31. #else /* __KERNEL__ */
  32. #include <sys/types.h>
  33. #include <sys/stat.h>
  34. #include <fcntl.h>
  35. #include <unistd.h>
  36. #include <string.h>
  37. #define mt_reg_sync_writel(v, a) mt65xx_reg_sync_writel(v, a)
  38. #define mt_reg_sync_writew(v, a) mt65xx_reg_sync_writew(v, a)
  39. #define mt_reg_sync_writeb(v, a) mt65xx_reg_sync_writeb(v, a)
  40. #define mb() \
  41. { \
  42. __asm__ __volatile__ ("dsb" : : : "memory"); \
  43. }
  44. #define mt65xx_reg_sync_writel(v, a) \
  45. do { \
  46. *(volatile unsigned int *)(a) = (v); \
  47. mb(); \
  48. } while (0)
  49. #define mt65xx_reg_sync_writew(v, a) \
  50. do { \
  51. *(volatile unsigned short *)(a) = (v); \
  52. mb(); \
  53. } while (0)
  54. #define mt65xx_reg_sync_writeb(v, a) \
  55. do { \
  56. *(volatile unsigned char *)(a) = (v); \
  57. mb(); \
  58. } while (0)
  59. #endif /* __KERNEL__ */
  60. #endif /* !_MT_SYNC_WRITE_H */