comdef.h 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. /**
  2. ******************************************************************************
  3. * @file comdef.h
  4. * @author StarFive Technology
  5. * @version V1.0
  6. * @date 06/25/2020
  7. * @brief
  8. ******************************************************************************
  9. * @copy
  10. *
  11. * THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  12. * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  13. * TIME. AS A RESULT, STARFIVE SHALL NOT BE HELD LIABLE FOR ANY
  14. * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  15. * FROM THE CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  16. * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  17. *
  18. * COPYRIGHT 2020 Shanghai StarFive Technology Co., Ltd.
  19. */
  20. #ifndef _COMDEF_H_
  21. #define _COMDEF_H_
  22. typedef unsigned char UINT8;
  23. typedef unsigned char UCHAR;
  24. typedef unsigned short UINT16;
  25. typedef unsigned int UINT32;
  26. typedef unsigned short int WCHAR;
  27. typedef unsigned short int UNICODE;
  28. typedef unsigned long UINT64;
  29. typedef int INT64;
  30. typedef int INT32;
  31. typedef short int INT16;
  32. typedef char INT8;
  33. typedef char CHAR;
  34. typedef unsigned short int bool;
  35. typedef unsigned short int STATUS_T;
  36. typedef signed char s8;
  37. typedef unsigned char u8;
  38. typedef signed short s16;
  39. typedef unsigned short u16;
  40. typedef signed int s32;
  41. typedef unsigned int u32;
  42. typedef unsigned long u64;
  43. //typedef int ssize_t;
  44. typedef unsigned char uint8_t;
  45. typedef unsigned short uint16_t;
  46. typedef unsigned int uint32_t;
  47. typedef unsigned long uintptr_t;
  48. typedef unsigned long uint64_t;
  49. typedef signed long s64;
  50. typedef unsigned long size_t;
  51. #define NULL 0
  52. #define FALSE 0
  53. #define TRUE 1
  54. #define typeof __typeof__
  55. #define ARCH_DMA_MINALIGN 32
  56. #define BIT_0 0x00000001
  57. #define BIT_1 0x00000002
  58. #define BIT_2 0x00000004
  59. #define BIT_3 0x00000008
  60. #define BIT_4 0x00000010
  61. #define BIT_5 0x00000020
  62. #define BIT_6 0x00000040
  63. #define BIT_7 0x00000080
  64. #define BIT_8 0x00000100
  65. #define BIT_9 0x00000200
  66. #define BIT_10 0x00000400
  67. #define BIT_11 0x00000800
  68. #define BIT_12 0x00001000
  69. #define BIT_13 0x00002000
  70. #define BIT_14 0x00004000
  71. #define BIT_15 0x00008000
  72. #define BIT_16 0x00010000
  73. #define BIT_17 0x00020000
  74. #define BIT_18 0x00040000
  75. #define BIT_19 0x00080000
  76. #define BIT_20 0x00100000
  77. #define BIT_21 0x00200000
  78. #define BIT_22 0x00400000
  79. #define BIT_23 0x00800000
  80. #define BIT_24 0x01000000
  81. #define BIT_25 0x02000000
  82. #define BIT_26 0x04000000
  83. #define BIT_27 0x08000000
  84. #define BIT_28 0x10000000
  85. #define BIT_29 0x20000000
  86. #define BIT_30 0x40000000
  87. #define BIT_31 0x80000000
  88. #define RSP_SUCCESS 0
  89. #define RSP_GENERAL_FAIL 1
  90. #ifndef BIT
  91. #define BIT(x) (1UL << (x))
  92. #endif
  93. #ifndef writeq
  94. static inline void writeq(u64 val, volatile void *addr)
  95. {
  96. asm volatile("sd %0, 0(%1)" : : "r" (val), "r" (addr));
  97. }
  98. #endif
  99. #ifndef readq
  100. static inline u64 readq(volatile void *addr)
  101. {
  102. u64 val;
  103. asm volatile("ld %0, 0(%1)" : "=r" (val) : "r" (addr));
  104. return val;
  105. }
  106. #endif
  107. #ifndef writel
  108. static inline void writel(u32 val, volatile void *addr)
  109. {
  110. asm volatile("sw %0, 0(%1)" : : "r" (val), "r" (addr));
  111. }
  112. #endif
  113. #ifndef readl
  114. static inline u32 readl(volatile void *addr)
  115. {
  116. u32 val;
  117. asm volatile("lw %0, 0(%1)" : "=r" (val) : "r" (addr));
  118. return val;
  119. }
  120. #endif
  121. #ifndef writew
  122. static inline void writew(u16 val, volatile void *addr)
  123. {
  124. asm volatile("sh %0, 0(%1)" : : "r" (val), "r" (addr));
  125. }
  126. #endif
  127. #ifndef readw
  128. static inline u16 readw(const volatile void *addr)
  129. {
  130. u16 val;
  131. asm volatile("lh %0, 0(%1)" : "=r" (val) : "r" (addr));
  132. return val;
  133. }
  134. #endif
  135. #define inpb(port) (*((volatile UINT8 *) (port)))
  136. #define inph(port) (*((volatile UINT16*) (port)))
  137. #define inpw(port) (*((volatile UINT32*) (port)))
  138. #define outpb(port, val) (*((volatile UINT8 *) (port)) = ((UINT8 ) (val)))
  139. #define outph(port, val) (*((volatile UINT16*) (port)) = ((UINT16) (val)))
  140. #define outpw(port, val) (*((volatile UINT32*) (port)) = ((UINT32) (val)))
  141. #define MA_INB( io ) (UINT8 ) inpb( io )
  142. #define MA_INH( io ) (UINT16) inph( io )
  143. #define MA_INW( io ) (UINT32) inpw( io )
  144. #define MA_INBM( io, mask ) ( inpb( io ) & (mask) )
  145. #define MA_INHM( io, mask ) ( inph( io ) & (mask) )
  146. #define MA_INWM( io, mask ) ( inpw( io ) & (mask) )
  147. #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
  148. /* The `const' in roundup() prevents gcc-3.3 from calling __divdi3 */
  149. #define roundup(x, y) ( \
  150. { \
  151. const typeof(y) __y = y; \
  152. (((x) + (__y - 1)) / __y) * __y; \
  153. } \
  154. )
  155. #define LOG2(x) (((x & 0xaaaaaaaa) ? 1 : 0) + ((x & 0xcccccccc) ? 2 : 0) + \
  156. ((x & 0xf0f0f0f0) ? 4 : 0) + ((x & 0xff00ff00) ? 8 : 0) + \
  157. ((x & 0xffff0000) ? 16 : 0))
  158. #define ___swab32(x) \
  159. ((u32)( \
  160. (((u32)(x) & (u32)0x000000ffUL) << 24) | \
  161. (((u32)(x) & (u32)0x0000ff00UL) << 8) | \
  162. (((u32)(x) & (u32)0x00ff0000UL) >> 8) | \
  163. (((u32)(x) & (u32)0xff000000UL) >> 24) ))
  164. #define __be32_to_cpu(x) ___swab32((u32)(x))
  165. #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
  166. #define MA_OUTB( io, val )\
  167. {\
  168. outpb( io, val );\
  169. }
  170. #define MA_OUTH( io, val )\
  171. {\
  172. outph( io, val );\
  173. }
  174. #define MA_OUTW( io, val )\
  175. {\
  176. outpw( io, val );\
  177. }
  178. #define MA_OUTBM( io, mask, val ) \
  179. {\
  180. UINT8 temp;\
  181. (temp) =(((MA_INW(io) & (UINT8)(~(mask))) | ((UINT8)((val) & (mask)))));\
  182. outpb( io, temp );\
  183. }
  184. #define MA_OUTHM( io, mask, val ) \
  185. {\
  186. UINT16 temp;\
  187. (temp) =(((MA_INH(io) & (UINT16)(~(mask))) |((UINT16)((val) & (mask)))));\
  188. outph( io, temp );\
  189. }
  190. #define MA_OUTWM( io, mask, val ) \
  191. {\
  192. UINT32 temp;\
  193. (temp) =(((MA_INW(io) & (UINT32)(~(mask))) |((UINT32)((val) & (mask)))));\
  194. outpw( io, temp );\
  195. }
  196. #define min(x,y) ((x)<(y)?(x):(y))
  197. #define min3(x, y, z) min(min(x, y), z)
  198. #define max(x, y) ((x)>(y)?(x):(y))
  199. #define ROUND(a,b) (((a) + (b) - 1) & ~((b) - 1))
  200. #define ALIGN(x,a) __ALIGN_MASK((x),(typeof(x))(a)-1)
  201. #define __ALIGN_MASK(x,mask) (((x)+(mask))&~(mask))
  202. #define PAD_COUNT(s, pad) (((s) - 1) / (pad) + 1)
  203. #define PAD_SIZE(s, pad) (PAD_COUNT(s, pad) * pad)
  204. #define ALLOC_ALIGN_BUFFER_PAD(type, name, size, align, pad) \
  205. char __##name[ROUND(PAD_SIZE((size) * sizeof(type), pad), align) \
  206. + (align - 1)]; \
  207. \
  208. type *name = (type *)ALIGN((uintptr_t)__##name, align)
  209. #define ALLOC_ALIGN_BUFFER(type, name, size, align) \
  210. ALLOC_ALIGN_BUFFER_PAD(type, name, size, align, 1)
  211. #define ALLOC_CACHE_ALIGN_BUFFER_PAD(type, name, size, pad) \
  212. ALLOC_ALIGN_BUFFER_PAD(type, name, size, ARCH_DMA_MINALIGN, pad)
  213. #define ALLOC_CACHE_ALIGN_BUFFER(type, name, size) \
  214. ALLOC_ALIGN_BUFFER(type, name, size, ARCH_DMA_MINALIGN)
  215. #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
  216. static inline u64 div_u64_rem(u64 dividend, u32 divisor, u32 *remainder)
  217. {
  218. *remainder = dividend % divisor;
  219. return dividend / divisor;
  220. }
  221. #ifndef false
  222. #define false (0)
  223. #endif
  224. #ifndef true
  225. #define true (1)
  226. #endif
  227. #endif