Commit | Line | Data |
---|---|---|
920dae64 AT |
1 | /* |
2 | * ========== Copyright Header Begin ========================================== | |
3 | * | |
4 | * OpenSPARC T2 Processor File: rstf_convert.h | |
5 | * Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved. | |
6 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES. | |
7 | * | |
8 | * The above named program is free software; you can redistribute it and/or | |
9 | * modify it under the terms of the GNU General Public | |
10 | * License version 2 as published by the Free Software Foundation. | |
11 | * | |
12 | * The above named program is distributed in the hope that it will be | |
13 | * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
15 | * General Public License for more details. | |
16 | * | |
17 | * You should have received a copy of the GNU General Public | |
18 | * License along with this work; if not, write to the Free Software | |
19 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. | |
20 | * | |
21 | * ========== Copyright Header End ============================================ | |
22 | */ | |
23 | #ifndef _rstf_convert_h | |
24 | #define _rstf_convert_h | |
25 | ||
26 | #include "rstf.h" | |
27 | #include "byteswap.h" | |
28 | ||
29 | class rstf_convertT { | |
30 | public: | |
31 | static void l2b(rstf_uint8T *t) | |
32 | { | |
33 | int i; | |
34 | uint8_t bytes[sizeof(rstf_protoT)/sizeof(uint8_t)], b; | |
35 | switch (t->arr8[0]) { | |
36 | case INSTR_T: | |
37 | b = t->arr8[1]; | |
38 | t->arr8[1] = (b << 7) | ((b & 2) << 5) | ((b & 4) << 3) | | |
39 | ((b & 8) << 1) | ((b & 0x10) >> 1) | ((b & 0x20) >> 3) | | |
40 | ((b & 0x40) >> 5) | (b >> 7); | |
41 | bytes[2] = t->arr8[3]; | |
42 | bytes[3] = t->arr8[2]; | |
43 | t->arr8[2] = (bytes[3] << 2) | (bytes[2] & 3); | |
44 | t->arr8[3] = (bytes[3] & 0xc0); | |
45 | *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4])); | |
46 | *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8])); | |
47 | *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16])); | |
48 | break; | |
49 | case TRACEINFO_T: | |
50 | switch (t->arr8[1]) { | |
51 | case RSTT2_NLEVEL_T: | |
52 | *(uint16_t *)(&t->arr8[2]) = byteswap16(*(uint16_t *)(&t->arr8[2])); | |
53 | *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4])); | |
54 | *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8])); | |
55 | break; | |
56 | case RSTT2_CPUINFO_T: | |
57 | *(uint16_t *)(&t->arr8[2]) = byteswap16(*(uint16_t *)(&t->arr8[2])); | |
58 | *(uint16_t *)(&t->arr8[4]) = byteswap16(*(uint16_t *)(&t->arr8[4])); | |
59 | *(uint16_t *)(&t->arr8[6]) = byteswap16(*(uint16_t *)(&t->arr8[6])); | |
60 | break; | |
61 | case RSTT2_CPUIDINFO_T: | |
62 | for (i=4; i<24; i+=2) | |
63 | *(uint16_t *)(&t->arr8[i]) = byteswap16(*(uint16_t *)(&t->arr8[i])); | |
64 | break; | |
65 | } | |
66 | break; | |
67 | case TLB_T: | |
68 | b = t->arr8[1]; | |
69 | t->arr8[1] = (b << 7) | ((b & 2) << 5); | |
70 | *(uint16_t *)(&t->arr8[2]) = byteswap16(*(uint16_t *)(&t->arr8[2])); | |
71 | t->arr8[4] = (t->arr8[4] >> 2) | (t->arr8[4] << 6); | |
72 | t->arr8[5] = (t->arr8[5] << 4); | |
73 | *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8])); | |
74 | *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16])); | |
75 | break; | |
76 | case THREAD_T: | |
77 | *(uint16_t *)(&t->arr8[2]) = byteswap16(*(uint16_t *)(&t->arr8[2])); | |
78 | *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8])); | |
79 | break; | |
80 | case TRAP_T: | |
81 | t->arr8[1] = (t->arr8[1] << 7) | (t->arr8[1] >> 4); | |
82 | bytes[2] = t->arr8[3]; | |
83 | bytes[3] = t->arr8[2]; | |
84 | t->arr8[2] = (bytes[3] << 2) | (bytes[2] >> 6); | |
85 | t->arr8[3] = (bytes[2] << 2) | (bytes[3] >> 6); | |
86 | *(uint16_t *)(&t->arr8[4]) = byteswap16(*(uint16_t *)(&t->arr8[4])); | |
87 | bytes[6] = t->arr8[7]; | |
88 | bytes[7] = t->arr8[6]; | |
89 | t->arr8[6] = (bytes[7] << 4) | (bytes[6] >> 4); | |
90 | t->arr8[7] = (bytes[6] << 4) | (bytes[7] >> 4); | |
91 | *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8])); | |
92 | *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16])); | |
93 | break; | |
94 | case TRAPEXIT_T: | |
95 | bytes[2] = t->arr8[3]; | |
96 | bytes[3] = t->arr8[2]; | |
97 | t->arr8[2] = (bytes[3] << 2) | (bytes[2] & 3); | |
98 | t->arr8[3] = (bytes[3] & 0xc0); | |
99 | *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4])); | |
100 | break; | |
101 | case REGVAL_T: | |
102 | t->arr8[1] = (t->arr8[1] << 7) | (t->arr8[1] >> 1); | |
103 | bytes[6] = t->arr8[7]; | |
104 | bytes[7] = t->arr8[6]; | |
105 | t->arr8[6] = bytes[7] << 5; | |
106 | t->arr8[7] = 0; | |
107 | *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8])); | |
108 | *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16])); | |
109 | break; | |
110 | case CPU_T: | |
111 | *(uint16_t *)(&t->arr8[6]) = byteswap16(*(uint16_t *)(&t->arr8[6])); | |
112 | *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16])); | |
113 | break; | |
114 | case PROCESS_T: | |
115 | *(uint32_t *)(&t->arr8[8]) = byteswap32(*(uint32_t *)(&t->arr8[8])); | |
116 | *(uint32_t *)(&t->arr8[12]) = byteswap32(*(uint32_t *)(&t->arr8[12])); | |
117 | *(uint32_t *)(&t->arr8[16]) = byteswap32(*(uint32_t *)(&t->arr8[16])); | |
118 | *(uint32_t *)(&t->arr8[20]) = byteswap32(*(uint32_t *)(&t->arr8[20])); | |
119 | break; | |
120 | case DMA_T: | |
121 | t->arr8[1] = t->arr8[1] >> 7; | |
122 | *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4])); | |
123 | *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8])); | |
124 | break; | |
125 | case LEFTDELIM_T: | |
126 | case RIGHTDELIM_T: | |
127 | *(uint16_t *)(&t->arr8[2]) = byteswap16(*(uint16_t *)(&t->arr8[2])); | |
128 | *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4])); | |
129 | break; | |
130 | case PREG_T: | |
131 | *(uint16_t *)(&t->arr8[2]) = byteswap16(*(uint16_t *)(&t->arr8[2])); | |
132 | *(uint16_t *)(&t->arr8[6]) = byteswap16(*(uint16_t *)(&t->arr8[6])); | |
133 | t->arr8[9] = t->arr8[9] << 6; | |
134 | *(uint16_t *)(&t->arr8[16]) = byteswap16(*(uint16_t *)(&t->arr8[16])); | |
135 | *(uint16_t *)(&t->arr8[18]) = byteswap16(*(uint16_t *)(&t->arr8[18])); | |
136 | *(uint16_t *)(&t->arr8[20]) = byteswap16(*(uint16_t *)(&t->arr8[20])); | |
137 | *(uint16_t *)(&t->arr8[22]) = byteswap16(*(uint16_t *)(&t->arr8[22])); | |
138 | break; | |
139 | case PHYSADDR_T: | |
140 | t->arr8[1] = (t->arr8[1] << 7) | (t->arr8[1] >> 1); | |
141 | bytes[2] = t->arr8[3]; | |
142 | bytes[3] = t->arr8[2]; | |
143 | t->arr8[2] = (bytes[3] << 5); | |
144 | t->arr8[3] = 0; | |
145 | *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8])); | |
146 | *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16])); | |
147 | break; | |
148 | case PAVADIFF_T: | |
149 | t->arr8[1] = (t->arr8[1] << 7) | (t->arr8[1] >> 1); | |
150 | t->arr8[2] = (t->arr8[2] << 5); | |
151 | t->arr8[3] = 0; | |
152 | *(uint16_t *)(&t->arr8[4]) = byteswap16(*(uint16_t *)(&t->arr8[4])); | |
153 | *(uint16_t *)(&t->arr8[6]) = byteswap16(*(uint16_t *)(&t->arr8[6])); | |
154 | *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8])); | |
155 | *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16])); | |
156 | break; | |
157 | case FILEMARKER_T: | |
158 | t->arr8[1] = (t->arr8[1] << 7) | (t->arr8[1] >> 1); | |
159 | t->arr8[4] = (t->arr8[4] << 6); | |
160 | t->arr8[5] = t->arr8[6] = t->arr8[7] = 0; | |
161 | *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8])); | |
162 | *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16])); | |
163 | break; | |
164 | case PATCH_T: | |
165 | t->arr8[1] = (t->arr8[1] >> 7); | |
166 | *(uint16_t *)(&t->arr8[4]) = byteswap16(*(uint16_t *)(&t->arr8[4])); | |
167 | break; | |
168 | case HWINFO_T: | |
169 | t->arr8[1] = (t->arr8[1] << 7); | |
170 | *(uint16_t *)(&t->arr8[4]) = byteswap16(*(uint16_t *)(&t->arr8[4])); | |
171 | *(uint16_t *)(&t->arr8[6]) = byteswap16(*(uint16_t *)(&t->arr8[6])); | |
172 | *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8])); | |
173 | *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16])); | |
174 | break; | |
175 | case MEMVAL_T: | |
176 | b = t->arr8[1]; | |
177 | t->arr8[1] = (b << 7) | ((b&2) << 5) | ((b&4) << 3) | (b >> 6); | |
178 | if (t->arr8[1] & 0x80) { /* ismemval128 */ | |
179 | *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4])); | |
180 | } | |
181 | else { /* ismemval64 */ | |
182 | t->arr8[3] = (t->arr8[3] >> 4); | |
183 | } | |
184 | *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8])); | |
185 | *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16])); | |
186 | break; | |
187 | case BUSTRACE_T: | |
188 | b = t->arr8[1]; | |
189 | t->arr8[1] = (b << 7) | ((b&2) << 5) | ((b&4) << 3) | ((b&8) << 1) | | |
190 | (b >> 4); | |
191 | bytes[2] = t->arr8[3]; | |
192 | bytes[3] = t->arr8[2]; | |
193 | t->arr8[2] = (bytes[3] << 2) | (bytes[2] >> 6); | |
194 | t->arr8[3] = (bytes[2] << 2) | (bytes[3] >> 6); | |
195 | bytes[5] = t->arr8[6]; | |
196 | bytes[6] = t->arr8[5]; | |
197 | bytes[7] = t->arr8[4]; | |
198 | t->arr8[4] = (bytes[7] << 7) | ((bytes[7]&2) << 5) | (bytes[5] & 0x3f); | |
199 | t->arr8[5] = bytes[6]; | |
200 | t->arr8[6] = (bytes[7] & 0xfc); | |
201 | t->arr8[7] = 0; | |
202 | *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8])); | |
203 | *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16])); | |
204 | break; | |
205 | case SNOOP_T: | |
206 | *(uint16_t *)(&t->arr8[2]) = byteswap16(*(uint16_t *)(&t->arr8[2])); | |
207 | *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4])); | |
208 | *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8])); | |
209 | *(uint16_t *)(&t->arr8[16]) = byteswap16(*(uint16_t *)(&t->arr8[16])); | |
210 | break; | |
211 | case TSB_ACCESS_T: | |
212 | t->arr8[1] = (t->arr8[1] >> 7); | |
213 | bytes[2] = t->arr8[3]; | |
214 | bytes[3] = t->arr8[2]; | |
215 | t->arr8[2] = (bytes[2] >> 6); | |
216 | t->arr8[3] = (bytes[2] << 2) | (bytes[3] >> 6); | |
217 | *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8])); | |
218 | *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16])); | |
219 | break; | |
220 | case RFS_SECTION_HEADER_T: | |
221 | *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8])); | |
222 | break; | |
223 | case RFS_CW_T: | |
224 | bytes[1] = t->arr8[2]; | |
225 | bytes[2] = t->arr8[1]; | |
226 | t->arr8[1] = (bytes[1] << 6) | (bytes[2] >> 2); | |
227 | t->arr8[2] = (bytes[2] << 6) | (bytes[1] >> 2); | |
228 | switch (t->arr8[2] & 0x3f) { | |
229 | case cw_reftype_DMA_R: | |
230 | case cw_reftype_DMA_W: | |
231 | *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4])); | |
232 | break; | |
233 | default: | |
234 | t->arr8[5] = (t->arr8[5] << 7) | ((t->arr8[5] & 0x3e) << 1); | |
235 | t->arr8[6] = 0; | |
236 | t->arr8[7] = 0; | |
237 | break; | |
238 | } | |
239 | *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8])); | |
240 | *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16])); | |
241 | break; | |
242 | case RFS_BT_T: | |
243 | bytes[2] = t->arr8[2]; | |
244 | bytes[3] = t->arr8[1]; | |
245 | t->arr8[1] = (bytes[2] << 6) | (bytes[3] >> 2); | |
246 | t->arr8[2] = (bytes[3] << 6) | ((bytes[2] & 4) << 3); | |
247 | t->arr8[3] = 0; | |
248 | *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4])); | |
249 | *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8])); | |
250 | *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16])); | |
251 | break; | |
252 | case TRAPPING_INSTR_T: | |
253 | b = t->arr8[1]; | |
254 | t->arr8[1] = (b << 7) | ((b&2) << 5) | ((b&4) << 3) | ((b&8) << 1) | | |
255 | ((b&0x10) >> 1); | |
256 | bytes[2] = t->arr8[3]; | |
257 | bytes[3] = t->arr8[2]; | |
258 | t->arr8[2] = (bytes[2] << 6) | (bytes[3] >> 2); | |
259 | t->arr8[3] = (bytes[3] << 6); | |
260 | *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4])); | |
261 | *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8])); | |
262 | *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16])); | |
263 | break; | |
264 | } | |
265 | } | |
266 | ||
267 | static void b2l(rstf_uint8T *t) | |
268 | { | |
269 | uint8_t bytes[sizeof(rstf_protoT)/sizeof(uint8_t)], b; | |
270 | int i; | |
271 | switch (t->arr8[0]) { | |
272 | case INSTR_T: | |
273 | b = t->arr8[1]; | |
274 | t->arr8[1] = (b << 7) | ((b & 2) << 5) | ((b & 4) << 3) | | |
275 | ((b & 8) << 1) | ((b & 0x10) >> 1) | ((b & 0x20) >> 3) | | |
276 | ((b & 0x40) >> 5) | (b >> 7); | |
277 | bytes[2] = (t->arr8[2] & 3); | |
278 | bytes[3] = (t->arr8[3] & 0xc0) | (t->arr8[2] >> 2); | |
279 | t->arr8[2] = bytes[3]; | |
280 | t->arr8[3] = bytes[2]; | |
281 | *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4])); | |
282 | *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8])); | |
283 | *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16])); | |
284 | break; | |
285 | case TRACEINFO_T: | |
286 | switch (t->arr8[1]) { | |
287 | case RSTT2_NLEVEL_T: | |
288 | *(uint16_t *)(&t->arr8[2]) = byteswap16(*(uint16_t *)(&t->arr8[2])); | |
289 | *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4])); | |
290 | *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8])); | |
291 | break; | |
292 | case RSTT2_CPUINFO_T: | |
293 | *(uint16_t *)(&t->arr8[2]) = byteswap16(*(uint16_t *)(&t->arr8[2])); | |
294 | *(uint16_t *)(&t->arr8[4]) = byteswap16(*(uint16_t *)(&t->arr8[4])); | |
295 | *(uint16_t *)(&t->arr8[6]) = byteswap16(*(uint16_t *)(&t->arr8[6])); | |
296 | break; | |
297 | case RSTT2_CPUIDINFO_T: | |
298 | for (i=4; i<24; i+=2) | |
299 | *(uint16_t *)(&t->arr8[i]) = byteswap16(*(uint16_t *)(&t->arr8[i])); | |
300 | break; | |
301 | } | |
302 | break; | |
303 | case TLB_T: | |
304 | b = t->arr8[1]; | |
305 | t->arr8[1] = (b >> 7) | ((b & 0x40) >> 5); | |
306 | *(uint16_t *)(&t->arr8[2]) = byteswap16(*(uint16_t *)(&t->arr8[2])); | |
307 | t->arr8[4] = (t->arr8[4] >> 6) | (t->arr8[4] << 2); | |
308 | t->arr8[5] = (t->arr8[5] >> 4); | |
309 | *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8])); | |
310 | *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16])); | |
311 | break; | |
312 | case THREAD_T: | |
313 | *(uint16_t *)(&t->arr8[2]) = byteswap16(*(uint16_t *)(&t->arr8[2])); | |
314 | *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8])); | |
315 | break; | |
316 | case TRAP_T: | |
317 | t->arr8[1] = (t->arr8[1] >> 7) | (t->arr8[1] << 4); | |
318 | bytes[2] = (t->arr8[2] << 6) | (t->arr8[3] >> 2); | |
319 | bytes[3] = (t->arr8[3] << 6) | (t->arr8[2] >> 2); | |
320 | t->arr8[2] = bytes[3]; | |
321 | t->arr8[3] = bytes[2]; | |
322 | *(uint16_t *)(&t->arr8[4]) = byteswap16(*(uint16_t *)(&t->arr8[4])); | |
323 | bytes[6] = (t->arr8[6] << 4) | (t->arr8[7] >> 4); | |
324 | bytes[7] = (t->arr8[7] << 4) | (t->arr8[6] >> 4); | |
325 | t->arr8[6] = bytes[7]; | |
326 | t->arr8[7] = bytes[6]; | |
327 | *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8])); | |
328 | *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16])); | |
329 | break; | |
330 | case TRAPEXIT_T: | |
331 | bytes[2] = (t->arr8[2] & 3); | |
332 | bytes[3] = (t->arr8[3] & 0xc0) | (t->arr8[2] >> 2); | |
333 | t->arr8[2] = bytes[3]; | |
334 | t->arr8[3] = bytes[2]; | |
335 | *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4])); | |
336 | break; | |
337 | case REGVAL_T: | |
338 | t->arr8[1] = (t->arr8[1] >> 7) | (t->arr8[1] << 1); | |
339 | bytes[7] = t->arr8[6] >> 5; | |
340 | bytes[6] = 0; | |
341 | t->arr8[6] = bytes[7]; | |
342 | t->arr8[7] = bytes[6]; | |
343 | *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8])); | |
344 | *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16])); | |
345 | break; | |
346 | case CPU_T: | |
347 | *(uint16_t *)(&t->arr8[6]) = byteswap16(*(uint16_t *)(&t->arr8[6])); | |
348 | *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16])); | |
349 | break; | |
350 | case PROCESS_T: | |
351 | *(uint32_t *)(&t->arr8[8]) = byteswap32(*(uint32_t *)(&t->arr8[8])); | |
352 | *(uint32_t *)(&t->arr8[12]) = byteswap32(*(uint32_t *)(&t->arr8[12])); | |
353 | *(uint32_t *)(&t->arr8[16]) = byteswap32(*(uint32_t *)(&t->arr8[16])); | |
354 | *(uint32_t *)(&t->arr8[20]) = byteswap32(*(uint32_t *)(&t->arr8[20])); | |
355 | break; | |
356 | case DMA_T: | |
357 | t->arr8[1] = t->arr8[1] << 7; | |
358 | *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4])); | |
359 | *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8])); | |
360 | break; | |
361 | case LEFTDELIM_T: | |
362 | case RIGHTDELIM_T: | |
363 | *(uint16_t *)(&t->arr8[2]) = byteswap16(*(uint16_t *)(&t->arr8[2])); | |
364 | *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4])); | |
365 | break; | |
366 | case PREG_T: | |
367 | *(uint16_t *)(&t->arr8[2]) = byteswap16(*(uint16_t *)(&t->arr8[2])); | |
368 | *(uint16_t *)(&t->arr8[6]) = byteswap16(*(uint16_t *)(&t->arr8[6])); | |
369 | t->arr8[9] = t->arr8[9] >> 6; | |
370 | *(uint16_t *)(&t->arr8[16]) = byteswap16(*(uint16_t *)(&t->arr8[16])); | |
371 | *(uint16_t *)(&t->arr8[18]) = byteswap16(*(uint16_t *)(&t->arr8[18])); | |
372 | *(uint16_t *)(&t->arr8[20]) = byteswap16(*(uint16_t *)(&t->arr8[20])); | |
373 | *(uint16_t *)(&t->arr8[22]) = byteswap16(*(uint16_t *)(&t->arr8[22])); | |
374 | break; | |
375 | case PHYSADDR_T: | |
376 | t->arr8[1] = (t->arr8[1] >> 7) | (t->arr8[1] << 1); | |
377 | bytes[3] = t->arr8[2] >> 5; | |
378 | bytes[2] = 0; | |
379 | t->arr8[2] = bytes[3]; | |
380 | t->arr8[3] = bytes[2]; | |
381 | *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8])); | |
382 | *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16])); | |
383 | break; | |
384 | case PAVADIFF_T: | |
385 | t->arr8[1] = (t->arr8[1] >> 7) | (t->arr8[1] << 1); | |
386 | t->arr8[2] = (t->arr8[2] >> 5); | |
387 | t->arr8[3] = 0; | |
388 | *(uint16_t *)(&t->arr8[4]) = byteswap16(*(uint16_t *)(&t->arr8[4])); | |
389 | *(uint16_t *)(&t->arr8[6]) = byteswap16(*(uint16_t *)(&t->arr8[6])); | |
390 | *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8])); | |
391 | *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16])); | |
392 | break; | |
393 | case FILEMARKER_T: | |
394 | t->arr8[1] = (t->arr8[1] >> 7) | (t->arr8[1] << 1); | |
395 | t->arr8[4] = (t->arr8[4] >> 6); | |
396 | t->arr8[5] = t->arr8[6] = t->arr8[7] = 0; | |
397 | *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8])); | |
398 | *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16])); | |
399 | break; | |
400 | case PATCH_T: | |
401 | t->arr8[1] = (t->arr8[1] << 7); | |
402 | *(uint16_t *)(&t->arr8[4]) = byteswap16(*(uint16_t *)(&t->arr8[4])); | |
403 | break; | |
404 | case HWINFO_T: | |
405 | t->arr8[1] = (t->arr8[1] >> 7); | |
406 | *(uint16_t *)(&t->arr8[4]) = byteswap16(*(uint16_t *)(&t->arr8[4])); | |
407 | *(uint16_t *)(&t->arr8[6]) = byteswap16(*(uint16_t *)(&t->arr8[6])); | |
408 | *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8])); | |
409 | *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16])); | |
410 | break; | |
411 | case MEMVAL_T: | |
412 | b = t->arr8[1]; | |
413 | t->arr8[1] = (b >> 7) | ((b&0x40) >> 5) | ((b&0x20) >> 3) | (b << 6); | |
414 | if (b & 0x80) { /* ismemval128 */ | |
415 | *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4])); | |
416 | } | |
417 | else { /* ismemval64 */ | |
418 | t->arr8[3] = (t->arr8[3] << 4); | |
419 | } | |
420 | *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8])); | |
421 | *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16])); | |
422 | break; | |
423 | case BUSTRACE_T: | |
424 | b = t->arr8[1]; | |
425 | t->arr8[1] = (b >> 7) | ((b&0x40) >> 5) | ((b&0x20) >> 3) | | |
426 | ((b&0x10) >> 1) | (b << 4); | |
427 | bytes[2] = (t->arr8[3] >> 2) | (t->arr8[2] << 6); | |
428 | bytes[3] = (t->arr8[2] >> 2) | (t->arr8[3] << 6); | |
429 | t->arr8[2] = bytes[3]; | |
430 | t->arr8[3] = bytes[2]; | |
431 | b = t->arr8[4]; | |
432 | bytes[7] = (b >> 7) | ((b&0x40) >> 5) | (t->arr8[6] & 0xfc); | |
433 | t->arr8[4] = bytes[7]; | |
434 | t->arr8[6] = (b & 0x3f); | |
435 | t->arr8[7] = 0; | |
436 | *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8])); | |
437 | *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16])); | |
438 | break; | |
439 | case SNOOP_T: | |
440 | *(uint16_t *)(&t->arr8[2]) = byteswap16(*(uint16_t *)(&t->arr8[2])); | |
441 | *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4])); | |
442 | *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8])); | |
443 | *(uint16_t *)(&t->arr8[16]) = byteswap16(*(uint16_t *)(&t->arr8[16])); | |
444 | break; | |
445 | case TSB_ACCESS_T: | |
446 | t->arr8[1] = (t->arr8[1] << 7); | |
447 | bytes[2] = (t->arr8[2] << 6) | (t->arr8[3] >> 2); | |
448 | bytes[3] = (t->arr8[3] << 6); | |
449 | t->arr8[2] = bytes[3]; | |
450 | t->arr8[3] = bytes[2]; | |
451 | *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8])); | |
452 | *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16])); | |
453 | break; | |
454 | case RFS_SECTION_HEADER_T: | |
455 | *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8])); | |
456 | break; | |
457 | case RFS_CW_T: | |
458 | bytes[1] = (t->arr8[2] << 2) | (t->arr8[1] >> 6); | |
459 | bytes[2] = (t->arr8[1] << 2) | (t->arr8[2] >> 6); | |
460 | t->arr8[1] = bytes[2]; | |
461 | t->arr8[2] = bytes[1]; | |
462 | switch (bytes[1] >> 2) { | |
463 | case cw_reftype_DMA_R: | |
464 | case cw_reftype_DMA_W: | |
465 | *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4])); | |
466 | break; | |
467 | default: | |
468 | b = t->arr8[5]; | |
469 | t->arr8[5] = (b >> 7) | ((b&0x7c) >> 1); | |
470 | t->arr8[6] = 0; | |
471 | t->arr8[7] = 0; | |
472 | break; | |
473 | } | |
474 | *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8])); | |
475 | *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16])); | |
476 | break; | |
477 | case RFS_BT_T: | |
478 | bytes[3] = (t->arr8[2] >> 6) | (t->arr8[1] << 2); | |
479 | bytes[2] = (t->arr8[1] >> 6) | ((t->arr8[2] & 0x20) >> 3); | |
480 | t->arr8[1] = bytes[3]; | |
481 | t->arr8[2] = bytes[2]; | |
482 | t->arr8[3] = 0; | |
483 | *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4])); | |
484 | *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8])); | |
485 | *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16])); | |
486 | break; | |
487 | case TRAPPING_INSTR_T: | |
488 | b = t->arr8[1]; | |
489 | t->arr8[1] = (b >> 7) | ((b&0x40) >> 5) | ((b&0x20) >> 3) | | |
490 | ((b&0x10) >> 1) | ((b&8) << 1); | |
491 | bytes[2] = (t->arr8[2] >> 6); | |
492 | bytes[3] = (t->arr8[2] << 2) | (t->arr8[3] >> 6); | |
493 | t->arr8[2] = bytes[3]; | |
494 | t->arr8[3] = bytes[2]; | |
495 | *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4])); | |
496 | *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8])); | |
497 | *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16])); | |
498 | break; | |
499 | } | |
500 | } | |
501 | }; | |
502 | ||
503 | #endif |