0001
0002
0003
0004
0005
0006 #ifndef __SOC_ARC_AUX_H__
0007 #define __SOC_ARC_AUX_H__
0008
0009 #ifdef CONFIG_ARC
0010
0011 #define read_aux_reg(r) __builtin_arc_lr(r)
0012
0013
0014 #define write_aux_reg(r, v) __builtin_arc_sr((unsigned int)(v), r)
0015
0016 #else
0017
0018 static inline int read_aux_reg(u32 r)
0019 {
0020 return 0;
0021 }
0022
0023
0024
0025
0026
0027 static inline void write_aux_reg(u32 r, u32 v)
0028 {
0029 ;
0030 }
0031
0032 #endif
0033
0034 #define READ_BCR(reg, into) \
0035 { \
0036 unsigned int tmp; \
0037 tmp = read_aux_reg(reg); \
0038 if (sizeof(tmp) == sizeof(into)) { \
0039 into = *((typeof(into) *)&tmp); \
0040 } else { \
0041 extern void bogus_undefined(void); \
0042 bogus_undefined(); \
0043 } \
0044 }
0045
0046 #define WRITE_AUX(reg, into) \
0047 { \
0048 unsigned int tmp; \
0049 if (sizeof(tmp) == sizeof(into)) { \
0050 tmp = (*(unsigned int *)&(into)); \
0051 write_aux_reg(reg, tmp); \
0052 } else { \
0053 extern void bogus_undefined(void); \
0054 bogus_undefined(); \
0055 } \
0056 }
0057
0058
0059 #endif