mu3d_hal_comm.h 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. #ifndef _DRV_COMM_H
  2. #define _DRV_COMM_H
  3. #include "mu3d_hal_hw.h"
  4. #include <linux/io.h>
  5. #undef EXTERN
  6. #ifdef _DRV_COMM_H
  7. #define EXTERN
  8. #else
  9. #define EXTERN \
  10. extern
  11. #endif
  12. /* CONSTANTS */
  13. #ifndef FALSE
  14. #define FALSE 0
  15. #endif
  16. #ifndef TRUE
  17. #define TRUE 1
  18. #endif
  19. /* TYPES */
  20. typedef unsigned int DEV_UINT32;
  21. typedef int DEV_INT32;
  22. typedef unsigned short DEV_UINT16;
  23. typedef short DEV_INT16;
  24. typedef unsigned char DEV_UINT8;
  25. typedef char DEV_INT8;
  26. typedef enum {
  27. RET_SUCCESS = 0,
  28. RET_FAIL,
  29. } USB_RESULT;
  30. #ifdef NEVER
  31. #define os_writeb(addr, data) {\
  32. (*((volatile DEV_UINT8*)(addr)) = (DEV_UINT8)data);\
  33. if (0) \
  34. pr_debug("****** os_writeb [0x%08x] = 0x%08x (%s#%d)\n", (unsigned int)addr, data, __func__, __LINE__);\
  35. }
  36. #define os_writew(addr, data) {\
  37. (*((volatile DEV_UINT16*)(addr)) = (DEV_UINT16)data);\
  38. if (0) \
  39. pr_debug("****** os_writew [0x%08x] = 0x%08x (%s#%d)\n", (unsigned int)addr, data, __func__, __LINE__);\
  40. }
  41. #define os_writel(addr, data) {\
  42. (*((volatile DEV_UINT32*)(addr)) = (DEV_UINT32)data);\
  43. if (0) \
  44. pr_debug("****** os_writel [0x%08x] = 0x%08x (%s#%d)\n", (unsigned int)addr, data, __func__, __LINE__);\
  45. }
  46. #define os_readl(addr) (*((volatile DEV_UINT32 *)(addr)))
  47. #define os_writelmsk(addr, data, msk) \
  48. { os_writel(addr, ((os_readl(addr) & ~(msk)) | ((data) & (msk)))); \
  49. }
  50. #define os_setmsk(addr, msk) \
  51. { os_writel(addr, os_readl(addr) | msk); \
  52. }
  53. #define os_clrmsk(addr, msk) \
  54. { os_writel(addr, os_readl(addr) & ~msk); \
  55. }
  56. /*msk the data first, then umsk with the umsk.*/
  57. #define os_writelmskumsk(addr, data, msk, umsk) \
  58. {\
  59. os_writel(addr, ((os_readl(addr) & ~(msk)) | ((data) & (msk))) & (umsk));\
  60. }
  61. #define USB_END_OFFSET(_bEnd, _bOffset) ((0x10*(_bEnd-1)) + _bOffset)
  62. #define USB_ReadCsr32(_bOffset, _bEnd) os_readl(USB_END_OFFSET(_bEnd, _bOffset))
  63. #define USB_WriteCsr32(_bOffset, _bEnd, _bData) os_writel(USB_END_OFFSET(_bEnd, _bOffset), _bData)
  64. #else
  65. static inline void os_writeb(void __iomem *addr, unsigned char data)
  66. {
  67. writeb(data, (void __iomem *)addr);
  68. if (0)
  69. pr_debug("%s writeb [%p] = 0x%08x\n", __func__, (void *)addr, data);
  70. }
  71. static inline void os_writew(void __iomem *addr, unsigned short data)
  72. {
  73. writew(data, (void __iomem *)addr);
  74. if (0)
  75. pr_debug("%s writew [%p] = 0x%08x\n", __func__, (void *)addr, data);
  76. }
  77. static inline void os_writel(void __iomem *addr, unsigned int data)
  78. {
  79. writel(data, (void __iomem *)addr);
  80. if (0)
  81. pr_debug("%s writel [%p] = 0x%08x\n", __func__, (void *)addr, data);
  82. }
  83. #define os_readl(addr) readl((void __iomem *)((unsigned long)addr))
  84. static inline void os_writelmsk(void __iomem *addr, unsigned int data, unsigned int msk)
  85. {
  86. unsigned int tmp = readl((void __iomem *)addr);
  87. mb();
  88. writel(((tmp & ~(msk)) | ((data) & (msk))), (void __iomem *)addr);
  89. }
  90. static inline void os_setmsk(void __iomem *addr, unsigned int msk)
  91. {
  92. unsigned int tmp = readl((void __iomem *)addr);
  93. if (0)
  94. pr_debug("%s setmsk [%p] = 0x%08x\n", __func__, (void *)addr, tmp);
  95. mb();
  96. writel((tmp | msk), (void __iomem *)addr);
  97. if (0)
  98. pr_debug("%s setmsk [%p] = 0x%08x\n", __func__, (void *)addr,
  99. readl((void __iomem *)addr));
  100. }
  101. static inline void os_clrmsk(void __iomem *addr, unsigned int msk)
  102. {
  103. unsigned int tmp = readl((void __iomem *)addr);
  104. if (0)
  105. pr_debug("%s clrmsk [%p] = 0x%08x\n", __func__, (void *)addr, tmp);
  106. mb();
  107. writel((tmp & ~(msk)), (void __iomem *)addr);
  108. if (0)
  109. pr_debug("%s clrmsk [%p] = 0x%08x\n", __func__, (void *)addr,
  110. readl((void __iomem *)addr));
  111. }
  112. /*msk the data first, then umsk with the umsk.*/
  113. static inline void os_writelmskumsk(void __iomem *addr, unsigned int data,
  114. unsigned int msk, unsigned int umsk)
  115. {
  116. unsigned int tmp = readl((void __iomem *)addr);
  117. mb();
  118. writel(((tmp & ~(msk)) | ((data) & (msk))) & (umsk), (void __iomem *)addr);
  119. }
  120. static inline int wait_for_value(void __iomem *addr, unsigned int msk,
  121. unsigned int value, unsigned int ms_intvl, unsigned int count)
  122. {
  123. u32 i;
  124. for (i = 0; i < count; i++) {
  125. if ((os_readl(addr) & msk) == value)
  126. return RET_SUCCESS;
  127. mb();
  128. mdelay(ms_intvl);
  129. }
  130. return RET_FAIL;
  131. }
  132. static inline int wait_for_value_us(void __iomem *addr, unsigned int msk,
  133. unsigned int value, unsigned int us_intvl, unsigned int count)
  134. {
  135. u32 i;
  136. for (i = 0; i < count; i++) {
  137. if ((os_readl(addr) & msk) == value)
  138. return RET_SUCCESS;
  139. mb();
  140. udelay(us_intvl);
  141. }
  142. return RET_FAIL;
  143. }
  144. #define USB_END_OFFSET(_bEnd, _bOffset) ((0x10*(_bEnd-1)) + _bOffset)
  145. #define USB_ReadCsr32(_bOffset, _bEnd) \
  146. readl((void __iomem *)(uintptr_t)(USB_END_OFFSET(_bEnd, _bOffset)))
  147. #define USB_WriteCsr32(_bOffset, _bEnd, _bData) \
  148. do {\
  149. writel(_bData, (void __iomem *)(uintptr_t)(USB_END_OFFSET(_bEnd, _bOffset)));\
  150. mb();\
  151. } while (0)
  152. #endif
  153. #define div_and_rnd_up(x, y) (((x) + (y) - 1) / (y))
  154. #endif /*_DRV_COMM_H*/