0001
0002
0003
0004
0005
0006
0007
0008 #ifndef _SPARC_MXCC_H
0009 #define _SPARC_MXCC_H
0010
0011
0012 #define MXCC_DATSTREAM 0x1C00000
0013 #define MXCC_SRCSTREAM 0x1C00100
0014 #define MXCC_DESSTREAM 0x1C00200
0015 #define MXCC_RMCOUNT 0x1C00300
0016 #define MXCC_STEST 0x1C00804
0017 #define MXCC_CREG 0x1C00A04
0018 #define MXCC_SREG 0x1C00B00
0019 #define MXCC_RREG 0x1C00C04
0020 #define MXCC_EREG 0x1C00E00
0021 #define MXCC_PREG 0x1C00F04
0022
0023
0024 #define MXCC_STREAM_SIZE 0x20
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041 #define MXCC_CTL_RRC 0x00000200
0042 #define MXCC_CTL_PRE 0x00000020
0043 #define MXCC_CTL_MCE 0x00000010
0044 #define MXCC_CTL_PARE 0x00000008
0045 #define MXCC_CTL_ECE 0x00000004
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066 #define MXCC_ERR_ME 0x80000000
0067 #define MXCC_ERR_CE 0x20000000
0068 #define MXCC_ERR_PEW 0x10000000
0069 #define MXCC_ERR_PEE 0x08000000
0070 #define MXCC_ERR_ASE 0x04000000
0071 #define MXCC_ERR_EIV 0x02000000
0072 #define MXCC_ERR_MOPC 0x01FF8000
0073 #define MXCC_ERR_ECODE 0x00007F80
0074 #define MXCC_ERR_PRIV 0x00000040
0075 #define MXCC_ERR_HPADDR 0x0000000f
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087 #ifndef __ASSEMBLY__
0088
0089 static inline void mxcc_set_stream_src(unsigned long *paddr)
0090 {
0091 unsigned long data0 = paddr[0];
0092 unsigned long data1 = paddr[1];
0093
0094 __asm__ __volatile__ ("or %%g0, %0, %%g2\n\t"
0095 "or %%g0, %1, %%g3\n\t"
0096 "stda %%g2, [%2] %3\n\t" : :
0097 "r" (data0), "r" (data1),
0098 "r" (MXCC_SRCSTREAM),
0099 "i" (ASI_M_MXCC) : "g2", "g3");
0100 }
0101
0102 static inline void mxcc_set_stream_dst(unsigned long *paddr)
0103 {
0104 unsigned long data0 = paddr[0];
0105 unsigned long data1 = paddr[1];
0106
0107 __asm__ __volatile__ ("or %%g0, %0, %%g2\n\t"
0108 "or %%g0, %1, %%g3\n\t"
0109 "stda %%g2, [%2] %3\n\t" : :
0110 "r" (data0), "r" (data1),
0111 "r" (MXCC_DESSTREAM),
0112 "i" (ASI_M_MXCC) : "g2", "g3");
0113 }
0114
0115 static inline unsigned long mxcc_get_creg(void)
0116 {
0117 unsigned long mxcc_control;
0118
0119 __asm__ __volatile__("set 0xffffffff, %%g2\n\t"
0120 "set 0xffffffff, %%g3\n\t"
0121 "stda %%g2, [%1] %2\n\t"
0122 "lda [%3] %2, %0\n\t" :
0123 "=r" (mxcc_control) :
0124 "r" (MXCC_EREG), "i" (ASI_M_MXCC),
0125 "r" (MXCC_CREG) : "g2", "g3");
0126 return mxcc_control;
0127 }
0128
0129 static inline void mxcc_set_creg(unsigned long mxcc_control)
0130 {
0131 __asm__ __volatile__("sta %0, [%1] %2\n\t" : :
0132 "r" (mxcc_control), "r" (MXCC_CREG),
0133 "i" (ASI_M_MXCC));
0134 }
0135
0136 #endif
0137
0138 #endif