Révision | 75f78bb2de547d16b46ffe696861d5b6fa424f91 (tree) |
---|---|
l'heure | 2023-01-22 14:55:30 |
Auteur | phabrics <phabrics@phab...> |
Commiter | phabrics |
Added generated files so that they wouldn't be regenerated for each build in the repo.
@@ -0,0 +1,4637 @@ | ||
1 | +/* automatically generated by bus-device-auto.sh, do not edit! */ | |
2 | +_TME_RCSID("$Id: bus-device-auto.sh,v 1.3 2009/08/29 17:52:04 fredette Exp $"); | |
3 | + | |
4 | +/* this gives the number of entries that must be in a generic bus | |
5 | + router array for a device with a bus size of 8 * (2 ^ siz_lg2) | |
6 | + bits: */ | |
7 | +#define TME_BUS_ROUTER_INIT_SIZE(siz_lg2) \ | |
8 | + TME_BUS_ROUTER_INIT_INDEX(siz_lg2, (1 << (siz_lg2)) + 1, 0) | |
9 | + | |
10 | + | |
11 | +/* the 16-bit big-endian bus master bus router: */ | |
12 | +const tme_bus_lane_t tme_bus_device_router_16eb[TME_BUS_ROUTER_INIT_SIZE(TME_BUS16_LOG2)] = { | |
13 | + | |
14 | + /* initiator maximum cycle size: 8 bits | |
15 | + initiator address offset: 0 bits | |
16 | + responder bus port size: 8 bits | |
17 | + responder port least lane: D7-D0: */ | |
18 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
19 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
20 | + | |
21 | + /* initiator maximum cycle size: 8 bits | |
22 | + initiator address offset: 0 bits | |
23 | + responder bus port size: 8 bits | |
24 | + responder port least lane: D15-D8: */ | |
25 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
26 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0), | |
27 | + | |
28 | + /* initiator maximum cycle size: 8 bits | |
29 | + initiator address offset: 0 bits | |
30 | + responder bus port size: 16 bits | |
31 | + responder port least lane: D7-D0: */ | |
32 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
33 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0), | |
34 | + | |
35 | + /* initiator maximum cycle size: 8 bits | |
36 | + initiator address offset: 0 bits | |
37 | + responder bus port size: 16 bits | |
38 | + responder port least lane: D15-D8 | |
39 | + (responder port not correctly positioned for this initiator): */ | |
40 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
41 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0), | |
42 | + | |
43 | + /* initiator maximum cycle size: 8 bits | |
44 | + initiator address offset: 8 bits | |
45 | + responder bus port size: 8 bits | |
46 | + responder port least lane: D7-D0: */ | |
47 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0), | |
48 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
49 | + | |
50 | + /* initiator maximum cycle size: 8 bits | |
51 | + initiator address offset: 8 bits | |
52 | + responder bus port size: 8 bits | |
53 | + responder port least lane: D15-D8: */ | |
54 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
55 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
56 | + | |
57 | + /* initiator maximum cycle size: 8 bits | |
58 | + initiator address offset: 8 bits | |
59 | + responder bus port size: 16 bits | |
60 | + responder port least lane: D7-D0: */ | |
61 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0), | |
62 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
63 | + | |
64 | + /* initiator maximum cycle size: 8 bits | |
65 | + initiator address offset: 8 bits | |
66 | + responder bus port size: 16 bits | |
67 | + responder port least lane: D15-D8 | |
68 | + (responder port not correctly positioned for this initiator): */ | |
69 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
70 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
71 | + | |
72 | + /* initiator maximum cycle size: 16 bits | |
73 | + initiator address offset: 0 bits | |
74 | + responder bus port size: 8 bits | |
75 | + responder port least lane: D7-D0: */ | |
76 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(1), | |
77 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
78 | + | |
79 | + /* initiator maximum cycle size: 16 bits | |
80 | + initiator address offset: 0 bits | |
81 | + responder bus port size: 8 bits | |
82 | + responder port least lane: D15-D8: */ | |
83 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
84 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0), | |
85 | + | |
86 | + /* initiator maximum cycle size: 16 bits | |
87 | + initiator address offset: 0 bits | |
88 | + responder bus port size: 16 bits | |
89 | + responder port least lane: D7-D0: */ | |
90 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(1), | |
91 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0), | |
92 | + | |
93 | + /* initiator maximum cycle size: 16 bits | |
94 | + initiator address offset: 0 bits | |
95 | + responder bus port size: 16 bits | |
96 | + responder port least lane: D15-D8 | |
97 | + (responder port not correctly positioned for this initiator): */ | |
98 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
99 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0), | |
100 | + | |
101 | + /* initiator maximum cycle size: 16 bits | |
102 | + initiator address offset: 8 bits | |
103 | + (a 16-bit initiator cannot request 16 bits at an 8-bit offset - this is an array placeholder) | |
104 | + responder bus port size: 8 bits | |
105 | + responder port least lane: D7-D0: */ | |
106 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
107 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
108 | + | |
109 | + /* initiator maximum cycle size: 16 bits | |
110 | + initiator address offset: 8 bits | |
111 | + (a 16-bit initiator cannot request 16 bits at an 8-bit offset - this is an array placeholder) | |
112 | + responder bus port size: 8 bits | |
113 | + responder port least lane: D15-D8: */ | |
114 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
115 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
116 | + | |
117 | + /* initiator maximum cycle size: 16 bits | |
118 | + initiator address offset: 8 bits | |
119 | + (a 16-bit initiator cannot request 16 bits at an 8-bit offset - this is an array placeholder) | |
120 | + responder bus port size: 16 bits | |
121 | + responder port least lane: D7-D0: */ | |
122 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
123 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
124 | + | |
125 | + /* initiator maximum cycle size: 16 bits | |
126 | + initiator address offset: 8 bits | |
127 | + (a 16-bit initiator cannot request 16 bits at an 8-bit offset - this is an array placeholder) | |
128 | + responder bus port size: 16 bits | |
129 | + responder port least lane: D15-D8 | |
130 | + (responder port not correctly positioned for this initiator): */ | |
131 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
132 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
133 | +}; | |
134 | + | |
135 | +/* the 16-bit little-endian bus master bus router: */ | |
136 | +const tme_bus_lane_t tme_bus_device_router_16el[TME_BUS_ROUTER_INIT_SIZE(TME_BUS16_LOG2)] = { | |
137 | + | |
138 | + /* initiator maximum cycle size: 8 bits | |
139 | + initiator address offset: 0 bits | |
140 | + responder bus port size: 8 bits | |
141 | + responder port least lane: D7-D0: */ | |
142 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0), | |
143 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
144 | + | |
145 | + /* initiator maximum cycle size: 8 bits | |
146 | + initiator address offset: 0 bits | |
147 | + responder bus port size: 8 bits | |
148 | + responder port least lane: D15-D8: */ | |
149 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
150 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
151 | + | |
152 | + /* initiator maximum cycle size: 8 bits | |
153 | + initiator address offset: 0 bits | |
154 | + responder bus port size: 16 bits | |
155 | + responder port least lane: D7-D0: */ | |
156 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0), | |
157 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
158 | + | |
159 | + /* initiator maximum cycle size: 8 bits | |
160 | + initiator address offset: 0 bits | |
161 | + responder bus port size: 16 bits | |
162 | + responder port least lane: D15-D8 | |
163 | + (responder port not correctly positioned for this initiator): */ | |
164 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
165 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
166 | + | |
167 | + /* initiator maximum cycle size: 8 bits | |
168 | + initiator address offset: 8 bits | |
169 | + responder bus port size: 8 bits | |
170 | + responder port least lane: D7-D0: */ | |
171 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
172 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
173 | + | |
174 | + /* initiator maximum cycle size: 8 bits | |
175 | + initiator address offset: 8 bits | |
176 | + responder bus port size: 8 bits | |
177 | + responder port least lane: D15-D8: */ | |
178 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
179 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0), | |
180 | + | |
181 | + /* initiator maximum cycle size: 8 bits | |
182 | + initiator address offset: 8 bits | |
183 | + responder bus port size: 16 bits | |
184 | + responder port least lane: D7-D0: */ | |
185 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
186 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0), | |
187 | + | |
188 | + /* initiator maximum cycle size: 8 bits | |
189 | + initiator address offset: 8 bits | |
190 | + responder bus port size: 16 bits | |
191 | + responder port least lane: D15-D8 | |
192 | + (responder port not correctly positioned for this initiator): */ | |
193 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
194 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0), | |
195 | + | |
196 | + /* initiator maximum cycle size: 16 bits | |
197 | + initiator address offset: 0 bits | |
198 | + responder bus port size: 8 bits | |
199 | + responder port least lane: D7-D0: */ | |
200 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0), | |
201 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
202 | + | |
203 | + /* initiator maximum cycle size: 16 bits | |
204 | + initiator address offset: 0 bits | |
205 | + responder bus port size: 8 bits | |
206 | + responder port least lane: D15-D8: */ | |
207 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
208 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1), | |
209 | + | |
210 | + /* initiator maximum cycle size: 16 bits | |
211 | + initiator address offset: 0 bits | |
212 | + responder bus port size: 16 bits | |
213 | + responder port least lane: D7-D0: */ | |
214 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0), | |
215 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1), | |
216 | + | |
217 | + /* initiator maximum cycle size: 16 bits | |
218 | + initiator address offset: 0 bits | |
219 | + responder bus port size: 16 bits | |
220 | + responder port least lane: D15-D8 | |
221 | + (responder port not correctly positioned for this initiator): */ | |
222 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
223 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1), | |
224 | + | |
225 | + /* initiator maximum cycle size: 16 bits | |
226 | + initiator address offset: 8 bits | |
227 | + (a 16-bit initiator cannot request 16 bits at an 8-bit offset - this is an array placeholder) | |
228 | + responder bus port size: 8 bits | |
229 | + responder port least lane: D7-D0: */ | |
230 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
231 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
232 | + | |
233 | + /* initiator maximum cycle size: 16 bits | |
234 | + initiator address offset: 8 bits | |
235 | + (a 16-bit initiator cannot request 16 bits at an 8-bit offset - this is an array placeholder) | |
236 | + responder bus port size: 8 bits | |
237 | + responder port least lane: D15-D8: */ | |
238 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
239 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
240 | + | |
241 | + /* initiator maximum cycle size: 16 bits | |
242 | + initiator address offset: 8 bits | |
243 | + (a 16-bit initiator cannot request 16 bits at an 8-bit offset - this is an array placeholder) | |
244 | + responder bus port size: 16 bits | |
245 | + responder port least lane: D7-D0: */ | |
246 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
247 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
248 | + | |
249 | + /* initiator maximum cycle size: 16 bits | |
250 | + initiator address offset: 8 bits | |
251 | + (a 16-bit initiator cannot request 16 bits at an 8-bit offset - this is an array placeholder) | |
252 | + responder bus port size: 16 bits | |
253 | + responder port least lane: D15-D8 | |
254 | + (responder port not correctly positioned for this initiator): */ | |
255 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
256 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
257 | +}; | |
258 | + | |
259 | +/* the 16-bit bus master DMA read function: */ | |
260 | +int | |
261 | +tme_bus_device_dma_read_16(struct tme_bus_device *bus_device, | |
262 | + tme_bus_addr_t address_init, | |
263 | + tme_bus_addr_t size, | |
264 | + tme_uint8_t *buffer, | |
265 | + unsigned int locks) | |
266 | +{ | |
267 | + struct tme_bus_tlb *tlb, tlb_local; | |
268 | + struct tme_bus_connection *conn_bus; | |
269 | + tme_bus_addr_t count_minus_one, count; | |
270 | + struct tme_bus_cycle cycle; | |
271 | + tme_bus_addr_t address_resp; | |
272 | + int shift; | |
273 | + int err; | |
274 | + | |
275 | + /* assume no error: */ | |
276 | + err = TME_OK; | |
277 | + | |
278 | + /* loop while we have more bytes to read: */ | |
279 | + for (; err == TME_OK && size > 0; ) { | |
280 | + | |
281 | + /* hash this address into a TLB entry: */ | |
282 | + tlb = (*bus_device->tme_bus_device_tlb_hash) | |
283 | + (bus_device, | |
284 | + address_init, | |
285 | + TME_BUS_CYCLE_READ); | |
286 | + | |
287 | + /* busy this TLB entry: */ | |
288 | + tme_bus_tlb_busy(tlb); | |
289 | + | |
290 | + /* if this TLB entry is invalid, doesn't cover this address, or if it doesn't | |
291 | + allow reading, reload it: */ | |
292 | + if (tme_bus_tlb_is_invalid(tlb) | |
293 | + || address_init < tlb->tme_bus_tlb_addr_first | |
294 | + || address_init > tlb->tme_bus_tlb_addr_last | |
295 | + || (tlb->tme_bus_tlb_emulator_off_read == TME_EMULATOR_OFF_UNDEF | |
296 | + && !(tlb->tme_bus_tlb_cycles_ok & TME_BUS_CYCLE_READ))) { | |
297 | + | |
298 | + /* unbusy this TLB entry for filling: */ | |
299 | + tme_bus_tlb_unbusy_fill(tlb); | |
300 | + | |
301 | + /* pass this TLB's token: */ | |
302 | + tlb_local.tme_bus_tlb_token = tlb->tme_bus_tlb_token; | |
303 | + | |
304 | + /* get our bus connection: */ | |
305 | + conn_bus = tme_memory_atomic_pointer_read(struct tme_bus_connection *, | |
306 | + bus_device->tme_bus_device_connection, | |
307 | + &bus_device->tme_bus_device_connection_rwlock); | |
308 | + | |
309 | + /* unlock the device: */ | |
310 | + (*bus_device->tme_bus_device_unlock)(bus_device, locks); | |
311 | + | |
312 | + /* reload the TLB entry: */ | |
313 | + err = (*conn_bus->tme_bus_tlb_fill) | |
314 | + (conn_bus, | |
315 | + &tlb_local, | |
316 | + address_init, | |
317 | + TME_BUS_CYCLE_READ); | |
318 | + | |
319 | + /* lock the device: */ | |
320 | + (*bus_device->tme_bus_device_lock)(bus_device, locks); | |
321 | + | |
322 | + /* return if we couldn't fill the TLB entry: */ | |
323 | + if (err != TME_OK) { | |
324 | + return (err); | |
325 | + } | |
326 | + | |
327 | + /* store the TLB entry: */ | |
328 | + *tlb = tlb_local; | |
329 | + | |
330 | + /* loop to check the newly filled TLB entry: */ | |
331 | + continue; | |
332 | + } | |
333 | + | |
334 | + /* if this TLB entry allows fast reading: */ | |
335 | + if (tlb->tme_bus_tlb_emulator_off_read != TME_EMULATOR_OFF_UNDEF) { | |
336 | + | |
337 | + /* see how many bytes we can fast read from this TLB entry, | |
338 | + starting at this address: */ | |
339 | + count_minus_one = (tlb->tme_bus_tlb_addr_last - address_init); | |
340 | + | |
341 | + /* read that many bytes or size bytes, whichever is smaller: */ | |
342 | + count_minus_one = TME_MIN(count_minus_one, | |
343 | + (size - 1)); | |
344 | + count = count_minus_one + 1; | |
345 | + assert (count != 0); | |
346 | + | |
347 | + /* do the bus read: */ | |
348 | + tme_memory_bus_read_buffer((tlb->tme_bus_tlb_emulator_off_read + address_init), buffer, count, tlb->tme_bus_tlb_rwlock, sizeof(tme_uint8_t), sizeof(tme_uint16_t)); | |
349 | + | |
350 | + /* unbusy this TLB entry: */ | |
351 | + tme_bus_tlb_unbusy(tlb); | |
352 | + } | |
353 | + | |
354 | + /* otherwise, we have to do a slow read: */ | |
355 | + else { | |
356 | + | |
357 | + /* get the size of this bus cycle: */ | |
358 | + count = (1 << TME_BUS16_LOG2); | |
359 | + count -= (address_init & (count - 1)); | |
360 | + count = TME_MIN(count, size); | |
361 | + | |
362 | + /* fill the cycle structure: */ | |
363 | + cycle.tme_bus_cycle_type = TME_BUS_CYCLE_READ; | |
364 | + cycle.tme_bus_cycle_size = count; | |
365 | + cycle.tme_bus_cycle_buffer = (tme_uint8_t *) buffer; /* XXX this breaks const */ | |
366 | + cycle.tme_bus_cycle_buffer_increment = 1; | |
367 | + cycle.tme_bus_cycle_lane_routing | |
368 | + = (bus_device->tme_bus_device_router | |
369 | + + TME_BUS_ROUTER_INIT_INDEX(TME_BUS16_LOG2, count, address_init)); | |
370 | + | |
371 | + /* XXX this should come from a socket configuration: */ | |
372 | + cycle.tme_bus_cycle_port = TME_BUS_CYCLE_PORT(0, TME_BUS16_LOG2); | |
373 | + | |
374 | + /* form the physical address for the bus cycle handler: */ | |
375 | + address_resp = tlb->tme_bus_tlb_addr_offset + address_init; | |
376 | + shift = tlb->tme_bus_tlb_addr_shift; | |
377 | + if (shift < 0) { | |
378 | + address_resp <<= (0 - shift); | |
379 | + } | |
380 | + else if (shift > 0) { | |
381 | + address_resp >>= shift; | |
382 | + } | |
383 | + cycle.tme_bus_cycle_address = address_resp; | |
384 | + | |
385 | + /* unbusy this TLB entry: */ | |
386 | + tme_bus_tlb_unbusy(tlb); | |
387 | + | |
388 | + /* unlock the device: */ | |
389 | + (*bus_device->tme_bus_device_unlock)(bus_device, locks); | |
390 | + | |
391 | + /* run the bus cycle: */ | |
392 | + err = (*tlb->tme_bus_tlb_cycle) | |
393 | + (tlb->tme_bus_tlb_cycle_private, &cycle); | |
394 | + | |
395 | + /* if the TLB entry was invalidated before the read: */ | |
396 | + if (err == EBADF | |
397 | + && tme_bus_tlb_is_invalid(tlb)) { | |
398 | + count = 0; | |
399 | + } | |
400 | + | |
401 | + /* otherwise, any other error might be a bus error: */ | |
402 | + else if (err != TME_OK) { | |
403 | + err = tme_bus_tlb_fault(tlb, &cycle, err); | |
404 | + assert (err != TME_OK); | |
405 | + } | |
406 | + | |
407 | + /* lock the device: */ | |
408 | + (*bus_device->tme_bus_device_lock)(bus_device, locks); | |
409 | + } | |
410 | + | |
411 | + /* update the address, buffer, and size and continue: */ | |
412 | + address_init += count; | |
413 | + buffer += count; | |
414 | + size -= count; | |
415 | + } | |
416 | + | |
417 | + return (err); | |
418 | +} | |
419 | + | |
420 | +/* the 16-bit bus master DMA write function: */ | |
421 | +int | |
422 | +tme_bus_device_dma_write_16(struct tme_bus_device *bus_device, | |
423 | + tme_bus_addr_t address_init, | |
424 | + tme_bus_addr_t size, | |
425 | + const tme_uint8_t *buffer, | |
426 | + unsigned int locks) | |
427 | +{ | |
428 | + struct tme_bus_tlb *tlb, tlb_local; | |
429 | + struct tme_bus_connection *conn_bus; | |
430 | + tme_bus_addr_t count_minus_one, count; | |
431 | + struct tme_bus_cycle cycle; | |
432 | + tme_bus_addr_t address_resp; | |
433 | + int shift; | |
434 | + int err; | |
435 | + | |
436 | + /* assume no error: */ | |
437 | + err = TME_OK; | |
438 | + | |
439 | + /* loop while we have more bytes to write: */ | |
440 | + for (; err == TME_OK && size > 0; ) { | |
441 | + | |
442 | + /* hash this address into a TLB entry: */ | |
443 | + tlb = (*bus_device->tme_bus_device_tlb_hash) | |
444 | + (bus_device, | |
445 | + address_init, | |
446 | + TME_BUS_CYCLE_WRITE); | |
447 | + | |
448 | + /* busy this TLB entry: */ | |
449 | + tme_bus_tlb_busy(tlb); | |
450 | + | |
451 | + /* if this TLB entry is invalid, doesn't cover this address, or if it doesn't | |
452 | + allow writing, reload it: */ | |
453 | + if (tme_bus_tlb_is_invalid(tlb) | |
454 | + || address_init < tlb->tme_bus_tlb_addr_first | |
455 | + || address_init > tlb->tme_bus_tlb_addr_last | |
456 | + || (tlb->tme_bus_tlb_emulator_off_write == TME_EMULATOR_OFF_UNDEF | |
457 | + && !(tlb->tme_bus_tlb_cycles_ok & TME_BUS_CYCLE_WRITE))) { | |
458 | + | |
459 | + /* unbusy this TLB entry for filling: */ | |
460 | + tme_bus_tlb_unbusy_fill(tlb); | |
461 | + | |
462 | + /* pass this TLB's token: */ | |
463 | + tlb_local.tme_bus_tlb_token = tlb->tme_bus_tlb_token; | |
464 | + | |
465 | + /* get our bus connection: */ | |
466 | + conn_bus = tme_memory_atomic_pointer_read(struct tme_bus_connection *, | |
467 | + bus_device->tme_bus_device_connection, | |
468 | + &bus_device->tme_bus_device_connection_rwlock); | |
469 | + | |
470 | + /* unlock the device: */ | |
471 | + (*bus_device->tme_bus_device_unlock)(bus_device, locks); | |
472 | + | |
473 | + /* reload the TLB entry: */ | |
474 | + err = (*conn_bus->tme_bus_tlb_fill) | |
475 | + (conn_bus, | |
476 | + &tlb_local, | |
477 | + address_init, | |
478 | + TME_BUS_CYCLE_WRITE); | |
479 | + | |
480 | + /* lock the device: */ | |
481 | + (*bus_device->tme_bus_device_lock)(bus_device, locks); | |
482 | + | |
483 | + /* return if we couldn't fill the TLB entry: */ | |
484 | + if (err != TME_OK) { | |
485 | + return (err); | |
486 | + } | |
487 | + | |
488 | + /* store the TLB entry: */ | |
489 | + *tlb = tlb_local; | |
490 | + | |
491 | + /* loop to check the newly filled TLB entry: */ | |
492 | + continue; | |
493 | + } | |
494 | + | |
495 | + /* if this TLB entry allows fast writing: */ | |
496 | + if (tlb->tme_bus_tlb_emulator_off_write != TME_EMULATOR_OFF_UNDEF) { | |
497 | + | |
498 | + /* see how many bytes we can fast write to this TLB entry, | |
499 | + starting at this address: */ | |
500 | + count_minus_one = (tlb->tme_bus_tlb_addr_last - address_init); | |
501 | + | |
502 | + /* write that many bytes or size bytes, whichever is smaller: */ | |
503 | + count_minus_one = TME_MIN(count_minus_one, | |
504 | + (size - 1)); | |
505 | + count = count_minus_one + 1; | |
506 | + assert (count != 0); | |
507 | + | |
508 | + /* do the bus write: */ | |
509 | + tme_memory_bus_write_buffer((tlb->tme_bus_tlb_emulator_off_write + address_init), buffer, count, tlb->tme_bus_tlb_rwlock, sizeof(tme_uint8_t), sizeof(tme_uint16_t)); | |
510 | + | |
511 | + /* unbusy this TLB entry: */ | |
512 | + tme_bus_tlb_unbusy(tlb); | |
513 | + } | |
514 | + | |
515 | + /* otherwise, we have to do a slow write: */ | |
516 | + else { | |
517 | + | |
518 | + /* get the size of this bus cycle: */ | |
519 | + count = (1 << TME_BUS16_LOG2); | |
520 | + count -= (address_init & (count - 1)); | |
521 | + count = TME_MIN(count, size); | |
522 | + | |
523 | + /* fill the cycle structure: */ | |
524 | + cycle.tme_bus_cycle_type = TME_BUS_CYCLE_WRITE; | |
525 | + cycle.tme_bus_cycle_size = count; | |
526 | + cycle.tme_bus_cycle_buffer = (tme_uint8_t *) buffer; /* XXX this breaks const */ | |
527 | + cycle.tme_bus_cycle_buffer_increment = 1; | |
528 | + cycle.tme_bus_cycle_lane_routing | |
529 | + = (bus_device->tme_bus_device_router | |
530 | + + TME_BUS_ROUTER_INIT_INDEX(TME_BUS16_LOG2, count, address_init)); | |
531 | + | |
532 | + /* XXX this should come from a socket configuration: */ | |
533 | + cycle.tme_bus_cycle_port = TME_BUS_CYCLE_PORT(0, TME_BUS16_LOG2); | |
534 | + | |
535 | + /* form the physical address for the bus cycle handler: */ | |
536 | + address_resp = tlb->tme_bus_tlb_addr_offset + address_init; | |
537 | + shift = tlb->tme_bus_tlb_addr_shift; | |
538 | + if (shift < 0) { | |
539 | + address_resp <<= (0 - shift); | |
540 | + } | |
541 | + else if (shift > 0) { | |
542 | + address_resp >>= shift; | |
543 | + } | |
544 | + cycle.tme_bus_cycle_address = address_resp; | |
545 | + | |
546 | + /* unbusy this TLB entry: */ | |
547 | + tme_bus_tlb_unbusy(tlb); | |
548 | + | |
549 | + /* unlock the device: */ | |
550 | + (*bus_device->tme_bus_device_unlock)(bus_device, locks); | |
551 | + | |
552 | + /* run the bus cycle: */ | |
553 | + err = (*tlb->tme_bus_tlb_cycle) | |
554 | + (tlb->tme_bus_tlb_cycle_private, &cycle); | |
555 | + | |
556 | + /* if the TLB entry was invalidated before the write: */ | |
557 | + if (err == EBADF | |
558 | + && tme_bus_tlb_is_invalid(tlb)) { | |
559 | + count = 0; | |
560 | + } | |
561 | + | |
562 | + /* otherwise, any other error might be a bus error: */ | |
563 | + else if (err != TME_OK) { | |
564 | + err = tme_bus_tlb_fault(tlb, &cycle, err); | |
565 | + assert (err != TME_OK); | |
566 | + } | |
567 | + | |
568 | + /* lock the device: */ | |
569 | + (*bus_device->tme_bus_device_lock)(bus_device, locks); | |
570 | + } | |
571 | + | |
572 | + /* update the address, buffer, and size and continue: */ | |
573 | + address_init += count; | |
574 | + buffer += count; | |
575 | + size -= count; | |
576 | + } | |
577 | + | |
578 | + return (err); | |
579 | +} | |
580 | + | |
581 | +/* the 32-bit big-endian bus master bus router: */ | |
582 | +const tme_bus_lane_t tme_bus_device_router_32eb[TME_BUS_ROUTER_INIT_SIZE(TME_BUS32_LOG2)] = { | |
583 | + | |
584 | + /* initiator maximum cycle size: 8 bits | |
585 | + initiator address offset: 0 bits | |
586 | + responder bus port size: 8 bits | |
587 | + responder port least lane: D7-D0: */ | |
588 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
589 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
590 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
591 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
592 | + | |
593 | + /* initiator maximum cycle size: 8 bits | |
594 | + initiator address offset: 0 bits | |
595 | + responder bus port size: 8 bits | |
596 | + responder port least lane: D15-D8: */ | |
597 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
598 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
599 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
600 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
601 | + | |
602 | + /* initiator maximum cycle size: 8 bits | |
603 | + initiator address offset: 0 bits | |
604 | + responder bus port size: 8 bits | |
605 | + responder port least lane: D23-D16: */ | |
606 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
607 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
608 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
609 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
610 | + | |
611 | + /* initiator maximum cycle size: 8 bits | |
612 | + initiator address offset: 0 bits | |
613 | + responder bus port size: 8 bits | |
614 | + responder port least lane: D31-D24: */ | |
615 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
616 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
617 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
618 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0), | |
619 | + | |
620 | + /* initiator maximum cycle size: 8 bits | |
621 | + initiator address offset: 0 bits | |
622 | + responder bus port size: 16 bits | |
623 | + responder port least lane: D7-D0: */ | |
624 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
625 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
626 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
627 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
628 | + | |
629 | + /* initiator maximum cycle size: 8 bits | |
630 | + initiator address offset: 0 bits | |
631 | + responder bus port size: 16 bits | |
632 | + responder port least lane: D15-D8: */ | |
633 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
634 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
635 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
636 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
637 | + | |
638 | + /* initiator maximum cycle size: 8 bits | |
639 | + initiator address offset: 0 bits | |
640 | + responder bus port size: 16 bits | |
641 | + responder port least lane: D23-D16: */ | |
642 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
643 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
644 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
645 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0), | |
646 | + | |
647 | + /* initiator maximum cycle size: 8 bits | |
648 | + initiator address offset: 0 bits | |
649 | + responder bus port size: 16 bits | |
650 | + responder port least lane: D31-D24 | |
651 | + (responder port not correctly positioned for this initiator): */ | |
652 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
653 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
654 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
655 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0), | |
656 | + | |
657 | + /* initiator maximum cycle size: 8 bits | |
658 | + initiator address offset: 0 bits | |
659 | + responder bus port size: 32 bits | |
660 | + responder port least lane: D7-D0: */ | |
661 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
662 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
663 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
664 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0), | |
665 | + | |
666 | + /* initiator maximum cycle size: 8 bits | |
667 | + initiator address offset: 0 bits | |
668 | + responder bus port size: 32 bits | |
669 | + responder port least lane: D15-D8 | |
670 | + (responder port not correctly positioned for this initiator): */ | |
671 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
672 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
673 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
674 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0), | |
675 | + | |
676 | + /* initiator maximum cycle size: 8 bits | |
677 | + initiator address offset: 0 bits | |
678 | + responder bus port size: 32 bits | |
679 | + responder port least lane: D23-D16 | |
680 | + (responder port not correctly positioned for this initiator): */ | |
681 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
682 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
683 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
684 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0), | |
685 | + | |
686 | + /* initiator maximum cycle size: 8 bits | |
687 | + initiator address offset: 0 bits | |
688 | + responder bus port size: 32 bits | |
689 | + responder port least lane: D31-D24 | |
690 | + (responder port not correctly positioned for this initiator): */ | |
691 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
692 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
693 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
694 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0), | |
695 | + | |
696 | + /* initiator maximum cycle size: 8 bits | |
697 | + initiator address offset: 8 bits | |
698 | + responder bus port size: 8 bits | |
699 | + responder port least lane: D7-D0: */ | |
700 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
701 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
702 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
703 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
704 | + | |
705 | + /* initiator maximum cycle size: 8 bits | |
706 | + initiator address offset: 8 bits | |
707 | + responder bus port size: 8 bits | |
708 | + responder port least lane: D15-D8: */ | |
709 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
710 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
711 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
712 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
713 | + | |
714 | + /* initiator maximum cycle size: 8 bits | |
715 | + initiator address offset: 8 bits | |
716 | + responder bus port size: 8 bits | |
717 | + responder port least lane: D23-D16: */ | |
718 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
719 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
720 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0), | |
721 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
722 | + | |
723 | + /* initiator maximum cycle size: 8 bits | |
724 | + initiator address offset: 8 bits | |
725 | + responder bus port size: 8 bits | |
726 | + responder port least lane: D31-D24: */ | |
727 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
728 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
729 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
730 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
731 | + | |
732 | + /* initiator maximum cycle size: 8 bits | |
733 | + initiator address offset: 8 bits | |
734 | + responder bus port size: 16 bits | |
735 | + responder port least lane: D7-D0: */ | |
736 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
737 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
738 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
739 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
740 | + | |
741 | + /* initiator maximum cycle size: 8 bits | |
742 | + initiator address offset: 8 bits | |
743 | + responder bus port size: 16 bits | |
744 | + responder port least lane: D15-D8: */ | |
745 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
746 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
747 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0), | |
748 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
749 | + | |
750 | + /* initiator maximum cycle size: 8 bits | |
751 | + initiator address offset: 8 bits | |
752 | + responder bus port size: 16 bits | |
753 | + responder port least lane: D23-D16: */ | |
754 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
755 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
756 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0), | |
757 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
758 | + | |
759 | + /* initiator maximum cycle size: 8 bits | |
760 | + initiator address offset: 8 bits | |
761 | + responder bus port size: 16 bits | |
762 | + responder port least lane: D31-D24 | |
763 | + (responder port not correctly positioned for this initiator): */ | |
764 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
765 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
766 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
767 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
768 | + | |
769 | + /* initiator maximum cycle size: 8 bits | |
770 | + initiator address offset: 8 bits | |
771 | + responder bus port size: 32 bits | |
772 | + responder port least lane: D7-D0: */ | |
773 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
774 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
775 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0), | |
776 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
777 | + | |
778 | + /* initiator maximum cycle size: 8 bits | |
779 | + initiator address offset: 8 bits | |
780 | + responder bus port size: 32 bits | |
781 | + responder port least lane: D15-D8 | |
782 | + (responder port not correctly positioned for this initiator): */ | |
783 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
784 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
785 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0), | |
786 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
787 | + | |
788 | + /* initiator maximum cycle size: 8 bits | |
789 | + initiator address offset: 8 bits | |
790 | + responder bus port size: 32 bits | |
791 | + responder port least lane: D23-D16 | |
792 | + (responder port not correctly positioned for this initiator): */ | |
793 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
794 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
795 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0), | |
796 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
797 | + | |
798 | + /* initiator maximum cycle size: 8 bits | |
799 | + initiator address offset: 8 bits | |
800 | + responder bus port size: 32 bits | |
801 | + responder port least lane: D31-D24 | |
802 | + (responder port not correctly positioned for this initiator): */ | |
803 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
804 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
805 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
806 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
807 | + | |
808 | + /* initiator maximum cycle size: 8 bits | |
809 | + initiator address offset: 16 bits | |
810 | + responder bus port size: 8 bits | |
811 | + responder port least lane: D7-D0: */ | |
812 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
813 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
814 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
815 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
816 | + | |
817 | + /* initiator maximum cycle size: 8 bits | |
818 | + initiator address offset: 16 bits | |
819 | + responder bus port size: 8 bits | |
820 | + responder port least lane: D15-D8: */ | |
821 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
822 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0), | |
823 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
824 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
825 | + | |
826 | + /* initiator maximum cycle size: 8 bits | |
827 | + initiator address offset: 16 bits | |
828 | + responder bus port size: 8 bits | |
829 | + responder port least lane: D23-D16: */ | |
830 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
831 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
832 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
833 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
834 | + | |
835 | + /* initiator maximum cycle size: 8 bits | |
836 | + initiator address offset: 16 bits | |
837 | + responder bus port size: 8 bits | |
838 | + responder port least lane: D31-D24: */ | |
839 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
840 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
841 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
842 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
843 | + | |
844 | + /* initiator maximum cycle size: 8 bits | |
845 | + initiator address offset: 16 bits | |
846 | + responder bus port size: 16 bits | |
847 | + responder port least lane: D7-D0: */ | |
848 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
849 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0), | |
850 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
851 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
852 | + | |
853 | + /* initiator maximum cycle size: 8 bits | |
854 | + initiator address offset: 16 bits | |
855 | + responder bus port size: 16 bits | |
856 | + responder port least lane: D15-D8: */ | |
857 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
858 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0), | |
859 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
860 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
861 | + | |
862 | + /* initiator maximum cycle size: 8 bits | |
863 | + initiator address offset: 16 bits | |
864 | + responder bus port size: 16 bits | |
865 | + responder port least lane: D23-D16: */ | |
866 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
867 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
868 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
869 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
870 | + | |
871 | + /* initiator maximum cycle size: 8 bits | |
872 | + initiator address offset: 16 bits | |
873 | + responder bus port size: 16 bits | |
874 | + responder port least lane: D31-D24 | |
875 | + (responder port not correctly positioned for this initiator): */ | |
876 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
877 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
878 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
879 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
880 | + | |
881 | + /* initiator maximum cycle size: 8 bits | |
882 | + initiator address offset: 16 bits | |
883 | + responder bus port size: 32 bits | |
884 | + responder port least lane: D7-D0: */ | |
885 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
886 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0), | |
887 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
888 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
889 | + | |
890 | + /* initiator maximum cycle size: 8 bits | |
891 | + initiator address offset: 16 bits | |
892 | + responder bus port size: 32 bits | |
893 | + responder port least lane: D15-D8 | |
894 | + (responder port not correctly positioned for this initiator): */ | |
895 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
896 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0), | |
897 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
898 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
899 | + | |
900 | + /* initiator maximum cycle size: 8 bits | |
901 | + initiator address offset: 16 bits | |
902 | + responder bus port size: 32 bits | |
903 | + responder port least lane: D23-D16 | |
904 | + (responder port not correctly positioned for this initiator): */ | |
905 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
906 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
907 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
908 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
909 | + | |
910 | + /* initiator maximum cycle size: 8 bits | |
911 | + initiator address offset: 16 bits | |
912 | + responder bus port size: 32 bits | |
913 | + responder port least lane: D31-D24 | |
914 | + (responder port not correctly positioned for this initiator): */ | |
915 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
916 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
917 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
918 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
919 | + | |
920 | + /* initiator maximum cycle size: 8 bits | |
921 | + initiator address offset: 24 bits | |
922 | + responder bus port size: 8 bits | |
923 | + responder port least lane: D7-D0: */ | |
924 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0), | |
925 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
926 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
927 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
928 | + | |
929 | + /* initiator maximum cycle size: 8 bits | |
930 | + initiator address offset: 24 bits | |
931 | + responder bus port size: 8 bits | |
932 | + responder port least lane: D15-D8: */ | |
933 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
934 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
935 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
936 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
937 | + | |
938 | + /* initiator maximum cycle size: 8 bits | |
939 | + initiator address offset: 24 bits | |
940 | + responder bus port size: 8 bits | |
941 | + responder port least lane: D23-D16: */ | |
942 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
943 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
944 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
945 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
946 | + | |
947 | + /* initiator maximum cycle size: 8 bits | |
948 | + initiator address offset: 24 bits | |
949 | + responder bus port size: 8 bits | |
950 | + responder port least lane: D31-D24: */ | |
951 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
952 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
953 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
954 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
955 | + | |
956 | + /* initiator maximum cycle size: 8 bits | |
957 | + initiator address offset: 24 bits | |
958 | + responder bus port size: 16 bits | |
959 | + responder port least lane: D7-D0: */ | |
960 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0), | |
961 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
962 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
963 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
964 | + | |
965 | + /* initiator maximum cycle size: 8 bits | |
966 | + initiator address offset: 24 bits | |
967 | + responder bus port size: 16 bits | |
968 | + responder port least lane: D15-D8: */ | |
969 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
970 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
971 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
972 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
973 | + | |
974 | + /* initiator maximum cycle size: 8 bits | |
975 | + initiator address offset: 24 bits | |
976 | + responder bus port size: 16 bits | |
977 | + responder port least lane: D23-D16: */ | |
978 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
979 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
980 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
981 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
982 | + | |
983 | + /* initiator maximum cycle size: 8 bits | |
984 | + initiator address offset: 24 bits | |
985 | + responder bus port size: 16 bits | |
986 | + responder port least lane: D31-D24 | |
987 | + (responder port not correctly positioned for this initiator): */ | |
988 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
989 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
990 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
991 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
992 | + | |
993 | + /* initiator maximum cycle size: 8 bits | |
994 | + initiator address offset: 24 bits | |
995 | + responder bus port size: 32 bits | |
996 | + responder port least lane: D7-D0: */ | |
997 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0), | |
998 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
999 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
1000 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1001 | + | |
1002 | + /* initiator maximum cycle size: 8 bits | |
1003 | + initiator address offset: 24 bits | |
1004 | + responder bus port size: 32 bits | |
1005 | + responder port least lane: D15-D8 | |
1006 | + (responder port not correctly positioned for this initiator): */ | |
1007 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
1008 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
1009 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
1010 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1011 | + | |
1012 | + /* initiator maximum cycle size: 8 bits | |
1013 | + initiator address offset: 24 bits | |
1014 | + responder bus port size: 32 bits | |
1015 | + responder port least lane: D23-D16 | |
1016 | + (responder port not correctly positioned for this initiator): */ | |
1017 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
1018 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
1019 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
1020 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1021 | + | |
1022 | + /* initiator maximum cycle size: 8 bits | |
1023 | + initiator address offset: 24 bits | |
1024 | + responder bus port size: 32 bits | |
1025 | + responder port least lane: D31-D24 | |
1026 | + (responder port not correctly positioned for this initiator): */ | |
1027 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
1028 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
1029 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
1030 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1031 | + | |
1032 | + /* initiator maximum cycle size: 16 bits | |
1033 | + initiator address offset: 0 bits | |
1034 | + responder bus port size: 8 bits | |
1035 | + responder port least lane: D7-D0: */ | |
1036 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
1037 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
1038 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
1039 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
1040 | + | |
1041 | + /* initiator maximum cycle size: 16 bits | |
1042 | + initiator address offset: 0 bits | |
1043 | + responder bus port size: 8 bits | |
1044 | + responder port least lane: D15-D8: */ | |
1045 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
1046 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
1047 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
1048 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
1049 | + | |
1050 | + /* initiator maximum cycle size: 16 bits | |
1051 | + initiator address offset: 0 bits | |
1052 | + responder bus port size: 8 bits | |
1053 | + responder port least lane: D23-D16: */ | |
1054 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
1055 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
1056 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1), | |
1057 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
1058 | + | |
1059 | + /* initiator maximum cycle size: 16 bits | |
1060 | + initiator address offset: 0 bits | |
1061 | + responder bus port size: 8 bits | |
1062 | + responder port least lane: D31-D24: */ | |
1063 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
1064 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
1065 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
1066 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0), | |
1067 | + | |
1068 | + /* initiator maximum cycle size: 16 bits | |
1069 | + initiator address offset: 0 bits | |
1070 | + responder bus port size: 16 bits | |
1071 | + responder port least lane: D7-D0: */ | |
1072 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
1073 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
1074 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
1075 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
1076 | + | |
1077 | + /* initiator maximum cycle size: 16 bits | |
1078 | + initiator address offset: 0 bits | |
1079 | + responder bus port size: 16 bits | |
1080 | + responder port least lane: D15-D8: */ | |
1081 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
1082 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
1083 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1), | |
1084 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
1085 | + | |
1086 | + /* initiator maximum cycle size: 16 bits | |
1087 | + initiator address offset: 0 bits | |
1088 | + responder bus port size: 16 bits | |
1089 | + responder port least lane: D23-D16: */ | |
1090 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
1091 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
1092 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1), | |
1093 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0), | |
1094 | + | |
1095 | + /* initiator maximum cycle size: 16 bits | |
1096 | + initiator address offset: 0 bits | |
1097 | + responder bus port size: 16 bits | |
1098 | + responder port least lane: D31-D24 | |
1099 | + (responder port not correctly positioned for this initiator): */ | |
1100 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
1101 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
1102 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
1103 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0), | |
1104 | + | |
1105 | + /* initiator maximum cycle size: 16 bits | |
1106 | + initiator address offset: 0 bits | |
1107 | + responder bus port size: 32 bits | |
1108 | + responder port least lane: D7-D0: */ | |
1109 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
1110 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
1111 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1), | |
1112 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0), | |
1113 | + | |
1114 | + /* initiator maximum cycle size: 16 bits | |
1115 | + initiator address offset: 0 bits | |
1116 | + responder bus port size: 32 bits | |
1117 | + responder port least lane: D15-D8 | |
1118 | + (responder port not correctly positioned for this initiator): */ | |
1119 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
1120 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
1121 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1), | |
1122 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0), | |
1123 | + | |
1124 | + /* initiator maximum cycle size: 16 bits | |
1125 | + initiator address offset: 0 bits | |
1126 | + responder bus port size: 32 bits | |
1127 | + responder port least lane: D23-D16 | |
1128 | + (responder port not correctly positioned for this initiator): */ | |
1129 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
1130 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
1131 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1), | |
1132 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0), | |
1133 | + | |
1134 | + /* initiator maximum cycle size: 16 bits | |
1135 | + initiator address offset: 0 bits | |
1136 | + responder bus port size: 32 bits | |
1137 | + responder port least lane: D31-D24 | |
1138 | + (responder port not correctly positioned for this initiator): */ | |
1139 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
1140 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
1141 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
1142 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0), | |
1143 | + | |
1144 | + /* initiator maximum cycle size: 16 bits | |
1145 | + initiator address offset: 8 bits | |
1146 | + responder bus port size: 8 bits | |
1147 | + responder port least lane: D7-D0: */ | |
1148 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
1149 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
1150 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
1151 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1152 | + | |
1153 | + /* initiator maximum cycle size: 16 bits | |
1154 | + initiator address offset: 8 bits | |
1155 | + responder bus port size: 8 bits | |
1156 | + responder port least lane: D15-D8: */ | |
1157 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
1158 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1), | |
1159 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
1160 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1161 | + | |
1162 | + /* initiator maximum cycle size: 16 bits | |
1163 | + initiator address offset: 8 bits | |
1164 | + responder bus port size: 8 bits | |
1165 | + responder port least lane: D23-D16: */ | |
1166 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
1167 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
1168 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0), | |
1169 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1170 | + | |
1171 | + /* initiator maximum cycle size: 16 bits | |
1172 | + initiator address offset: 8 bits | |
1173 | + responder bus port size: 8 bits | |
1174 | + responder port least lane: D31-D24: */ | |
1175 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
1176 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
1177 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
1178 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1179 | + | |
1180 | + /* initiator maximum cycle size: 16 bits | |
1181 | + initiator address offset: 8 bits | |
1182 | + responder bus port size: 16 bits | |
1183 | + responder port least lane: D7-D0: */ | |
1184 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
1185 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1), | |
1186 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
1187 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1188 | + | |
1189 | + /* initiator maximum cycle size: 16 bits | |
1190 | + initiator address offset: 8 bits | |
1191 | + responder bus port size: 16 bits | |
1192 | + responder port least lane: D15-D8: */ | |
1193 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
1194 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1), | |
1195 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0), | |
1196 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1197 | + | |
1198 | + /* initiator maximum cycle size: 16 bits | |
1199 | + initiator address offset: 8 bits | |
1200 | + responder bus port size: 16 bits | |
1201 | + responder port least lane: D23-D16: */ | |
1202 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
1203 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
1204 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0), | |
1205 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1206 | + | |
1207 | + /* initiator maximum cycle size: 16 bits | |
1208 | + initiator address offset: 8 bits | |
1209 | + responder bus port size: 16 bits | |
1210 | + responder port least lane: D31-D24 | |
1211 | + (responder port not correctly positioned for this initiator): */ | |
1212 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
1213 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
1214 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
1215 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1216 | + | |
1217 | + /* initiator maximum cycle size: 16 bits | |
1218 | + initiator address offset: 8 bits | |
1219 | + responder bus port size: 32 bits | |
1220 | + responder port least lane: D7-D0: */ | |
1221 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
1222 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1), | |
1223 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0), | |
1224 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1225 | + | |
1226 | + /* initiator maximum cycle size: 16 bits | |
1227 | + initiator address offset: 8 bits | |
1228 | + responder bus port size: 32 bits | |
1229 | + responder port least lane: D15-D8 | |
1230 | + (responder port not correctly positioned for this initiator): */ | |
1231 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
1232 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1), | |
1233 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0), | |
1234 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1235 | + | |
1236 | + /* initiator maximum cycle size: 16 bits | |
1237 | + initiator address offset: 8 bits | |
1238 | + responder bus port size: 32 bits | |
1239 | + responder port least lane: D23-D16 | |
1240 | + (responder port not correctly positioned for this initiator): */ | |
1241 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
1242 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
1243 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0), | |
1244 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1245 | + | |
1246 | + /* initiator maximum cycle size: 16 bits | |
1247 | + initiator address offset: 8 bits | |
1248 | + responder bus port size: 32 bits | |
1249 | + responder port least lane: D31-D24 | |
1250 | + (responder port not correctly positioned for this initiator): */ | |
1251 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
1252 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
1253 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
1254 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1255 | + | |
1256 | + /* initiator maximum cycle size: 16 bits | |
1257 | + initiator address offset: 16 bits | |
1258 | + responder bus port size: 8 bits | |
1259 | + responder port least lane: D7-D0: */ | |
1260 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(1), | |
1261 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
1262 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
1263 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1264 | + | |
1265 | + /* initiator maximum cycle size: 16 bits | |
1266 | + initiator address offset: 16 bits | |
1267 | + responder bus port size: 8 bits | |
1268 | + responder port least lane: D15-D8: */ | |
1269 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
1270 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0), | |
1271 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
1272 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1273 | + | |
1274 | + /* initiator maximum cycle size: 16 bits | |
1275 | + initiator address offset: 16 bits | |
1276 | + responder bus port size: 8 bits | |
1277 | + responder port least lane: D23-D16: */ | |
1278 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
1279 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
1280 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
1281 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1282 | + | |
1283 | + /* initiator maximum cycle size: 16 bits | |
1284 | + initiator address offset: 16 bits | |
1285 | + responder bus port size: 8 bits | |
1286 | + responder port least lane: D31-D24: */ | |
1287 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
1288 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
1289 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
1290 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1291 | + | |
1292 | + /* initiator maximum cycle size: 16 bits | |
1293 | + initiator address offset: 16 bits | |
1294 | + responder bus port size: 16 bits | |
1295 | + responder port least lane: D7-D0: */ | |
1296 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(1), | |
1297 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0), | |
1298 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
1299 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1300 | + | |
1301 | + /* initiator maximum cycle size: 16 bits | |
1302 | + initiator address offset: 16 bits | |
1303 | + responder bus port size: 16 bits | |
1304 | + responder port least lane: D15-D8: */ | |
1305 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
1306 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0), | |
1307 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
1308 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1309 | + | |
1310 | + /* initiator maximum cycle size: 16 bits | |
1311 | + initiator address offset: 16 bits | |
1312 | + responder bus port size: 16 bits | |
1313 | + responder port least lane: D23-D16: */ | |
1314 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
1315 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
1316 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
1317 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1318 | + | |
1319 | + /* initiator maximum cycle size: 16 bits | |
1320 | + initiator address offset: 16 bits | |
1321 | + responder bus port size: 16 bits | |
1322 | + responder port least lane: D31-D24 | |
1323 | + (responder port not correctly positioned for this initiator): */ | |
1324 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
1325 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
1326 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
1327 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1328 | + | |
1329 | + /* initiator maximum cycle size: 16 bits | |
1330 | + initiator address offset: 16 bits | |
1331 | + responder bus port size: 32 bits | |
1332 | + responder port least lane: D7-D0: */ | |
1333 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(1), | |
1334 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0), | |
1335 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
1336 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1337 | + | |
1338 | + /* initiator maximum cycle size: 16 bits | |
1339 | + initiator address offset: 16 bits | |
1340 | + responder bus port size: 32 bits | |
1341 | + responder port least lane: D15-D8 | |
1342 | + (responder port not correctly positioned for this initiator): */ | |
1343 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
1344 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0), | |
1345 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
1346 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1347 | + | |
1348 | + /* initiator maximum cycle size: 16 bits | |
1349 | + initiator address offset: 16 bits | |
1350 | + responder bus port size: 32 bits | |
1351 | + responder port least lane: D23-D16 | |
1352 | + (responder port not correctly positioned for this initiator): */ | |
1353 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
1354 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
1355 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
1356 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1357 | + | |
1358 | + /* initiator maximum cycle size: 16 bits | |
1359 | + initiator address offset: 16 bits | |
1360 | + responder bus port size: 32 bits | |
1361 | + responder port least lane: D31-D24 | |
1362 | + (responder port not correctly positioned for this initiator): */ | |
1363 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
1364 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
1365 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
1366 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1367 | + | |
1368 | + /* initiator maximum cycle size: 16 bits | |
1369 | + initiator address offset: 24 bits | |
1370 | + (a 32-bit initiator cannot request 16 bits at an 24-bit offset - this is an array placeholder) | |
1371 | + responder bus port size: 8 bits | |
1372 | + responder port least lane: D7-D0: */ | |
1373 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
1374 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
1375 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
1376 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
1377 | + | |
1378 | + /* initiator maximum cycle size: 16 bits | |
1379 | + initiator address offset: 24 bits | |
1380 | + (a 32-bit initiator cannot request 16 bits at an 24-bit offset - this is an array placeholder) | |
1381 | + responder bus port size: 8 bits | |
1382 | + responder port least lane: D15-D8: */ | |
1383 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
1384 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
1385 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
1386 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
1387 | + | |
1388 | + /* initiator maximum cycle size: 16 bits | |
1389 | + initiator address offset: 24 bits | |
1390 | + (a 32-bit initiator cannot request 16 bits at an 24-bit offset - this is an array placeholder) | |
1391 | + responder bus port size: 8 bits | |
1392 | + responder port least lane: D23-D16: */ | |
1393 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
1394 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
1395 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
1396 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
1397 | + | |
1398 | + /* initiator maximum cycle size: 16 bits | |
1399 | + initiator address offset: 24 bits | |
1400 | + (a 32-bit initiator cannot request 16 bits at an 24-bit offset - this is an array placeholder) | |
1401 | + responder bus port size: 8 bits | |
1402 | + responder port least lane: D31-D24: */ | |
1403 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
1404 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
1405 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
1406 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
1407 | + | |
1408 | + /* initiator maximum cycle size: 16 bits | |
1409 | + initiator address offset: 24 bits | |
1410 | + (a 32-bit initiator cannot request 16 bits at an 24-bit offset - this is an array placeholder) | |
1411 | + responder bus port size: 16 bits | |
1412 | + responder port least lane: D7-D0: */ | |
1413 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
1414 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
1415 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
1416 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
1417 | + | |
1418 | + /* initiator maximum cycle size: 16 bits | |
1419 | + initiator address offset: 24 bits | |
1420 | + (a 32-bit initiator cannot request 16 bits at an 24-bit offset - this is an array placeholder) | |
1421 | + responder bus port size: 16 bits | |
1422 | + responder port least lane: D15-D8: */ | |
1423 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
1424 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
1425 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
1426 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
1427 | + | |
1428 | + /* initiator maximum cycle size: 16 bits | |
1429 | + initiator address offset: 24 bits | |
1430 | + (a 32-bit initiator cannot request 16 bits at an 24-bit offset - this is an array placeholder) | |
1431 | + responder bus port size: 16 bits | |
1432 | + responder port least lane: D23-D16: */ | |
1433 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
1434 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
1435 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
1436 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
1437 | + | |
1438 | + /* initiator maximum cycle size: 16 bits | |
1439 | + initiator address offset: 24 bits | |
1440 | + (a 32-bit initiator cannot request 16 bits at an 24-bit offset - this is an array placeholder) | |
1441 | + responder bus port size: 16 bits | |
1442 | + responder port least lane: D31-D24 | |
1443 | + (responder port not correctly positioned for this initiator): */ | |
1444 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
1445 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
1446 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
1447 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
1448 | + | |
1449 | + /* initiator maximum cycle size: 16 bits | |
1450 | + initiator address offset: 24 bits | |
1451 | + (a 32-bit initiator cannot request 16 bits at an 24-bit offset - this is an array placeholder) | |
1452 | + responder bus port size: 32 bits | |
1453 | + responder port least lane: D7-D0: */ | |
1454 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
1455 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
1456 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
1457 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
1458 | + | |
1459 | + /* initiator maximum cycle size: 16 bits | |
1460 | + initiator address offset: 24 bits | |
1461 | + (a 32-bit initiator cannot request 16 bits at an 24-bit offset - this is an array placeholder) | |
1462 | + responder bus port size: 32 bits | |
1463 | + responder port least lane: D15-D8 | |
1464 | + (responder port not correctly positioned for this initiator): */ | |
1465 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
1466 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
1467 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
1468 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
1469 | + | |
1470 | + /* initiator maximum cycle size: 16 bits | |
1471 | + initiator address offset: 24 bits | |
1472 | + (a 32-bit initiator cannot request 16 bits at an 24-bit offset - this is an array placeholder) | |
1473 | + responder bus port size: 32 bits | |
1474 | + responder port least lane: D23-D16 | |
1475 | + (responder port not correctly positioned for this initiator): */ | |
1476 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
1477 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
1478 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
1479 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
1480 | + | |
1481 | + /* initiator maximum cycle size: 16 bits | |
1482 | + initiator address offset: 24 bits | |
1483 | + (a 32-bit initiator cannot request 16 bits at an 24-bit offset - this is an array placeholder) | |
1484 | + responder bus port size: 32 bits | |
1485 | + responder port least lane: D31-D24 | |
1486 | + (responder port not correctly positioned for this initiator): */ | |
1487 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
1488 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
1489 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
1490 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
1491 | + | |
1492 | + /* initiator maximum cycle size: 24 bits | |
1493 | + initiator address offset: 0 bits | |
1494 | + responder bus port size: 8 bits | |
1495 | + responder port least lane: D7-D0: */ | |
1496 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
1497 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
1498 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
1499 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
1500 | + | |
1501 | + /* initiator maximum cycle size: 24 bits | |
1502 | + initiator address offset: 0 bits | |
1503 | + responder bus port size: 8 bits | |
1504 | + responder port least lane: D15-D8: */ | |
1505 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
1506 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(2), | |
1507 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
1508 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
1509 | + | |
1510 | + /* initiator maximum cycle size: 24 bits | |
1511 | + initiator address offset: 0 bits | |
1512 | + responder bus port size: 8 bits | |
1513 | + responder port least lane: D23-D16: */ | |
1514 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
1515 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
1516 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1), | |
1517 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
1518 | + | |
1519 | + /* initiator maximum cycle size: 24 bits | |
1520 | + initiator address offset: 0 bits | |
1521 | + responder bus port size: 8 bits | |
1522 | + responder port least lane: D31-D24: */ | |
1523 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
1524 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
1525 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
1526 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0), | |
1527 | + | |
1528 | + /* initiator maximum cycle size: 24 bits | |
1529 | + initiator address offset: 0 bits | |
1530 | + responder bus port size: 16 bits | |
1531 | + responder port least lane: D7-D0: */ | |
1532 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
1533 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(2), | |
1534 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
1535 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
1536 | + | |
1537 | + /* initiator maximum cycle size: 24 bits | |
1538 | + initiator address offset: 0 bits | |
1539 | + responder bus port size: 16 bits | |
1540 | + responder port least lane: D15-D8: */ | |
1541 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
1542 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(2), | |
1543 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1), | |
1544 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
1545 | + | |
1546 | + /* initiator maximum cycle size: 24 bits | |
1547 | + initiator address offset: 0 bits | |
1548 | + responder bus port size: 16 bits | |
1549 | + responder port least lane: D23-D16: */ | |
1550 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
1551 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
1552 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1), | |
1553 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0), | |
1554 | + | |
1555 | + /* initiator maximum cycle size: 24 bits | |
1556 | + initiator address offset: 0 bits | |
1557 | + responder bus port size: 16 bits | |
1558 | + responder port least lane: D31-D24 | |
1559 | + (responder port not correctly positioned for this initiator): */ | |
1560 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
1561 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
1562 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
1563 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0), | |
1564 | + | |
1565 | + /* initiator maximum cycle size: 24 bits | |
1566 | + initiator address offset: 0 bits | |
1567 | + responder bus port size: 32 bits | |
1568 | + responder port least lane: D7-D0: */ | |
1569 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
1570 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(2), | |
1571 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1), | |
1572 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0), | |
1573 | + | |
1574 | + /* initiator maximum cycle size: 24 bits | |
1575 | + initiator address offset: 0 bits | |
1576 | + responder bus port size: 32 bits | |
1577 | + responder port least lane: D15-D8 | |
1578 | + (responder port not correctly positioned for this initiator): */ | |
1579 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
1580 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(2), | |
1581 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1), | |
1582 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0), | |
1583 | + | |
1584 | + /* initiator maximum cycle size: 24 bits | |
1585 | + initiator address offset: 0 bits | |
1586 | + responder bus port size: 32 bits | |
1587 | + responder port least lane: D23-D16 | |
1588 | + (responder port not correctly positioned for this initiator): */ | |
1589 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
1590 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
1591 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1), | |
1592 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0), | |
1593 | + | |
1594 | + /* initiator maximum cycle size: 24 bits | |
1595 | + initiator address offset: 0 bits | |
1596 | + responder bus port size: 32 bits | |
1597 | + responder port least lane: D31-D24 | |
1598 | + (responder port not correctly positioned for this initiator): */ | |
1599 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
1600 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
1601 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
1602 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0), | |
1603 | + | |
1604 | + /* initiator maximum cycle size: 24 bits | |
1605 | + initiator address offset: 8 bits | |
1606 | + responder bus port size: 8 bits | |
1607 | + responder port least lane: D7-D0: */ | |
1608 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(2), | |
1609 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
1610 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
1611 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1612 | + | |
1613 | + /* initiator maximum cycle size: 24 bits | |
1614 | + initiator address offset: 8 bits | |
1615 | + responder bus port size: 8 bits | |
1616 | + responder port least lane: D15-D8: */ | |
1617 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
1618 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1), | |
1619 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
1620 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1621 | + | |
1622 | + /* initiator maximum cycle size: 24 bits | |
1623 | + initiator address offset: 8 bits | |
1624 | + responder bus port size: 8 bits | |
1625 | + responder port least lane: D23-D16: */ | |
1626 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
1627 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
1628 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0), | |
1629 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1630 | + | |
1631 | + /* initiator maximum cycle size: 24 bits | |
1632 | + initiator address offset: 8 bits | |
1633 | + responder bus port size: 8 bits | |
1634 | + responder port least lane: D31-D24: */ | |
1635 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
1636 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
1637 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
1638 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1639 | + | |
1640 | + /* initiator maximum cycle size: 24 bits | |
1641 | + initiator address offset: 8 bits | |
1642 | + responder bus port size: 16 bits | |
1643 | + responder port least lane: D7-D0: */ | |
1644 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(2), | |
1645 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1), | |
1646 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
1647 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1648 | + | |
1649 | + /* initiator maximum cycle size: 24 bits | |
1650 | + initiator address offset: 8 bits | |
1651 | + responder bus port size: 16 bits | |
1652 | + responder port least lane: D15-D8: */ | |
1653 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
1654 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1), | |
1655 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0), | |
1656 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1657 | + | |
1658 | + /* initiator maximum cycle size: 24 bits | |
1659 | + initiator address offset: 8 bits | |
1660 | + responder bus port size: 16 bits | |
1661 | + responder port least lane: D23-D16: */ | |
1662 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
1663 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
1664 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0), | |
1665 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1666 | + | |
1667 | + /* initiator maximum cycle size: 24 bits | |
1668 | + initiator address offset: 8 bits | |
1669 | + responder bus port size: 16 bits | |
1670 | + responder port least lane: D31-D24 | |
1671 | + (responder port not correctly positioned for this initiator): */ | |
1672 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
1673 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
1674 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
1675 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1676 | + | |
1677 | + /* initiator maximum cycle size: 24 bits | |
1678 | + initiator address offset: 8 bits | |
1679 | + responder bus port size: 32 bits | |
1680 | + responder port least lane: D7-D0: */ | |
1681 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(2), | |
1682 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1), | |
1683 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0), | |
1684 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1685 | + | |
1686 | + /* initiator maximum cycle size: 24 bits | |
1687 | + initiator address offset: 8 bits | |
1688 | + responder bus port size: 32 bits | |
1689 | + responder port least lane: D15-D8 | |
1690 | + (responder port not correctly positioned for this initiator): */ | |
1691 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
1692 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1), | |
1693 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0), | |
1694 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1695 | + | |
1696 | + /* initiator maximum cycle size: 24 bits | |
1697 | + initiator address offset: 8 bits | |
1698 | + responder bus port size: 32 bits | |
1699 | + responder port least lane: D23-D16 | |
1700 | + (responder port not correctly positioned for this initiator): */ | |
1701 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
1702 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
1703 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0), | |
1704 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1705 | + | |
1706 | + /* initiator maximum cycle size: 24 bits | |
1707 | + initiator address offset: 8 bits | |
1708 | + responder bus port size: 32 bits | |
1709 | + responder port least lane: D31-D24 | |
1710 | + (responder port not correctly positioned for this initiator): */ | |
1711 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
1712 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
1713 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
1714 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
1715 | + | |
1716 | + /* initiator maximum cycle size: 24 bits | |
1717 | + initiator address offset: 16 bits | |
1718 | + (a 32-bit initiator cannot request 24 bits at an 16-bit offset - this is an array placeholder) | |
1719 | + responder bus port size: 8 bits | |
1720 | + responder port least lane: D7-D0: */ | |
1721 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
1722 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
1723 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
1724 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
1725 | + | |
1726 | + /* initiator maximum cycle size: 24 bits | |
1727 | + initiator address offset: 16 bits | |
1728 | + (a 32-bit initiator cannot request 24 bits at an 16-bit offset - this is an array placeholder) | |
1729 | + responder bus port size: 8 bits | |
1730 | + responder port least lane: D15-D8: */ | |
1731 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
1732 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
1733 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
1734 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
1735 | + | |
1736 | + /* initiator maximum cycle size: 24 bits | |
1737 | + initiator address offset: 16 bits | |
1738 | + (a 32-bit initiator cannot request 24 bits at an 16-bit offset - this is an array placeholder) | |
1739 | + responder bus port size: 8 bits | |
1740 | + responder port least lane: D23-D16: */ | |
1741 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
1742 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
1743 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
1744 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
1745 | + | |
1746 | + /* initiator maximum cycle size: 24 bits | |
1747 | + initiator address offset: 16 bits | |
1748 | + (a 32-bit initiator cannot request 24 bits at an 16-bit offset - this is an array placeholder) | |
1749 | + responder bus port size: 8 bits | |
1750 | + responder port least lane: D31-D24: */ | |
1751 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
1752 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
1753 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
1754 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
1755 | + | |
1756 | + /* initiator maximum cycle size: 24 bits | |
1757 | + initiator address offset: 16 bits | |
1758 | + (a 32-bit initiator cannot request 24 bits at an 16-bit offset - this is an array placeholder) | |
1759 | + responder bus port size: 16 bits | |
1760 | + responder port least lane: D7-D0: */ | |
1761 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
1762 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
1763 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
1764 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
1765 | + | |
1766 | + /* initiator maximum cycle size: 24 bits | |
1767 | + initiator address offset: 16 bits | |
1768 | + (a 32-bit initiator cannot request 24 bits at an 16-bit offset - this is an array placeholder) | |
1769 | + responder bus port size: 16 bits | |
1770 | + responder port least lane: D15-D8: */ | |
1771 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
1772 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
1773 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
1774 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
1775 | + | |
1776 | + /* initiator maximum cycle size: 24 bits | |
1777 | + initiator address offset: 16 bits | |
1778 | + (a 32-bit initiator cannot request 24 bits at an 16-bit offset - this is an array placeholder) | |
1779 | + responder bus port size: 16 bits | |
1780 | + responder port least lane: D23-D16: */ | |
1781 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
1782 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
1783 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
1784 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
1785 | + | |
1786 | + /* initiator maximum cycle size: 24 bits | |
1787 | + initiator address offset: 16 bits | |
1788 | + (a 32-bit initiator cannot request 24 bits at an 16-bit offset - this is an array placeholder) | |
1789 | + responder bus port size: 16 bits | |
1790 | + responder port least lane: D31-D24 | |
1791 | + (responder port not correctly positioned for this initiator): */ | |
1792 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
1793 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
1794 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
1795 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
1796 | + | |
1797 | + /* initiator maximum cycle size: 24 bits | |
1798 | + initiator address offset: 16 bits | |
1799 | + (a 32-bit initiator cannot request 24 bits at an 16-bit offset - this is an array placeholder) | |
1800 | + responder bus port size: 32 bits | |
1801 | + responder port least lane: D7-D0: */ | |
1802 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
1803 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
1804 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
1805 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
1806 | + | |
1807 | + /* initiator maximum cycle size: 24 bits | |
1808 | + initiator address offset: 16 bits | |
1809 | + (a 32-bit initiator cannot request 24 bits at an 16-bit offset - this is an array placeholder) | |
1810 | + responder bus port size: 32 bits | |
1811 | + responder port least lane: D15-D8 | |
1812 | + (responder port not correctly positioned for this initiator): */ | |
1813 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
1814 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
1815 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
1816 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
1817 | + | |
1818 | + /* initiator maximum cycle size: 24 bits | |
1819 | + initiator address offset: 16 bits | |
1820 | + (a 32-bit initiator cannot request 24 bits at an 16-bit offset - this is an array placeholder) | |
1821 | + responder bus port size: 32 bits | |
1822 | + responder port least lane: D23-D16 | |
1823 | + (responder port not correctly positioned for this initiator): */ | |
1824 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
1825 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
1826 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
1827 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
1828 | + | |
1829 | + /* initiator maximum cycle size: 24 bits | |
1830 | + initiator address offset: 16 bits | |
1831 | + (a 32-bit initiator cannot request 24 bits at an 16-bit offset - this is an array placeholder) | |
1832 | + responder bus port size: 32 bits | |
1833 | + responder port least lane: D31-D24 | |
1834 | + (responder port not correctly positioned for this initiator): */ | |
1835 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
1836 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
1837 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
1838 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
1839 | + | |
1840 | + /* initiator maximum cycle size: 24 bits | |
1841 | + initiator address offset: 24 bits | |
1842 | + (a 32-bit initiator cannot request 24 bits at an 24-bit offset - this is an array placeholder) | |
1843 | + responder bus port size: 8 bits | |
1844 | + responder port least lane: D7-D0: */ | |
1845 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
1846 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
1847 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
1848 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
1849 | + | |
1850 | + /* initiator maximum cycle size: 24 bits | |
1851 | + initiator address offset: 24 bits | |
1852 | + (a 32-bit initiator cannot request 24 bits at an 24-bit offset - this is an array placeholder) | |
1853 | + responder bus port size: 8 bits | |
1854 | + responder port least lane: D15-D8: */ | |
1855 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
1856 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
1857 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
1858 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
1859 | + | |
1860 | + /* initiator maximum cycle size: 24 bits | |
1861 | + initiator address offset: 24 bits | |
1862 | + (a 32-bit initiator cannot request 24 bits at an 24-bit offset - this is an array placeholder) | |
1863 | + responder bus port size: 8 bits | |
1864 | + responder port least lane: D23-D16: */ | |
1865 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
1866 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
1867 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
1868 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
1869 | + | |
1870 | + /* initiator maximum cycle size: 24 bits | |
1871 | + initiator address offset: 24 bits | |
1872 | + (a 32-bit initiator cannot request 24 bits at an 24-bit offset - this is an array placeholder) | |
1873 | + responder bus port size: 8 bits | |
1874 | + responder port least lane: D31-D24: */ | |
1875 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
1876 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
1877 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
1878 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
1879 | + | |
1880 | + /* initiator maximum cycle size: 24 bits | |
1881 | + initiator address offset: 24 bits | |
1882 | + (a 32-bit initiator cannot request 24 bits at an 24-bit offset - this is an array placeholder) | |
1883 | + responder bus port size: 16 bits | |
1884 | + responder port least lane: D7-D0: */ | |
1885 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
1886 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
1887 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
1888 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
1889 | + | |
1890 | + /* initiator maximum cycle size: 24 bits | |
1891 | + initiator address offset: 24 bits | |
1892 | + (a 32-bit initiator cannot request 24 bits at an 24-bit offset - this is an array placeholder) | |
1893 | + responder bus port size: 16 bits | |
1894 | + responder port least lane: D15-D8: */ | |
1895 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
1896 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
1897 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
1898 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
1899 | + | |
1900 | + /* initiator maximum cycle size: 24 bits | |
1901 | + initiator address offset: 24 bits | |
1902 | + (a 32-bit initiator cannot request 24 bits at an 24-bit offset - this is an array placeholder) | |
1903 | + responder bus port size: 16 bits | |
1904 | + responder port least lane: D23-D16: */ | |
1905 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
1906 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
1907 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
1908 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
1909 | + | |
1910 | + /* initiator maximum cycle size: 24 bits | |
1911 | + initiator address offset: 24 bits | |
1912 | + (a 32-bit initiator cannot request 24 bits at an 24-bit offset - this is an array placeholder) | |
1913 | + responder bus port size: 16 bits | |
1914 | + responder port least lane: D31-D24 | |
1915 | + (responder port not correctly positioned for this initiator): */ | |
1916 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
1917 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
1918 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
1919 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
1920 | + | |
1921 | + /* initiator maximum cycle size: 24 bits | |
1922 | + initiator address offset: 24 bits | |
1923 | + (a 32-bit initiator cannot request 24 bits at an 24-bit offset - this is an array placeholder) | |
1924 | + responder bus port size: 32 bits | |
1925 | + responder port least lane: D7-D0: */ | |
1926 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
1927 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
1928 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
1929 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
1930 | + | |
1931 | + /* initiator maximum cycle size: 24 bits | |
1932 | + initiator address offset: 24 bits | |
1933 | + (a 32-bit initiator cannot request 24 bits at an 24-bit offset - this is an array placeholder) | |
1934 | + responder bus port size: 32 bits | |
1935 | + responder port least lane: D15-D8 | |
1936 | + (responder port not correctly positioned for this initiator): */ | |
1937 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
1938 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
1939 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
1940 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
1941 | + | |
1942 | + /* initiator maximum cycle size: 24 bits | |
1943 | + initiator address offset: 24 bits | |
1944 | + (a 32-bit initiator cannot request 24 bits at an 24-bit offset - this is an array placeholder) | |
1945 | + responder bus port size: 32 bits | |
1946 | + responder port least lane: D23-D16 | |
1947 | + (responder port not correctly positioned for this initiator): */ | |
1948 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
1949 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
1950 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
1951 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
1952 | + | |
1953 | + /* initiator maximum cycle size: 24 bits | |
1954 | + initiator address offset: 24 bits | |
1955 | + (a 32-bit initiator cannot request 24 bits at an 24-bit offset - this is an array placeholder) | |
1956 | + responder bus port size: 32 bits | |
1957 | + responder port least lane: D31-D24 | |
1958 | + (responder port not correctly positioned for this initiator): */ | |
1959 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
1960 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
1961 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
1962 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
1963 | + | |
1964 | + /* initiator maximum cycle size: 32 bits | |
1965 | + initiator address offset: 0 bits | |
1966 | + responder bus port size: 8 bits | |
1967 | + responder port least lane: D7-D0: */ | |
1968 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(3), | |
1969 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
1970 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
1971 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
1972 | + | |
1973 | + /* initiator maximum cycle size: 32 bits | |
1974 | + initiator address offset: 0 bits | |
1975 | + responder bus port size: 8 bits | |
1976 | + responder port least lane: D15-D8: */ | |
1977 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(3) | TME_BUS_LANE_WARN, | |
1978 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(2), | |
1979 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
1980 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
1981 | + | |
1982 | + /* initiator maximum cycle size: 32 bits | |
1983 | + initiator address offset: 0 bits | |
1984 | + responder bus port size: 8 bits | |
1985 | + responder port least lane: D23-D16: */ | |
1986 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(3) | TME_BUS_LANE_WARN, | |
1987 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
1988 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1), | |
1989 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
1990 | + | |
1991 | + /* initiator maximum cycle size: 32 bits | |
1992 | + initiator address offset: 0 bits | |
1993 | + responder bus port size: 8 bits | |
1994 | + responder port least lane: D31-D24: */ | |
1995 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(3) | TME_BUS_LANE_WARN, | |
1996 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
1997 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
1998 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0), | |
1999 | + | |
2000 | + /* initiator maximum cycle size: 32 bits | |
2001 | + initiator address offset: 0 bits | |
2002 | + responder bus port size: 16 bits | |
2003 | + responder port least lane: D7-D0: */ | |
2004 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(3), | |
2005 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(2), | |
2006 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
2007 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
2008 | + | |
2009 | + /* initiator maximum cycle size: 32 bits | |
2010 | + initiator address offset: 0 bits | |
2011 | + responder bus port size: 16 bits | |
2012 | + responder port least lane: D15-D8: */ | |
2013 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(3) | TME_BUS_LANE_WARN, | |
2014 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(2), | |
2015 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1), | |
2016 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
2017 | + | |
2018 | + /* initiator maximum cycle size: 32 bits | |
2019 | + initiator address offset: 0 bits | |
2020 | + responder bus port size: 16 bits | |
2021 | + responder port least lane: D23-D16: */ | |
2022 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(3) | TME_BUS_LANE_WARN, | |
2023 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
2024 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1), | |
2025 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0), | |
2026 | + | |
2027 | + /* initiator maximum cycle size: 32 bits | |
2028 | + initiator address offset: 0 bits | |
2029 | + responder bus port size: 16 bits | |
2030 | + responder port least lane: D31-D24 | |
2031 | + (responder port not correctly positioned for this initiator): */ | |
2032 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(3) | TME_BUS_LANE_WARN, | |
2033 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
2034 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
2035 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0), | |
2036 | + | |
2037 | + /* initiator maximum cycle size: 32 bits | |
2038 | + initiator address offset: 0 bits | |
2039 | + responder bus port size: 32 bits | |
2040 | + responder port least lane: D7-D0: */ | |
2041 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(3), | |
2042 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(2), | |
2043 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1), | |
2044 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0), | |
2045 | + | |
2046 | + /* initiator maximum cycle size: 32 bits | |
2047 | + initiator address offset: 0 bits | |
2048 | + responder bus port size: 32 bits | |
2049 | + responder port least lane: D15-D8 | |
2050 | + (responder port not correctly positioned for this initiator): */ | |
2051 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(3) | TME_BUS_LANE_WARN, | |
2052 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(2), | |
2053 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1), | |
2054 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0), | |
2055 | + | |
2056 | + /* initiator maximum cycle size: 32 bits | |
2057 | + initiator address offset: 0 bits | |
2058 | + responder bus port size: 32 bits | |
2059 | + responder port least lane: D23-D16 | |
2060 | + (responder port not correctly positioned for this initiator): */ | |
2061 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(3) | TME_BUS_LANE_WARN, | |
2062 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
2063 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1), | |
2064 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0), | |
2065 | + | |
2066 | + /* initiator maximum cycle size: 32 bits | |
2067 | + initiator address offset: 0 bits | |
2068 | + responder bus port size: 32 bits | |
2069 | + responder port least lane: D31-D24 | |
2070 | + (responder port not correctly positioned for this initiator): */ | |
2071 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(3) | TME_BUS_LANE_WARN, | |
2072 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
2073 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
2074 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0), | |
2075 | + | |
2076 | + /* initiator maximum cycle size: 32 bits | |
2077 | + initiator address offset: 8 bits | |
2078 | + (a 32-bit initiator cannot request 32 bits at an 8-bit offset - this is an array placeholder) | |
2079 | + responder bus port size: 8 bits | |
2080 | + responder port least lane: D7-D0: */ | |
2081 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
2082 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
2083 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
2084 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
2085 | + | |
2086 | + /* initiator maximum cycle size: 32 bits | |
2087 | + initiator address offset: 8 bits | |
2088 | + (a 32-bit initiator cannot request 32 bits at an 8-bit offset - this is an array placeholder) | |
2089 | + responder bus port size: 8 bits | |
2090 | + responder port least lane: D15-D8: */ | |
2091 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
2092 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
2093 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
2094 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
2095 | + | |
2096 | + /* initiator maximum cycle size: 32 bits | |
2097 | + initiator address offset: 8 bits | |
2098 | + (a 32-bit initiator cannot request 32 bits at an 8-bit offset - this is an array placeholder) | |
2099 | + responder bus port size: 8 bits | |
2100 | + responder port least lane: D23-D16: */ | |
2101 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
2102 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
2103 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
2104 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
2105 | + | |
2106 | + /* initiator maximum cycle size: 32 bits | |
2107 | + initiator address offset: 8 bits | |
2108 | + (a 32-bit initiator cannot request 32 bits at an 8-bit offset - this is an array placeholder) | |
2109 | + responder bus port size: 8 bits | |
2110 | + responder port least lane: D31-D24: */ | |
2111 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
2112 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
2113 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
2114 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
2115 | + | |
2116 | + /* initiator maximum cycle size: 32 bits | |
2117 | + initiator address offset: 8 bits | |
2118 | + (a 32-bit initiator cannot request 32 bits at an 8-bit offset - this is an array placeholder) | |
2119 | + responder bus port size: 16 bits | |
2120 | + responder port least lane: D7-D0: */ | |
2121 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
2122 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
2123 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
2124 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
2125 | + | |
2126 | + /* initiator maximum cycle size: 32 bits | |
2127 | + initiator address offset: 8 bits | |
2128 | + (a 32-bit initiator cannot request 32 bits at an 8-bit offset - this is an array placeholder) | |
2129 | + responder bus port size: 16 bits | |
2130 | + responder port least lane: D15-D8: */ | |
2131 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
2132 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
2133 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
2134 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
2135 | + | |
2136 | + /* initiator maximum cycle size: 32 bits | |
2137 | + initiator address offset: 8 bits | |
2138 | + (a 32-bit initiator cannot request 32 bits at an 8-bit offset - this is an array placeholder) | |
2139 | + responder bus port size: 16 bits | |
2140 | + responder port least lane: D23-D16: */ | |
2141 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
2142 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
2143 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
2144 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
2145 | + | |
2146 | + /* initiator maximum cycle size: 32 bits | |
2147 | + initiator address offset: 8 bits | |
2148 | + (a 32-bit initiator cannot request 32 bits at an 8-bit offset - this is an array placeholder) | |
2149 | + responder bus port size: 16 bits | |
2150 | + responder port least lane: D31-D24 | |
2151 | + (responder port not correctly positioned for this initiator): */ | |
2152 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
2153 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
2154 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
2155 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
2156 | + | |
2157 | + /* initiator maximum cycle size: 32 bits | |
2158 | + initiator address offset: 8 bits | |
2159 | + (a 32-bit initiator cannot request 32 bits at an 8-bit offset - this is an array placeholder) | |
2160 | + responder bus port size: 32 bits | |
2161 | + responder port least lane: D7-D0: */ | |
2162 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
2163 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
2164 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
2165 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
2166 | + | |
2167 | + /* initiator maximum cycle size: 32 bits | |
2168 | + initiator address offset: 8 bits | |
2169 | + (a 32-bit initiator cannot request 32 bits at an 8-bit offset - this is an array placeholder) | |
2170 | + responder bus port size: 32 bits | |
2171 | + responder port least lane: D15-D8 | |
2172 | + (responder port not correctly positioned for this initiator): */ | |
2173 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
2174 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
2175 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
2176 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
2177 | + | |
2178 | + /* initiator maximum cycle size: 32 bits | |
2179 | + initiator address offset: 8 bits | |
2180 | + (a 32-bit initiator cannot request 32 bits at an 8-bit offset - this is an array placeholder) | |
2181 | + responder bus port size: 32 bits | |
2182 | + responder port least lane: D23-D16 | |
2183 | + (responder port not correctly positioned for this initiator): */ | |
2184 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
2185 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
2186 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
2187 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
2188 | + | |
2189 | + /* initiator maximum cycle size: 32 bits | |
2190 | + initiator address offset: 8 bits | |
2191 | + (a 32-bit initiator cannot request 32 bits at an 8-bit offset - this is an array placeholder) | |
2192 | + responder bus port size: 32 bits | |
2193 | + responder port least lane: D31-D24 | |
2194 | + (responder port not correctly positioned for this initiator): */ | |
2195 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
2196 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
2197 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
2198 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
2199 | + | |
2200 | + /* initiator maximum cycle size: 32 bits | |
2201 | + initiator address offset: 16 bits | |
2202 | + (a 32-bit initiator cannot request 32 bits at an 16-bit offset - this is an array placeholder) | |
2203 | + responder bus port size: 8 bits | |
2204 | + responder port least lane: D7-D0: */ | |
2205 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
2206 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
2207 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
2208 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
2209 | + | |
2210 | + /* initiator maximum cycle size: 32 bits | |
2211 | + initiator address offset: 16 bits | |
2212 | + (a 32-bit initiator cannot request 32 bits at an 16-bit offset - this is an array placeholder) | |
2213 | + responder bus port size: 8 bits | |
2214 | + responder port least lane: D15-D8: */ | |
2215 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
2216 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
2217 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
2218 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
2219 | + | |
2220 | + /* initiator maximum cycle size: 32 bits | |
2221 | + initiator address offset: 16 bits | |
2222 | + (a 32-bit initiator cannot request 32 bits at an 16-bit offset - this is an array placeholder) | |
2223 | + responder bus port size: 8 bits | |
2224 | + responder port least lane: D23-D16: */ | |
2225 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
2226 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
2227 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
2228 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
2229 | + | |
2230 | + /* initiator maximum cycle size: 32 bits | |
2231 | + initiator address offset: 16 bits | |
2232 | + (a 32-bit initiator cannot request 32 bits at an 16-bit offset - this is an array placeholder) | |
2233 | + responder bus port size: 8 bits | |
2234 | + responder port least lane: D31-D24: */ | |
2235 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
2236 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
2237 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
2238 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
2239 | + | |
2240 | + /* initiator maximum cycle size: 32 bits | |
2241 | + initiator address offset: 16 bits | |
2242 | + (a 32-bit initiator cannot request 32 bits at an 16-bit offset - this is an array placeholder) | |
2243 | + responder bus port size: 16 bits | |
2244 | + responder port least lane: D7-D0: */ | |
2245 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
2246 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
2247 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
2248 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
2249 | + | |
2250 | + /* initiator maximum cycle size: 32 bits | |
2251 | + initiator address offset: 16 bits | |
2252 | + (a 32-bit initiator cannot request 32 bits at an 16-bit offset - this is an array placeholder) | |
2253 | + responder bus port size: 16 bits | |
2254 | + responder port least lane: D15-D8: */ | |
2255 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
2256 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
2257 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
2258 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
2259 | + | |
2260 | + /* initiator maximum cycle size: 32 bits | |
2261 | + initiator address offset: 16 bits | |
2262 | + (a 32-bit initiator cannot request 32 bits at an 16-bit offset - this is an array placeholder) | |
2263 | + responder bus port size: 16 bits | |
2264 | + responder port least lane: D23-D16: */ | |
2265 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
2266 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
2267 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
2268 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
2269 | + | |
2270 | + /* initiator maximum cycle size: 32 bits | |
2271 | + initiator address offset: 16 bits | |
2272 | + (a 32-bit initiator cannot request 32 bits at an 16-bit offset - this is an array placeholder) | |
2273 | + responder bus port size: 16 bits | |
2274 | + responder port least lane: D31-D24 | |
2275 | + (responder port not correctly positioned for this initiator): */ | |
2276 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
2277 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
2278 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
2279 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
2280 | + | |
2281 | + /* initiator maximum cycle size: 32 bits | |
2282 | + initiator address offset: 16 bits | |
2283 | + (a 32-bit initiator cannot request 32 bits at an 16-bit offset - this is an array placeholder) | |
2284 | + responder bus port size: 32 bits | |
2285 | + responder port least lane: D7-D0: */ | |
2286 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
2287 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
2288 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
2289 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
2290 | + | |
2291 | + /* initiator maximum cycle size: 32 bits | |
2292 | + initiator address offset: 16 bits | |
2293 | + (a 32-bit initiator cannot request 32 bits at an 16-bit offset - this is an array placeholder) | |
2294 | + responder bus port size: 32 bits | |
2295 | + responder port least lane: D15-D8 | |
2296 | + (responder port not correctly positioned for this initiator): */ | |
2297 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
2298 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
2299 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
2300 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
2301 | + | |
2302 | + /* initiator maximum cycle size: 32 bits | |
2303 | + initiator address offset: 16 bits | |
2304 | + (a 32-bit initiator cannot request 32 bits at an 16-bit offset - this is an array placeholder) | |
2305 | + responder bus port size: 32 bits | |
2306 | + responder port least lane: D23-D16 | |
2307 | + (responder port not correctly positioned for this initiator): */ | |
2308 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
2309 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
2310 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
2311 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
2312 | + | |
2313 | + /* initiator maximum cycle size: 32 bits | |
2314 | + initiator address offset: 16 bits | |
2315 | + (a 32-bit initiator cannot request 32 bits at an 16-bit offset - this is an array placeholder) | |
2316 | + responder bus port size: 32 bits | |
2317 | + responder port least lane: D31-D24 | |
2318 | + (responder port not correctly positioned for this initiator): */ | |
2319 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
2320 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
2321 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
2322 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
2323 | + | |
2324 | + /* initiator maximum cycle size: 32 bits | |
2325 | + initiator address offset: 24 bits | |
2326 | + (a 32-bit initiator cannot request 32 bits at an 24-bit offset - this is an array placeholder) | |
2327 | + responder bus port size: 8 bits | |
2328 | + responder port least lane: D7-D0: */ | |
2329 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
2330 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
2331 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
2332 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
2333 | + | |
2334 | + /* initiator maximum cycle size: 32 bits | |
2335 | + initiator address offset: 24 bits | |
2336 | + (a 32-bit initiator cannot request 32 bits at an 24-bit offset - this is an array placeholder) | |
2337 | + responder bus port size: 8 bits | |
2338 | + responder port least lane: D15-D8: */ | |
2339 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
2340 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
2341 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
2342 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
2343 | + | |
2344 | + /* initiator maximum cycle size: 32 bits | |
2345 | + initiator address offset: 24 bits | |
2346 | + (a 32-bit initiator cannot request 32 bits at an 24-bit offset - this is an array placeholder) | |
2347 | + responder bus port size: 8 bits | |
2348 | + responder port least lane: D23-D16: */ | |
2349 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
2350 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
2351 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
2352 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
2353 | + | |
2354 | + /* initiator maximum cycle size: 32 bits | |
2355 | + initiator address offset: 24 bits | |
2356 | + (a 32-bit initiator cannot request 32 bits at an 24-bit offset - this is an array placeholder) | |
2357 | + responder bus port size: 8 bits | |
2358 | + responder port least lane: D31-D24: */ | |
2359 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
2360 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
2361 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
2362 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
2363 | + | |
2364 | + /* initiator maximum cycle size: 32 bits | |
2365 | + initiator address offset: 24 bits | |
2366 | + (a 32-bit initiator cannot request 32 bits at an 24-bit offset - this is an array placeholder) | |
2367 | + responder bus port size: 16 bits | |
2368 | + responder port least lane: D7-D0: */ | |
2369 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
2370 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
2371 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
2372 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
2373 | + | |
2374 | + /* initiator maximum cycle size: 32 bits | |
2375 | + initiator address offset: 24 bits | |
2376 | + (a 32-bit initiator cannot request 32 bits at an 24-bit offset - this is an array placeholder) | |
2377 | + responder bus port size: 16 bits | |
2378 | + responder port least lane: D15-D8: */ | |
2379 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
2380 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
2381 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
2382 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
2383 | + | |
2384 | + /* initiator maximum cycle size: 32 bits | |
2385 | + initiator address offset: 24 bits | |
2386 | + (a 32-bit initiator cannot request 32 bits at an 24-bit offset - this is an array placeholder) | |
2387 | + responder bus port size: 16 bits | |
2388 | + responder port least lane: D23-D16: */ | |
2389 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
2390 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
2391 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
2392 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
2393 | + | |
2394 | + /* initiator maximum cycle size: 32 bits | |
2395 | + initiator address offset: 24 bits | |
2396 | + (a 32-bit initiator cannot request 32 bits at an 24-bit offset - this is an array placeholder) | |
2397 | + responder bus port size: 16 bits | |
2398 | + responder port least lane: D31-D24 | |
2399 | + (responder port not correctly positioned for this initiator): */ | |
2400 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
2401 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
2402 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
2403 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
2404 | + | |
2405 | + /* initiator maximum cycle size: 32 bits | |
2406 | + initiator address offset: 24 bits | |
2407 | + (a 32-bit initiator cannot request 32 bits at an 24-bit offset - this is an array placeholder) | |
2408 | + responder bus port size: 32 bits | |
2409 | + responder port least lane: D7-D0: */ | |
2410 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
2411 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
2412 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
2413 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
2414 | + | |
2415 | + /* initiator maximum cycle size: 32 bits | |
2416 | + initiator address offset: 24 bits | |
2417 | + (a 32-bit initiator cannot request 32 bits at an 24-bit offset - this is an array placeholder) | |
2418 | + responder bus port size: 32 bits | |
2419 | + responder port least lane: D15-D8 | |
2420 | + (responder port not correctly positioned for this initiator): */ | |
2421 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
2422 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
2423 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
2424 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
2425 | + | |
2426 | + /* initiator maximum cycle size: 32 bits | |
2427 | + initiator address offset: 24 bits | |
2428 | + (a 32-bit initiator cannot request 32 bits at an 24-bit offset - this is an array placeholder) | |
2429 | + responder bus port size: 32 bits | |
2430 | + responder port least lane: D23-D16 | |
2431 | + (responder port not correctly positioned for this initiator): */ | |
2432 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
2433 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
2434 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
2435 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
2436 | + | |
2437 | + /* initiator maximum cycle size: 32 bits | |
2438 | + initiator address offset: 24 bits | |
2439 | + (a 32-bit initiator cannot request 32 bits at an 24-bit offset - this is an array placeholder) | |
2440 | + responder bus port size: 32 bits | |
2441 | + responder port least lane: D31-D24 | |
2442 | + (responder port not correctly positioned for this initiator): */ | |
2443 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
2444 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
2445 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
2446 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
2447 | +}; | |
2448 | + | |
2449 | +/* the 32-bit little-endian bus master bus router: */ | |
2450 | +const tme_bus_lane_t tme_bus_device_router_32el[TME_BUS_ROUTER_INIT_SIZE(TME_BUS32_LOG2)] = { | |
2451 | + | |
2452 | + /* initiator maximum cycle size: 8 bits | |
2453 | + initiator address offset: 0 bits | |
2454 | + responder bus port size: 8 bits | |
2455 | + responder port least lane: D7-D0: */ | |
2456 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0), | |
2457 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
2458 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2459 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2460 | + | |
2461 | + /* initiator maximum cycle size: 8 bits | |
2462 | + initiator address offset: 0 bits | |
2463 | + responder bus port size: 8 bits | |
2464 | + responder port least lane: D15-D8: */ | |
2465 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
2466 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
2467 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2468 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2469 | + | |
2470 | + /* initiator maximum cycle size: 8 bits | |
2471 | + initiator address offset: 0 bits | |
2472 | + responder bus port size: 8 bits | |
2473 | + responder port least lane: D23-D16: */ | |
2474 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
2475 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
2476 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2477 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2478 | + | |
2479 | + /* initiator maximum cycle size: 8 bits | |
2480 | + initiator address offset: 0 bits | |
2481 | + responder bus port size: 8 bits | |
2482 | + responder port least lane: D31-D24: */ | |
2483 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
2484 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
2485 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2486 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2487 | + | |
2488 | + /* initiator maximum cycle size: 8 bits | |
2489 | + initiator address offset: 0 bits | |
2490 | + responder bus port size: 16 bits | |
2491 | + responder port least lane: D7-D0: */ | |
2492 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0), | |
2493 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
2494 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2495 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2496 | + | |
2497 | + /* initiator maximum cycle size: 8 bits | |
2498 | + initiator address offset: 0 bits | |
2499 | + responder bus port size: 16 bits | |
2500 | + responder port least lane: D15-D8: */ | |
2501 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
2502 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
2503 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2504 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2505 | + | |
2506 | + /* initiator maximum cycle size: 8 bits | |
2507 | + initiator address offset: 0 bits | |
2508 | + responder bus port size: 16 bits | |
2509 | + responder port least lane: D23-D16: */ | |
2510 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
2511 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
2512 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2513 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2514 | + | |
2515 | + /* initiator maximum cycle size: 8 bits | |
2516 | + initiator address offset: 0 bits | |
2517 | + responder bus port size: 16 bits | |
2518 | + responder port least lane: D31-D24 | |
2519 | + (responder port not correctly positioned for this initiator): */ | |
2520 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
2521 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
2522 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2523 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2524 | + | |
2525 | + /* initiator maximum cycle size: 8 bits | |
2526 | + initiator address offset: 0 bits | |
2527 | + responder bus port size: 32 bits | |
2528 | + responder port least lane: D7-D0: */ | |
2529 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0), | |
2530 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
2531 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2532 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2533 | + | |
2534 | + /* initiator maximum cycle size: 8 bits | |
2535 | + initiator address offset: 0 bits | |
2536 | + responder bus port size: 32 bits | |
2537 | + responder port least lane: D15-D8 | |
2538 | + (responder port not correctly positioned for this initiator): */ | |
2539 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
2540 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
2541 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2542 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2543 | + | |
2544 | + /* initiator maximum cycle size: 8 bits | |
2545 | + initiator address offset: 0 bits | |
2546 | + responder bus port size: 32 bits | |
2547 | + responder port least lane: D23-D16 | |
2548 | + (responder port not correctly positioned for this initiator): */ | |
2549 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
2550 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
2551 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2552 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2553 | + | |
2554 | + /* initiator maximum cycle size: 8 bits | |
2555 | + initiator address offset: 0 bits | |
2556 | + responder bus port size: 32 bits | |
2557 | + responder port least lane: D31-D24 | |
2558 | + (responder port not correctly positioned for this initiator): */ | |
2559 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
2560 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
2561 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2562 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2563 | + | |
2564 | + /* initiator maximum cycle size: 8 bits | |
2565 | + initiator address offset: 8 bits | |
2566 | + responder bus port size: 8 bits | |
2567 | + responder port least lane: D7-D0: */ | |
2568 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
2569 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
2570 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2571 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2572 | + | |
2573 | + /* initiator maximum cycle size: 8 bits | |
2574 | + initiator address offset: 8 bits | |
2575 | + responder bus port size: 8 bits | |
2576 | + responder port least lane: D15-D8: */ | |
2577 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
2578 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0), | |
2579 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2580 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2581 | + | |
2582 | + /* initiator maximum cycle size: 8 bits | |
2583 | + initiator address offset: 8 bits | |
2584 | + responder bus port size: 8 bits | |
2585 | + responder port least lane: D23-D16: */ | |
2586 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
2587 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
2588 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2589 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2590 | + | |
2591 | + /* initiator maximum cycle size: 8 bits | |
2592 | + initiator address offset: 8 bits | |
2593 | + responder bus port size: 8 bits | |
2594 | + responder port least lane: D31-D24: */ | |
2595 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
2596 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
2597 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2598 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2599 | + | |
2600 | + /* initiator maximum cycle size: 8 bits | |
2601 | + initiator address offset: 8 bits | |
2602 | + responder bus port size: 16 bits | |
2603 | + responder port least lane: D7-D0: */ | |
2604 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
2605 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0), | |
2606 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2607 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2608 | + | |
2609 | + /* initiator maximum cycle size: 8 bits | |
2610 | + initiator address offset: 8 bits | |
2611 | + responder bus port size: 16 bits | |
2612 | + responder port least lane: D15-D8: */ | |
2613 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
2614 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0), | |
2615 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2616 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2617 | + | |
2618 | + /* initiator maximum cycle size: 8 bits | |
2619 | + initiator address offset: 8 bits | |
2620 | + responder bus port size: 16 bits | |
2621 | + responder port least lane: D23-D16: */ | |
2622 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
2623 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
2624 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2625 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2626 | + | |
2627 | + /* initiator maximum cycle size: 8 bits | |
2628 | + initiator address offset: 8 bits | |
2629 | + responder bus port size: 16 bits | |
2630 | + responder port least lane: D31-D24 | |
2631 | + (responder port not correctly positioned for this initiator): */ | |
2632 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
2633 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
2634 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2635 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2636 | + | |
2637 | + /* initiator maximum cycle size: 8 bits | |
2638 | + initiator address offset: 8 bits | |
2639 | + responder bus port size: 32 bits | |
2640 | + responder port least lane: D7-D0: */ | |
2641 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
2642 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0), | |
2643 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2644 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2645 | + | |
2646 | + /* initiator maximum cycle size: 8 bits | |
2647 | + initiator address offset: 8 bits | |
2648 | + responder bus port size: 32 bits | |
2649 | + responder port least lane: D15-D8 | |
2650 | + (responder port not correctly positioned for this initiator): */ | |
2651 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
2652 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0), | |
2653 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2654 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2655 | + | |
2656 | + /* initiator maximum cycle size: 8 bits | |
2657 | + initiator address offset: 8 bits | |
2658 | + responder bus port size: 32 bits | |
2659 | + responder port least lane: D23-D16 | |
2660 | + (responder port not correctly positioned for this initiator): */ | |
2661 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
2662 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
2663 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2664 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2665 | + | |
2666 | + /* initiator maximum cycle size: 8 bits | |
2667 | + initiator address offset: 8 bits | |
2668 | + responder bus port size: 32 bits | |
2669 | + responder port least lane: D31-D24 | |
2670 | + (responder port not correctly positioned for this initiator): */ | |
2671 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
2672 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
2673 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2674 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2675 | + | |
2676 | + /* initiator maximum cycle size: 8 bits | |
2677 | + initiator address offset: 16 bits | |
2678 | + responder bus port size: 8 bits | |
2679 | + responder port least lane: D7-D0: */ | |
2680 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
2681 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
2682 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
2683 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2684 | + | |
2685 | + /* initiator maximum cycle size: 8 bits | |
2686 | + initiator address offset: 16 bits | |
2687 | + responder bus port size: 8 bits | |
2688 | + responder port least lane: D15-D8: */ | |
2689 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
2690 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
2691 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
2692 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2693 | + | |
2694 | + /* initiator maximum cycle size: 8 bits | |
2695 | + initiator address offset: 16 bits | |
2696 | + responder bus port size: 8 bits | |
2697 | + responder port least lane: D23-D16: */ | |
2698 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
2699 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
2700 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0), | |
2701 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2702 | + | |
2703 | + /* initiator maximum cycle size: 8 bits | |
2704 | + initiator address offset: 16 bits | |
2705 | + responder bus port size: 8 bits | |
2706 | + responder port least lane: D31-D24: */ | |
2707 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
2708 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
2709 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
2710 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2711 | + | |
2712 | + /* initiator maximum cycle size: 8 bits | |
2713 | + initiator address offset: 16 bits | |
2714 | + responder bus port size: 16 bits | |
2715 | + responder port least lane: D7-D0: */ | |
2716 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
2717 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
2718 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
2719 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2720 | + | |
2721 | + /* initiator maximum cycle size: 8 bits | |
2722 | + initiator address offset: 16 bits | |
2723 | + responder bus port size: 16 bits | |
2724 | + responder port least lane: D15-D8: */ | |
2725 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
2726 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
2727 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0), | |
2728 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2729 | + | |
2730 | + /* initiator maximum cycle size: 8 bits | |
2731 | + initiator address offset: 16 bits | |
2732 | + responder bus port size: 16 bits | |
2733 | + responder port least lane: D23-D16: */ | |
2734 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
2735 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
2736 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0), | |
2737 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2738 | + | |
2739 | + /* initiator maximum cycle size: 8 bits | |
2740 | + initiator address offset: 16 bits | |
2741 | + responder bus port size: 16 bits | |
2742 | + responder port least lane: D31-D24 | |
2743 | + (responder port not correctly positioned for this initiator): */ | |
2744 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
2745 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
2746 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
2747 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2748 | + | |
2749 | + /* initiator maximum cycle size: 8 bits | |
2750 | + initiator address offset: 16 bits | |
2751 | + responder bus port size: 32 bits | |
2752 | + responder port least lane: D7-D0: */ | |
2753 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
2754 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
2755 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0), | |
2756 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2757 | + | |
2758 | + /* initiator maximum cycle size: 8 bits | |
2759 | + initiator address offset: 16 bits | |
2760 | + responder bus port size: 32 bits | |
2761 | + responder port least lane: D15-D8 | |
2762 | + (responder port not correctly positioned for this initiator): */ | |
2763 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
2764 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
2765 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0), | |
2766 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2767 | + | |
2768 | + /* initiator maximum cycle size: 8 bits | |
2769 | + initiator address offset: 16 bits | |
2770 | + responder bus port size: 32 bits | |
2771 | + responder port least lane: D23-D16 | |
2772 | + (responder port not correctly positioned for this initiator): */ | |
2773 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
2774 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
2775 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0), | |
2776 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2777 | + | |
2778 | + /* initiator maximum cycle size: 8 bits | |
2779 | + initiator address offset: 16 bits | |
2780 | + responder bus port size: 32 bits | |
2781 | + responder port least lane: D31-D24 | |
2782 | + (responder port not correctly positioned for this initiator): */ | |
2783 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
2784 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
2785 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
2786 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2787 | + | |
2788 | + /* initiator maximum cycle size: 8 bits | |
2789 | + initiator address offset: 24 bits | |
2790 | + responder bus port size: 8 bits | |
2791 | + responder port least lane: D7-D0: */ | |
2792 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
2793 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
2794 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2795 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
2796 | + | |
2797 | + /* initiator maximum cycle size: 8 bits | |
2798 | + initiator address offset: 24 bits | |
2799 | + responder bus port size: 8 bits | |
2800 | + responder port least lane: D15-D8: */ | |
2801 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
2802 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
2803 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2804 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
2805 | + | |
2806 | + /* initiator maximum cycle size: 8 bits | |
2807 | + initiator address offset: 24 bits | |
2808 | + responder bus port size: 8 bits | |
2809 | + responder port least lane: D23-D16: */ | |
2810 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
2811 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
2812 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2813 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
2814 | + | |
2815 | + /* initiator maximum cycle size: 8 bits | |
2816 | + initiator address offset: 24 bits | |
2817 | + responder bus port size: 8 bits | |
2818 | + responder port least lane: D31-D24: */ | |
2819 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
2820 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
2821 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2822 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0), | |
2823 | + | |
2824 | + /* initiator maximum cycle size: 8 bits | |
2825 | + initiator address offset: 24 bits | |
2826 | + responder bus port size: 16 bits | |
2827 | + responder port least lane: D7-D0: */ | |
2828 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
2829 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
2830 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2831 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
2832 | + | |
2833 | + /* initiator maximum cycle size: 8 bits | |
2834 | + initiator address offset: 24 bits | |
2835 | + responder bus port size: 16 bits | |
2836 | + responder port least lane: D15-D8: */ | |
2837 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
2838 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
2839 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2840 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
2841 | + | |
2842 | + /* initiator maximum cycle size: 8 bits | |
2843 | + initiator address offset: 24 bits | |
2844 | + responder bus port size: 16 bits | |
2845 | + responder port least lane: D23-D16: */ | |
2846 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
2847 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
2848 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2849 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0), | |
2850 | + | |
2851 | + /* initiator maximum cycle size: 8 bits | |
2852 | + initiator address offset: 24 bits | |
2853 | + responder bus port size: 16 bits | |
2854 | + responder port least lane: D31-D24 | |
2855 | + (responder port not correctly positioned for this initiator): */ | |
2856 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
2857 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
2858 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2859 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0), | |
2860 | + | |
2861 | + /* initiator maximum cycle size: 8 bits | |
2862 | + initiator address offset: 24 bits | |
2863 | + responder bus port size: 32 bits | |
2864 | + responder port least lane: D7-D0: */ | |
2865 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
2866 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
2867 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2868 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0), | |
2869 | + | |
2870 | + /* initiator maximum cycle size: 8 bits | |
2871 | + initiator address offset: 24 bits | |
2872 | + responder bus port size: 32 bits | |
2873 | + responder port least lane: D15-D8 | |
2874 | + (responder port not correctly positioned for this initiator): */ | |
2875 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
2876 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
2877 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2878 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0), | |
2879 | + | |
2880 | + /* initiator maximum cycle size: 8 bits | |
2881 | + initiator address offset: 24 bits | |
2882 | + responder bus port size: 32 bits | |
2883 | + responder port least lane: D23-D16 | |
2884 | + (responder port not correctly positioned for this initiator): */ | |
2885 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
2886 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
2887 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2888 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0), | |
2889 | + | |
2890 | + /* initiator maximum cycle size: 8 bits | |
2891 | + initiator address offset: 24 bits | |
2892 | + responder bus port size: 32 bits | |
2893 | + responder port least lane: D31-D24 | |
2894 | + (responder port not correctly positioned for this initiator): */ | |
2895 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
2896 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
2897 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2898 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(0), | |
2899 | + | |
2900 | + /* initiator maximum cycle size: 16 bits | |
2901 | + initiator address offset: 0 bits | |
2902 | + responder bus port size: 8 bits | |
2903 | + responder port least lane: D7-D0: */ | |
2904 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0), | |
2905 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
2906 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2907 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2908 | + | |
2909 | + /* initiator maximum cycle size: 16 bits | |
2910 | + initiator address offset: 0 bits | |
2911 | + responder bus port size: 8 bits | |
2912 | + responder port least lane: D15-D8: */ | |
2913 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
2914 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1), | |
2915 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2916 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2917 | + | |
2918 | + /* initiator maximum cycle size: 16 bits | |
2919 | + initiator address offset: 0 bits | |
2920 | + responder bus port size: 8 bits | |
2921 | + responder port least lane: D23-D16: */ | |
2922 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
2923 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
2924 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2925 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2926 | + | |
2927 | + /* initiator maximum cycle size: 16 bits | |
2928 | + initiator address offset: 0 bits | |
2929 | + responder bus port size: 8 bits | |
2930 | + responder port least lane: D31-D24: */ | |
2931 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
2932 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
2933 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2934 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2935 | + | |
2936 | + /* initiator maximum cycle size: 16 bits | |
2937 | + initiator address offset: 0 bits | |
2938 | + responder bus port size: 16 bits | |
2939 | + responder port least lane: D7-D0: */ | |
2940 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0), | |
2941 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1), | |
2942 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2943 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2944 | + | |
2945 | + /* initiator maximum cycle size: 16 bits | |
2946 | + initiator address offset: 0 bits | |
2947 | + responder bus port size: 16 bits | |
2948 | + responder port least lane: D15-D8: */ | |
2949 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
2950 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1), | |
2951 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2952 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2953 | + | |
2954 | + /* initiator maximum cycle size: 16 bits | |
2955 | + initiator address offset: 0 bits | |
2956 | + responder bus port size: 16 bits | |
2957 | + responder port least lane: D23-D16: */ | |
2958 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
2959 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
2960 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2961 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2962 | + | |
2963 | + /* initiator maximum cycle size: 16 bits | |
2964 | + initiator address offset: 0 bits | |
2965 | + responder bus port size: 16 bits | |
2966 | + responder port least lane: D31-D24 | |
2967 | + (responder port not correctly positioned for this initiator): */ | |
2968 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
2969 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
2970 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2971 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2972 | + | |
2973 | + /* initiator maximum cycle size: 16 bits | |
2974 | + initiator address offset: 0 bits | |
2975 | + responder bus port size: 32 bits | |
2976 | + responder port least lane: D7-D0: */ | |
2977 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0), | |
2978 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1), | |
2979 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2980 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2981 | + | |
2982 | + /* initiator maximum cycle size: 16 bits | |
2983 | + initiator address offset: 0 bits | |
2984 | + responder bus port size: 32 bits | |
2985 | + responder port least lane: D15-D8 | |
2986 | + (responder port not correctly positioned for this initiator): */ | |
2987 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
2988 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1), | |
2989 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
2990 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
2991 | + | |
2992 | + /* initiator maximum cycle size: 16 bits | |
2993 | + initiator address offset: 0 bits | |
2994 | + responder bus port size: 32 bits | |
2995 | + responder port least lane: D23-D16 | |
2996 | + (responder port not correctly positioned for this initiator): */ | |
2997 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
2998 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
2999 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
3000 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
3001 | + | |
3002 | + /* initiator maximum cycle size: 16 bits | |
3003 | + initiator address offset: 0 bits | |
3004 | + responder bus port size: 32 bits | |
3005 | + responder port least lane: D31-D24 | |
3006 | + (responder port not correctly positioned for this initiator): */ | |
3007 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
3008 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
3009 | + /* D23-D16 */ TME_BUS_LANE_UNDEF, | |
3010 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
3011 | + | |
3012 | + /* initiator maximum cycle size: 16 bits | |
3013 | + initiator address offset: 8 bits | |
3014 | + responder bus port size: 8 bits | |
3015 | + responder port least lane: D7-D0: */ | |
3016 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
3017 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
3018 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
3019 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
3020 | + | |
3021 | + /* initiator maximum cycle size: 16 bits | |
3022 | + initiator address offset: 8 bits | |
3023 | + responder bus port size: 8 bits | |
3024 | + responder port least lane: D15-D8: */ | |
3025 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
3026 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0), | |
3027 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
3028 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
3029 | + | |
3030 | + /* initiator maximum cycle size: 16 bits | |
3031 | + initiator address offset: 8 bits | |
3032 | + responder bus port size: 8 bits | |
3033 | + responder port least lane: D23-D16: */ | |
3034 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
3035 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
3036 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1), | |
3037 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
3038 | + | |
3039 | + /* initiator maximum cycle size: 16 bits | |
3040 | + initiator address offset: 8 bits | |
3041 | + responder bus port size: 8 bits | |
3042 | + responder port least lane: D31-D24: */ | |
3043 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
3044 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
3045 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
3046 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
3047 | + | |
3048 | + /* initiator maximum cycle size: 16 bits | |
3049 | + initiator address offset: 8 bits | |
3050 | + responder bus port size: 16 bits | |
3051 | + responder port least lane: D7-D0: */ | |
3052 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
3053 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0), | |
3054 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
3055 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
3056 | + | |
3057 | + /* initiator maximum cycle size: 16 bits | |
3058 | + initiator address offset: 8 bits | |
3059 | + responder bus port size: 16 bits | |
3060 | + responder port least lane: D15-D8: */ | |
3061 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
3062 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0), | |
3063 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1), | |
3064 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
3065 | + | |
3066 | + /* initiator maximum cycle size: 16 bits | |
3067 | + initiator address offset: 8 bits | |
3068 | + responder bus port size: 16 bits | |
3069 | + responder port least lane: D23-D16: */ | |
3070 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
3071 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
3072 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1), | |
3073 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
3074 | + | |
3075 | + /* initiator maximum cycle size: 16 bits | |
3076 | + initiator address offset: 8 bits | |
3077 | + responder bus port size: 16 bits | |
3078 | + responder port least lane: D31-D24 | |
3079 | + (responder port not correctly positioned for this initiator): */ | |
3080 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
3081 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
3082 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
3083 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
3084 | + | |
3085 | + /* initiator maximum cycle size: 16 bits | |
3086 | + initiator address offset: 8 bits | |
3087 | + responder bus port size: 32 bits | |
3088 | + responder port least lane: D7-D0: */ | |
3089 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
3090 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0), | |
3091 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1), | |
3092 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
3093 | + | |
3094 | + /* initiator maximum cycle size: 16 bits | |
3095 | + initiator address offset: 8 bits | |
3096 | + responder bus port size: 32 bits | |
3097 | + responder port least lane: D15-D8 | |
3098 | + (responder port not correctly positioned for this initiator): */ | |
3099 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
3100 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0), | |
3101 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1), | |
3102 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
3103 | + | |
3104 | + /* initiator maximum cycle size: 16 bits | |
3105 | + initiator address offset: 8 bits | |
3106 | + responder bus port size: 32 bits | |
3107 | + responder port least lane: D23-D16 | |
3108 | + (responder port not correctly positioned for this initiator): */ | |
3109 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
3110 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
3111 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1), | |
3112 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
3113 | + | |
3114 | + /* initiator maximum cycle size: 16 bits | |
3115 | + initiator address offset: 8 bits | |
3116 | + responder bus port size: 32 bits | |
3117 | + responder port least lane: D31-D24 | |
3118 | + (responder port not correctly positioned for this initiator): */ | |
3119 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
3120 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
3121 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
3122 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
3123 | + | |
3124 | + /* initiator maximum cycle size: 16 bits | |
3125 | + initiator address offset: 16 bits | |
3126 | + responder bus port size: 8 bits | |
3127 | + responder port least lane: D7-D0: */ | |
3128 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
3129 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
3130 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
3131 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
3132 | + | |
3133 | + /* initiator maximum cycle size: 16 bits | |
3134 | + initiator address offset: 16 bits | |
3135 | + responder bus port size: 8 bits | |
3136 | + responder port least lane: D15-D8: */ | |
3137 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
3138 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
3139 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
3140 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
3141 | + | |
3142 | + /* initiator maximum cycle size: 16 bits | |
3143 | + initiator address offset: 16 bits | |
3144 | + responder bus port size: 8 bits | |
3145 | + responder port least lane: D23-D16: */ | |
3146 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
3147 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
3148 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0), | |
3149 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
3150 | + | |
3151 | + /* initiator maximum cycle size: 16 bits | |
3152 | + initiator address offset: 16 bits | |
3153 | + responder bus port size: 8 bits | |
3154 | + responder port least lane: D31-D24: */ | |
3155 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
3156 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
3157 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
3158 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(1), | |
3159 | + | |
3160 | + /* initiator maximum cycle size: 16 bits | |
3161 | + initiator address offset: 16 bits | |
3162 | + responder bus port size: 16 bits | |
3163 | + responder port least lane: D7-D0: */ | |
3164 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
3165 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
3166 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
3167 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
3168 | + | |
3169 | + /* initiator maximum cycle size: 16 bits | |
3170 | + initiator address offset: 16 bits | |
3171 | + responder bus port size: 16 bits | |
3172 | + responder port least lane: D15-D8: */ | |
3173 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
3174 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
3175 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0), | |
3176 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
3177 | + | |
3178 | + /* initiator maximum cycle size: 16 bits | |
3179 | + initiator address offset: 16 bits | |
3180 | + responder bus port size: 16 bits | |
3181 | + responder port least lane: D23-D16: */ | |
3182 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
3183 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
3184 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0), | |
3185 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(1), | |
3186 | + | |
3187 | + /* initiator maximum cycle size: 16 bits | |
3188 | + initiator address offset: 16 bits | |
3189 | + responder bus port size: 16 bits | |
3190 | + responder port least lane: D31-D24 | |
3191 | + (responder port not correctly positioned for this initiator): */ | |
3192 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
3193 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
3194 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
3195 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(1), | |
3196 | + | |
3197 | + /* initiator maximum cycle size: 16 bits | |
3198 | + initiator address offset: 16 bits | |
3199 | + responder bus port size: 32 bits | |
3200 | + responder port least lane: D7-D0: */ | |
3201 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
3202 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
3203 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0), | |
3204 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(1), | |
3205 | + | |
3206 | + /* initiator maximum cycle size: 16 bits | |
3207 | + initiator address offset: 16 bits | |
3208 | + responder bus port size: 32 bits | |
3209 | + responder port least lane: D15-D8 | |
3210 | + (responder port not correctly positioned for this initiator): */ | |
3211 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
3212 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
3213 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0), | |
3214 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(1), | |
3215 | + | |
3216 | + /* initiator maximum cycle size: 16 bits | |
3217 | + initiator address offset: 16 bits | |
3218 | + responder bus port size: 32 bits | |
3219 | + responder port least lane: D23-D16 | |
3220 | + (responder port not correctly positioned for this initiator): */ | |
3221 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
3222 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
3223 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0), | |
3224 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(1), | |
3225 | + | |
3226 | + /* initiator maximum cycle size: 16 bits | |
3227 | + initiator address offset: 16 bits | |
3228 | + responder bus port size: 32 bits | |
3229 | + responder port least lane: D31-D24 | |
3230 | + (responder port not correctly positioned for this initiator): */ | |
3231 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
3232 | + /* D15-D8 */ TME_BUS_LANE_UNDEF, | |
3233 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
3234 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(1), | |
3235 | + | |
3236 | + /* initiator maximum cycle size: 16 bits | |
3237 | + initiator address offset: 24 bits | |
3238 | + (a 32-bit initiator cannot request 16 bits at an 24-bit offset - this is an array placeholder) | |
3239 | + responder bus port size: 8 bits | |
3240 | + responder port least lane: D7-D0: */ | |
3241 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3242 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3243 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3244 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3245 | + | |
3246 | + /* initiator maximum cycle size: 16 bits | |
3247 | + initiator address offset: 24 bits | |
3248 | + (a 32-bit initiator cannot request 16 bits at an 24-bit offset - this is an array placeholder) | |
3249 | + responder bus port size: 8 bits | |
3250 | + responder port least lane: D15-D8: */ | |
3251 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3252 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3253 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3254 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3255 | + | |
3256 | + /* initiator maximum cycle size: 16 bits | |
3257 | + initiator address offset: 24 bits | |
3258 | + (a 32-bit initiator cannot request 16 bits at an 24-bit offset - this is an array placeholder) | |
3259 | + responder bus port size: 8 bits | |
3260 | + responder port least lane: D23-D16: */ | |
3261 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3262 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3263 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3264 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3265 | + | |
3266 | + /* initiator maximum cycle size: 16 bits | |
3267 | + initiator address offset: 24 bits | |
3268 | + (a 32-bit initiator cannot request 16 bits at an 24-bit offset - this is an array placeholder) | |
3269 | + responder bus port size: 8 bits | |
3270 | + responder port least lane: D31-D24: */ | |
3271 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3272 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3273 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3274 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3275 | + | |
3276 | + /* initiator maximum cycle size: 16 bits | |
3277 | + initiator address offset: 24 bits | |
3278 | + (a 32-bit initiator cannot request 16 bits at an 24-bit offset - this is an array placeholder) | |
3279 | + responder bus port size: 16 bits | |
3280 | + responder port least lane: D7-D0: */ | |
3281 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3282 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3283 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3284 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3285 | + | |
3286 | + /* initiator maximum cycle size: 16 bits | |
3287 | + initiator address offset: 24 bits | |
3288 | + (a 32-bit initiator cannot request 16 bits at an 24-bit offset - this is an array placeholder) | |
3289 | + responder bus port size: 16 bits | |
3290 | + responder port least lane: D15-D8: */ | |
3291 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3292 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3293 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3294 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3295 | + | |
3296 | + /* initiator maximum cycle size: 16 bits | |
3297 | + initiator address offset: 24 bits | |
3298 | + (a 32-bit initiator cannot request 16 bits at an 24-bit offset - this is an array placeholder) | |
3299 | + responder bus port size: 16 bits | |
3300 | + responder port least lane: D23-D16: */ | |
3301 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3302 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3303 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3304 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3305 | + | |
3306 | + /* initiator maximum cycle size: 16 bits | |
3307 | + initiator address offset: 24 bits | |
3308 | + (a 32-bit initiator cannot request 16 bits at an 24-bit offset - this is an array placeholder) | |
3309 | + responder bus port size: 16 bits | |
3310 | + responder port least lane: D31-D24 | |
3311 | + (responder port not correctly positioned for this initiator): */ | |
3312 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3313 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3314 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3315 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3316 | + | |
3317 | + /* initiator maximum cycle size: 16 bits | |
3318 | + initiator address offset: 24 bits | |
3319 | + (a 32-bit initiator cannot request 16 bits at an 24-bit offset - this is an array placeholder) | |
3320 | + responder bus port size: 32 bits | |
3321 | + responder port least lane: D7-D0: */ | |
3322 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3323 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3324 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3325 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3326 | + | |
3327 | + /* initiator maximum cycle size: 16 bits | |
3328 | + initiator address offset: 24 bits | |
3329 | + (a 32-bit initiator cannot request 16 bits at an 24-bit offset - this is an array placeholder) | |
3330 | + responder bus port size: 32 bits | |
3331 | + responder port least lane: D15-D8 | |
3332 | + (responder port not correctly positioned for this initiator): */ | |
3333 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3334 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3335 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3336 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3337 | + | |
3338 | + /* initiator maximum cycle size: 16 bits | |
3339 | + initiator address offset: 24 bits | |
3340 | + (a 32-bit initiator cannot request 16 bits at an 24-bit offset - this is an array placeholder) | |
3341 | + responder bus port size: 32 bits | |
3342 | + responder port least lane: D23-D16 | |
3343 | + (responder port not correctly positioned for this initiator): */ | |
3344 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3345 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3346 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3347 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3348 | + | |
3349 | + /* initiator maximum cycle size: 16 bits | |
3350 | + initiator address offset: 24 bits | |
3351 | + (a 32-bit initiator cannot request 16 bits at an 24-bit offset - this is an array placeholder) | |
3352 | + responder bus port size: 32 bits | |
3353 | + responder port least lane: D31-D24 | |
3354 | + (responder port not correctly positioned for this initiator): */ | |
3355 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3356 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3357 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3358 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3359 | + | |
3360 | + /* initiator maximum cycle size: 24 bits | |
3361 | + initiator address offset: 0 bits | |
3362 | + responder bus port size: 8 bits | |
3363 | + responder port least lane: D7-D0: */ | |
3364 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0), | |
3365 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
3366 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
3367 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
3368 | + | |
3369 | + /* initiator maximum cycle size: 24 bits | |
3370 | + initiator address offset: 0 bits | |
3371 | + responder bus port size: 8 bits | |
3372 | + responder port least lane: D15-D8: */ | |
3373 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
3374 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1), | |
3375 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
3376 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
3377 | + | |
3378 | + /* initiator maximum cycle size: 24 bits | |
3379 | + initiator address offset: 0 bits | |
3380 | + responder bus port size: 8 bits | |
3381 | + responder port least lane: D23-D16: */ | |
3382 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
3383 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
3384 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(2), | |
3385 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
3386 | + | |
3387 | + /* initiator maximum cycle size: 24 bits | |
3388 | + initiator address offset: 0 bits | |
3389 | + responder bus port size: 8 bits | |
3390 | + responder port least lane: D31-D24: */ | |
3391 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
3392 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
3393 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
3394 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
3395 | + | |
3396 | + /* initiator maximum cycle size: 24 bits | |
3397 | + initiator address offset: 0 bits | |
3398 | + responder bus port size: 16 bits | |
3399 | + responder port least lane: D7-D0: */ | |
3400 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0), | |
3401 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1), | |
3402 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
3403 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
3404 | + | |
3405 | + /* initiator maximum cycle size: 24 bits | |
3406 | + initiator address offset: 0 bits | |
3407 | + responder bus port size: 16 bits | |
3408 | + responder port least lane: D15-D8: */ | |
3409 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
3410 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1), | |
3411 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(2), | |
3412 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
3413 | + | |
3414 | + /* initiator maximum cycle size: 24 bits | |
3415 | + initiator address offset: 0 bits | |
3416 | + responder bus port size: 16 bits | |
3417 | + responder port least lane: D23-D16: */ | |
3418 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
3419 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
3420 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(2), | |
3421 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
3422 | + | |
3423 | + /* initiator maximum cycle size: 24 bits | |
3424 | + initiator address offset: 0 bits | |
3425 | + responder bus port size: 16 bits | |
3426 | + responder port least lane: D31-D24 | |
3427 | + (responder port not correctly positioned for this initiator): */ | |
3428 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
3429 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
3430 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
3431 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
3432 | + | |
3433 | + /* initiator maximum cycle size: 24 bits | |
3434 | + initiator address offset: 0 bits | |
3435 | + responder bus port size: 32 bits | |
3436 | + responder port least lane: D7-D0: */ | |
3437 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0), | |
3438 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1), | |
3439 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(2), | |
3440 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
3441 | + | |
3442 | + /* initiator maximum cycle size: 24 bits | |
3443 | + initiator address offset: 0 bits | |
3444 | + responder bus port size: 32 bits | |
3445 | + responder port least lane: D15-D8 | |
3446 | + (responder port not correctly positioned for this initiator): */ | |
3447 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
3448 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1), | |
3449 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(2), | |
3450 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
3451 | + | |
3452 | + /* initiator maximum cycle size: 24 bits | |
3453 | + initiator address offset: 0 bits | |
3454 | + responder bus port size: 32 bits | |
3455 | + responder port least lane: D23-D16 | |
3456 | + (responder port not correctly positioned for this initiator): */ | |
3457 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
3458 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
3459 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(2), | |
3460 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
3461 | + | |
3462 | + /* initiator maximum cycle size: 24 bits | |
3463 | + initiator address offset: 0 bits | |
3464 | + responder bus port size: 32 bits | |
3465 | + responder port least lane: D31-D24 | |
3466 | + (responder port not correctly positioned for this initiator): */ | |
3467 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
3468 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
3469 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
3470 | + /* D31-D24 */ TME_BUS_LANE_UNDEF, | |
3471 | + | |
3472 | + /* initiator maximum cycle size: 24 bits | |
3473 | + initiator address offset: 8 bits | |
3474 | + responder bus port size: 8 bits | |
3475 | + responder port least lane: D7-D0: */ | |
3476 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
3477 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
3478 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
3479 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
3480 | + | |
3481 | + /* initiator maximum cycle size: 24 bits | |
3482 | + initiator address offset: 8 bits | |
3483 | + responder bus port size: 8 bits | |
3484 | + responder port least lane: D15-D8: */ | |
3485 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
3486 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0), | |
3487 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
3488 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
3489 | + | |
3490 | + /* initiator maximum cycle size: 24 bits | |
3491 | + initiator address offset: 8 bits | |
3492 | + responder bus port size: 8 bits | |
3493 | + responder port least lane: D23-D16: */ | |
3494 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
3495 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
3496 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1), | |
3497 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
3498 | + | |
3499 | + /* initiator maximum cycle size: 24 bits | |
3500 | + initiator address offset: 8 bits | |
3501 | + responder bus port size: 8 bits | |
3502 | + responder port least lane: D31-D24: */ | |
3503 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
3504 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
3505 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
3506 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(2), | |
3507 | + | |
3508 | + /* initiator maximum cycle size: 24 bits | |
3509 | + initiator address offset: 8 bits | |
3510 | + responder bus port size: 16 bits | |
3511 | + responder port least lane: D7-D0: */ | |
3512 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
3513 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0), | |
3514 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
3515 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
3516 | + | |
3517 | + /* initiator maximum cycle size: 24 bits | |
3518 | + initiator address offset: 8 bits | |
3519 | + responder bus port size: 16 bits | |
3520 | + responder port least lane: D15-D8: */ | |
3521 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
3522 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0), | |
3523 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1), | |
3524 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
3525 | + | |
3526 | + /* initiator maximum cycle size: 24 bits | |
3527 | + initiator address offset: 8 bits | |
3528 | + responder bus port size: 16 bits | |
3529 | + responder port least lane: D23-D16: */ | |
3530 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
3531 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
3532 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1), | |
3533 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(2), | |
3534 | + | |
3535 | + /* initiator maximum cycle size: 24 bits | |
3536 | + initiator address offset: 8 bits | |
3537 | + responder bus port size: 16 bits | |
3538 | + responder port least lane: D31-D24 | |
3539 | + (responder port not correctly positioned for this initiator): */ | |
3540 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
3541 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
3542 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
3543 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(2), | |
3544 | + | |
3545 | + /* initiator maximum cycle size: 24 bits | |
3546 | + initiator address offset: 8 bits | |
3547 | + responder bus port size: 32 bits | |
3548 | + responder port least lane: D7-D0: */ | |
3549 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
3550 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0), | |
3551 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1), | |
3552 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(2), | |
3553 | + | |
3554 | + /* initiator maximum cycle size: 24 bits | |
3555 | + initiator address offset: 8 bits | |
3556 | + responder bus port size: 32 bits | |
3557 | + responder port least lane: D15-D8 | |
3558 | + (responder port not correctly positioned for this initiator): */ | |
3559 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
3560 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0), | |
3561 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1), | |
3562 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(2), | |
3563 | + | |
3564 | + /* initiator maximum cycle size: 24 bits | |
3565 | + initiator address offset: 8 bits | |
3566 | + responder bus port size: 32 bits | |
3567 | + responder port least lane: D23-D16 | |
3568 | + (responder port not correctly positioned for this initiator): */ | |
3569 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
3570 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
3571 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1), | |
3572 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(2), | |
3573 | + | |
3574 | + /* initiator maximum cycle size: 24 bits | |
3575 | + initiator address offset: 8 bits | |
3576 | + responder bus port size: 32 bits | |
3577 | + responder port least lane: D31-D24 | |
3578 | + (responder port not correctly positioned for this initiator): */ | |
3579 | + /* D7-D0 */ TME_BUS_LANE_UNDEF, | |
3580 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
3581 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
3582 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(2), | |
3583 | + | |
3584 | + /* initiator maximum cycle size: 24 bits | |
3585 | + initiator address offset: 16 bits | |
3586 | + (a 32-bit initiator cannot request 24 bits at an 16-bit offset - this is an array placeholder) | |
3587 | + responder bus port size: 8 bits | |
3588 | + responder port least lane: D7-D0: */ | |
3589 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3590 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3591 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3592 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3593 | + | |
3594 | + /* initiator maximum cycle size: 24 bits | |
3595 | + initiator address offset: 16 bits | |
3596 | + (a 32-bit initiator cannot request 24 bits at an 16-bit offset - this is an array placeholder) | |
3597 | + responder bus port size: 8 bits | |
3598 | + responder port least lane: D15-D8: */ | |
3599 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3600 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3601 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3602 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3603 | + | |
3604 | + /* initiator maximum cycle size: 24 bits | |
3605 | + initiator address offset: 16 bits | |
3606 | + (a 32-bit initiator cannot request 24 bits at an 16-bit offset - this is an array placeholder) | |
3607 | + responder bus port size: 8 bits | |
3608 | + responder port least lane: D23-D16: */ | |
3609 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3610 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3611 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3612 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3613 | + | |
3614 | + /* initiator maximum cycle size: 24 bits | |
3615 | + initiator address offset: 16 bits | |
3616 | + (a 32-bit initiator cannot request 24 bits at an 16-bit offset - this is an array placeholder) | |
3617 | + responder bus port size: 8 bits | |
3618 | + responder port least lane: D31-D24: */ | |
3619 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3620 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3621 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3622 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3623 | + | |
3624 | + /* initiator maximum cycle size: 24 bits | |
3625 | + initiator address offset: 16 bits | |
3626 | + (a 32-bit initiator cannot request 24 bits at an 16-bit offset - this is an array placeholder) | |
3627 | + responder bus port size: 16 bits | |
3628 | + responder port least lane: D7-D0: */ | |
3629 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3630 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3631 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3632 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3633 | + | |
3634 | + /* initiator maximum cycle size: 24 bits | |
3635 | + initiator address offset: 16 bits | |
3636 | + (a 32-bit initiator cannot request 24 bits at an 16-bit offset - this is an array placeholder) | |
3637 | + responder bus port size: 16 bits | |
3638 | + responder port least lane: D15-D8: */ | |
3639 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3640 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3641 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3642 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3643 | + | |
3644 | + /* initiator maximum cycle size: 24 bits | |
3645 | + initiator address offset: 16 bits | |
3646 | + (a 32-bit initiator cannot request 24 bits at an 16-bit offset - this is an array placeholder) | |
3647 | + responder bus port size: 16 bits | |
3648 | + responder port least lane: D23-D16: */ | |
3649 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3650 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3651 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3652 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3653 | + | |
3654 | + /* initiator maximum cycle size: 24 bits | |
3655 | + initiator address offset: 16 bits | |
3656 | + (a 32-bit initiator cannot request 24 bits at an 16-bit offset - this is an array placeholder) | |
3657 | + responder bus port size: 16 bits | |
3658 | + responder port least lane: D31-D24 | |
3659 | + (responder port not correctly positioned for this initiator): */ | |
3660 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3661 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3662 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3663 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3664 | + | |
3665 | + /* initiator maximum cycle size: 24 bits | |
3666 | + initiator address offset: 16 bits | |
3667 | + (a 32-bit initiator cannot request 24 bits at an 16-bit offset - this is an array placeholder) | |
3668 | + responder bus port size: 32 bits | |
3669 | + responder port least lane: D7-D0: */ | |
3670 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3671 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3672 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3673 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3674 | + | |
3675 | + /* initiator maximum cycle size: 24 bits | |
3676 | + initiator address offset: 16 bits | |
3677 | + (a 32-bit initiator cannot request 24 bits at an 16-bit offset - this is an array placeholder) | |
3678 | + responder bus port size: 32 bits | |
3679 | + responder port least lane: D15-D8 | |
3680 | + (responder port not correctly positioned for this initiator): */ | |
3681 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3682 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3683 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3684 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3685 | + | |
3686 | + /* initiator maximum cycle size: 24 bits | |
3687 | + initiator address offset: 16 bits | |
3688 | + (a 32-bit initiator cannot request 24 bits at an 16-bit offset - this is an array placeholder) | |
3689 | + responder bus port size: 32 bits | |
3690 | + responder port least lane: D23-D16 | |
3691 | + (responder port not correctly positioned for this initiator): */ | |
3692 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3693 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3694 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3695 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3696 | + | |
3697 | + /* initiator maximum cycle size: 24 bits | |
3698 | + initiator address offset: 16 bits | |
3699 | + (a 32-bit initiator cannot request 24 bits at an 16-bit offset - this is an array placeholder) | |
3700 | + responder bus port size: 32 bits | |
3701 | + responder port least lane: D31-D24 | |
3702 | + (responder port not correctly positioned for this initiator): */ | |
3703 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3704 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3705 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3706 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3707 | + | |
3708 | + /* initiator maximum cycle size: 24 bits | |
3709 | + initiator address offset: 24 bits | |
3710 | + (a 32-bit initiator cannot request 24 bits at an 24-bit offset - this is an array placeholder) | |
3711 | + responder bus port size: 8 bits | |
3712 | + responder port least lane: D7-D0: */ | |
3713 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3714 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3715 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3716 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3717 | + | |
3718 | + /* initiator maximum cycle size: 24 bits | |
3719 | + initiator address offset: 24 bits | |
3720 | + (a 32-bit initiator cannot request 24 bits at an 24-bit offset - this is an array placeholder) | |
3721 | + responder bus port size: 8 bits | |
3722 | + responder port least lane: D15-D8: */ | |
3723 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3724 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3725 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3726 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3727 | + | |
3728 | + /* initiator maximum cycle size: 24 bits | |
3729 | + initiator address offset: 24 bits | |
3730 | + (a 32-bit initiator cannot request 24 bits at an 24-bit offset - this is an array placeholder) | |
3731 | + responder bus port size: 8 bits | |
3732 | + responder port least lane: D23-D16: */ | |
3733 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3734 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3735 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3736 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3737 | + | |
3738 | + /* initiator maximum cycle size: 24 bits | |
3739 | + initiator address offset: 24 bits | |
3740 | + (a 32-bit initiator cannot request 24 bits at an 24-bit offset - this is an array placeholder) | |
3741 | + responder bus port size: 8 bits | |
3742 | + responder port least lane: D31-D24: */ | |
3743 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3744 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3745 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3746 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3747 | + | |
3748 | + /* initiator maximum cycle size: 24 bits | |
3749 | + initiator address offset: 24 bits | |
3750 | + (a 32-bit initiator cannot request 24 bits at an 24-bit offset - this is an array placeholder) | |
3751 | + responder bus port size: 16 bits | |
3752 | + responder port least lane: D7-D0: */ | |
3753 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3754 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3755 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3756 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3757 | + | |
3758 | + /* initiator maximum cycle size: 24 bits | |
3759 | + initiator address offset: 24 bits | |
3760 | + (a 32-bit initiator cannot request 24 bits at an 24-bit offset - this is an array placeholder) | |
3761 | + responder bus port size: 16 bits | |
3762 | + responder port least lane: D15-D8: */ | |
3763 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3764 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3765 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3766 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3767 | + | |
3768 | + /* initiator maximum cycle size: 24 bits | |
3769 | + initiator address offset: 24 bits | |
3770 | + (a 32-bit initiator cannot request 24 bits at an 24-bit offset - this is an array placeholder) | |
3771 | + responder bus port size: 16 bits | |
3772 | + responder port least lane: D23-D16: */ | |
3773 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3774 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3775 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3776 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3777 | + | |
3778 | + /* initiator maximum cycle size: 24 bits | |
3779 | + initiator address offset: 24 bits | |
3780 | + (a 32-bit initiator cannot request 24 bits at an 24-bit offset - this is an array placeholder) | |
3781 | + responder bus port size: 16 bits | |
3782 | + responder port least lane: D31-D24 | |
3783 | + (responder port not correctly positioned for this initiator): */ | |
3784 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3785 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3786 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3787 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3788 | + | |
3789 | + /* initiator maximum cycle size: 24 bits | |
3790 | + initiator address offset: 24 bits | |
3791 | + (a 32-bit initiator cannot request 24 bits at an 24-bit offset - this is an array placeholder) | |
3792 | + responder bus port size: 32 bits | |
3793 | + responder port least lane: D7-D0: */ | |
3794 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3795 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3796 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3797 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3798 | + | |
3799 | + /* initiator maximum cycle size: 24 bits | |
3800 | + initiator address offset: 24 bits | |
3801 | + (a 32-bit initiator cannot request 24 bits at an 24-bit offset - this is an array placeholder) | |
3802 | + responder bus port size: 32 bits | |
3803 | + responder port least lane: D15-D8 | |
3804 | + (responder port not correctly positioned for this initiator): */ | |
3805 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3806 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3807 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3808 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3809 | + | |
3810 | + /* initiator maximum cycle size: 24 bits | |
3811 | + initiator address offset: 24 bits | |
3812 | + (a 32-bit initiator cannot request 24 bits at an 24-bit offset - this is an array placeholder) | |
3813 | + responder bus port size: 32 bits | |
3814 | + responder port least lane: D23-D16 | |
3815 | + (responder port not correctly positioned for this initiator): */ | |
3816 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3817 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3818 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3819 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3820 | + | |
3821 | + /* initiator maximum cycle size: 24 bits | |
3822 | + initiator address offset: 24 bits | |
3823 | + (a 32-bit initiator cannot request 24 bits at an 24-bit offset - this is an array placeholder) | |
3824 | + responder bus port size: 32 bits | |
3825 | + responder port least lane: D31-D24 | |
3826 | + (responder port not correctly positioned for this initiator): */ | |
3827 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3828 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3829 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3830 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3831 | + | |
3832 | + /* initiator maximum cycle size: 32 bits | |
3833 | + initiator address offset: 0 bits | |
3834 | + responder bus port size: 8 bits | |
3835 | + responder port least lane: D7-D0: */ | |
3836 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0), | |
3837 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
3838 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
3839 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(3) | TME_BUS_LANE_WARN, | |
3840 | + | |
3841 | + /* initiator maximum cycle size: 32 bits | |
3842 | + initiator address offset: 0 bits | |
3843 | + responder bus port size: 8 bits | |
3844 | + responder port least lane: D15-D8: */ | |
3845 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
3846 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1), | |
3847 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
3848 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(3) | TME_BUS_LANE_WARN, | |
3849 | + | |
3850 | + /* initiator maximum cycle size: 32 bits | |
3851 | + initiator address offset: 0 bits | |
3852 | + responder bus port size: 8 bits | |
3853 | + responder port least lane: D23-D16: */ | |
3854 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
3855 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
3856 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(2), | |
3857 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(3) | TME_BUS_LANE_WARN, | |
3858 | + | |
3859 | + /* initiator maximum cycle size: 32 bits | |
3860 | + initiator address offset: 0 bits | |
3861 | + responder bus port size: 8 bits | |
3862 | + responder port least lane: D31-D24: */ | |
3863 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
3864 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
3865 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
3866 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(3), | |
3867 | + | |
3868 | + /* initiator maximum cycle size: 32 bits | |
3869 | + initiator address offset: 0 bits | |
3870 | + responder bus port size: 16 bits | |
3871 | + responder port least lane: D7-D0: */ | |
3872 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0), | |
3873 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1), | |
3874 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
3875 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(3) | TME_BUS_LANE_WARN, | |
3876 | + | |
3877 | + /* initiator maximum cycle size: 32 bits | |
3878 | + initiator address offset: 0 bits | |
3879 | + responder bus port size: 16 bits | |
3880 | + responder port least lane: D15-D8: */ | |
3881 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
3882 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1), | |
3883 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(2), | |
3884 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(3) | TME_BUS_LANE_WARN, | |
3885 | + | |
3886 | + /* initiator maximum cycle size: 32 bits | |
3887 | + initiator address offset: 0 bits | |
3888 | + responder bus port size: 16 bits | |
3889 | + responder port least lane: D23-D16: */ | |
3890 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
3891 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
3892 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(2), | |
3893 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(3), | |
3894 | + | |
3895 | + /* initiator maximum cycle size: 32 bits | |
3896 | + initiator address offset: 0 bits | |
3897 | + responder bus port size: 16 bits | |
3898 | + responder port least lane: D31-D24 | |
3899 | + (responder port not correctly positioned for this initiator): */ | |
3900 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
3901 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
3902 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
3903 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(3), | |
3904 | + | |
3905 | + /* initiator maximum cycle size: 32 bits | |
3906 | + initiator address offset: 0 bits | |
3907 | + responder bus port size: 32 bits | |
3908 | + responder port least lane: D7-D0: */ | |
3909 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0), | |
3910 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1), | |
3911 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(2), | |
3912 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(3), | |
3913 | + | |
3914 | + /* initiator maximum cycle size: 32 bits | |
3915 | + initiator address offset: 0 bits | |
3916 | + responder bus port size: 32 bits | |
3917 | + responder port least lane: D15-D8 | |
3918 | + (responder port not correctly positioned for this initiator): */ | |
3919 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
3920 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1), | |
3921 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(2), | |
3922 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(3), | |
3923 | + | |
3924 | + /* initiator maximum cycle size: 32 bits | |
3925 | + initiator address offset: 0 bits | |
3926 | + responder bus port size: 32 bits | |
3927 | + responder port least lane: D23-D16 | |
3928 | + (responder port not correctly positioned for this initiator): */ | |
3929 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
3930 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
3931 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(2), | |
3932 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(3), | |
3933 | + | |
3934 | + /* initiator maximum cycle size: 32 bits | |
3935 | + initiator address offset: 0 bits | |
3936 | + responder bus port size: 32 bits | |
3937 | + responder port least lane: D31-D24 | |
3938 | + (responder port not correctly positioned for this initiator): */ | |
3939 | + /* D7-D0 */ TME_BUS_LANE_ROUTE(0) | TME_BUS_LANE_WARN, | |
3940 | + /* D15-D8 */ TME_BUS_LANE_ROUTE(1) | TME_BUS_LANE_WARN, | |
3941 | + /* D23-D16 */ TME_BUS_LANE_ROUTE(2) | TME_BUS_LANE_WARN, | |
3942 | + /* D31-D24 */ TME_BUS_LANE_ROUTE(3), | |
3943 | + | |
3944 | + /* initiator maximum cycle size: 32 bits | |
3945 | + initiator address offset: 8 bits | |
3946 | + (a 32-bit initiator cannot request 32 bits at an 8-bit offset - this is an array placeholder) | |
3947 | + responder bus port size: 8 bits | |
3948 | + responder port least lane: D7-D0: */ | |
3949 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3950 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3951 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3952 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3953 | + | |
3954 | + /* initiator maximum cycle size: 32 bits | |
3955 | + initiator address offset: 8 bits | |
3956 | + (a 32-bit initiator cannot request 32 bits at an 8-bit offset - this is an array placeholder) | |
3957 | + responder bus port size: 8 bits | |
3958 | + responder port least lane: D15-D8: */ | |
3959 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3960 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3961 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3962 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3963 | + | |
3964 | + /* initiator maximum cycle size: 32 bits | |
3965 | + initiator address offset: 8 bits | |
3966 | + (a 32-bit initiator cannot request 32 bits at an 8-bit offset - this is an array placeholder) | |
3967 | + responder bus port size: 8 bits | |
3968 | + responder port least lane: D23-D16: */ | |
3969 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3970 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3971 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3972 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3973 | + | |
3974 | + /* initiator maximum cycle size: 32 bits | |
3975 | + initiator address offset: 8 bits | |
3976 | + (a 32-bit initiator cannot request 32 bits at an 8-bit offset - this is an array placeholder) | |
3977 | + responder bus port size: 8 bits | |
3978 | + responder port least lane: D31-D24: */ | |
3979 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3980 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3981 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3982 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3983 | + | |
3984 | + /* initiator maximum cycle size: 32 bits | |
3985 | + initiator address offset: 8 bits | |
3986 | + (a 32-bit initiator cannot request 32 bits at an 8-bit offset - this is an array placeholder) | |
3987 | + responder bus port size: 16 bits | |
3988 | + responder port least lane: D7-D0: */ | |
3989 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
3990 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
3991 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
3992 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
3993 | + | |
3994 | + /* initiator maximum cycle size: 32 bits | |
3995 | + initiator address offset: 8 bits | |
3996 | + (a 32-bit initiator cannot request 32 bits at an 8-bit offset - this is an array placeholder) | |
3997 | + responder bus port size: 16 bits | |
3998 | + responder port least lane: D15-D8: */ | |
3999 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
4000 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
4001 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
4002 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
4003 | + | |
4004 | + /* initiator maximum cycle size: 32 bits | |
4005 | + initiator address offset: 8 bits | |
4006 | + (a 32-bit initiator cannot request 32 bits at an 8-bit offset - this is an array placeholder) | |
4007 | + responder bus port size: 16 bits | |
4008 | + responder port least lane: D23-D16: */ | |
4009 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
4010 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
4011 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
4012 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
4013 | + | |
4014 | + /* initiator maximum cycle size: 32 bits | |
4015 | + initiator address offset: 8 bits | |
4016 | + (a 32-bit initiator cannot request 32 bits at an 8-bit offset - this is an array placeholder) | |
4017 | + responder bus port size: 16 bits | |
4018 | + responder port least lane: D31-D24 | |
4019 | + (responder port not correctly positioned for this initiator): */ | |
4020 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
4021 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
4022 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
4023 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
4024 | + | |
4025 | + /* initiator maximum cycle size: 32 bits | |
4026 | + initiator address offset: 8 bits | |
4027 | + (a 32-bit initiator cannot request 32 bits at an 8-bit offset - this is an array placeholder) | |
4028 | + responder bus port size: 32 bits | |
4029 | + responder port least lane: D7-D0: */ | |
4030 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
4031 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
4032 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
4033 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
4034 | + | |
4035 | + /* initiator maximum cycle size: 32 bits | |
4036 | + initiator address offset: 8 bits | |
4037 | + (a 32-bit initiator cannot request 32 bits at an 8-bit offset - this is an array placeholder) | |
4038 | + responder bus port size: 32 bits | |
4039 | + responder port least lane: D15-D8 | |
4040 | + (responder port not correctly positioned for this initiator): */ | |
4041 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
4042 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
4043 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
4044 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
4045 | + | |
4046 | + /* initiator maximum cycle size: 32 bits | |
4047 | + initiator address offset: 8 bits | |
4048 | + (a 32-bit initiator cannot request 32 bits at an 8-bit offset - this is an array placeholder) | |
4049 | + responder bus port size: 32 bits | |
4050 | + responder port least lane: D23-D16 | |
4051 | + (responder port not correctly positioned for this initiator): */ | |
4052 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
4053 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
4054 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
4055 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
4056 | + | |
4057 | + /* initiator maximum cycle size: 32 bits | |
4058 | + initiator address offset: 8 bits | |
4059 | + (a 32-bit initiator cannot request 32 bits at an 8-bit offset - this is an array placeholder) | |
4060 | + responder bus port size: 32 bits | |
4061 | + responder port least lane: D31-D24 | |
4062 | + (responder port not correctly positioned for this initiator): */ | |
4063 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
4064 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
4065 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
4066 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
4067 | + | |
4068 | + /* initiator maximum cycle size: 32 bits | |
4069 | + initiator address offset: 16 bits | |
4070 | + (a 32-bit initiator cannot request 32 bits at an 16-bit offset - this is an array placeholder) | |
4071 | + responder bus port size: 8 bits | |
4072 | + responder port least lane: D7-D0: */ | |
4073 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
4074 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
4075 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
4076 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
4077 | + | |
4078 | + /* initiator maximum cycle size: 32 bits | |
4079 | + initiator address offset: 16 bits | |
4080 | + (a 32-bit initiator cannot request 32 bits at an 16-bit offset - this is an array placeholder) | |
4081 | + responder bus port size: 8 bits | |
4082 | + responder port least lane: D15-D8: */ | |
4083 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
4084 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
4085 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
4086 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
4087 | + | |
4088 | + /* initiator maximum cycle size: 32 bits | |
4089 | + initiator address offset: 16 bits | |
4090 | + (a 32-bit initiator cannot request 32 bits at an 16-bit offset - this is an array placeholder) | |
4091 | + responder bus port size: 8 bits | |
4092 | + responder port least lane: D23-D16: */ | |
4093 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
4094 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
4095 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
4096 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
4097 | + | |
4098 | + /* initiator maximum cycle size: 32 bits | |
4099 | + initiator address offset: 16 bits | |
4100 | + (a 32-bit initiator cannot request 32 bits at an 16-bit offset - this is an array placeholder) | |
4101 | + responder bus port size: 8 bits | |
4102 | + responder port least lane: D31-D24: */ | |
4103 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
4104 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
4105 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
4106 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
4107 | + | |
4108 | + /* initiator maximum cycle size: 32 bits | |
4109 | + initiator address offset: 16 bits | |
4110 | + (a 32-bit initiator cannot request 32 bits at an 16-bit offset - this is an array placeholder) | |
4111 | + responder bus port size: 16 bits | |
4112 | + responder port least lane: D7-D0: */ | |
4113 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
4114 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
4115 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
4116 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
4117 | + | |
4118 | + /* initiator maximum cycle size: 32 bits | |
4119 | + initiator address offset: 16 bits | |
4120 | + (a 32-bit initiator cannot request 32 bits at an 16-bit offset - this is an array placeholder) | |
4121 | + responder bus port size: 16 bits | |
4122 | + responder port least lane: D15-D8: */ | |
4123 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
4124 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
4125 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
4126 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
4127 | + | |
4128 | + /* initiator maximum cycle size: 32 bits | |
4129 | + initiator address offset: 16 bits | |
4130 | + (a 32-bit initiator cannot request 32 bits at an 16-bit offset - this is an array placeholder) | |
4131 | + responder bus port size: 16 bits | |
4132 | + responder port least lane: D23-D16: */ | |
4133 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
4134 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
4135 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
4136 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
4137 | + | |
4138 | + /* initiator maximum cycle size: 32 bits | |
4139 | + initiator address offset: 16 bits | |
4140 | + (a 32-bit initiator cannot request 32 bits at an 16-bit offset - this is an array placeholder) | |
4141 | + responder bus port size: 16 bits | |
4142 | + responder port least lane: D31-D24 | |
4143 | + (responder port not correctly positioned for this initiator): */ | |
4144 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
4145 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
4146 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
4147 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
4148 | + | |
4149 | + /* initiator maximum cycle size: 32 bits | |
4150 | + initiator address offset: 16 bits | |
4151 | + (a 32-bit initiator cannot request 32 bits at an 16-bit offset - this is an array placeholder) | |
4152 | + responder bus port size: 32 bits | |
4153 | + responder port least lane: D7-D0: */ | |
4154 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
4155 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
4156 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
4157 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
4158 | + | |
4159 | + /* initiator maximum cycle size: 32 bits | |
4160 | + initiator address offset: 16 bits | |
4161 | + (a 32-bit initiator cannot request 32 bits at an 16-bit offset - this is an array placeholder) | |
4162 | + responder bus port size: 32 bits | |
4163 | + responder port least lane: D15-D8 | |
4164 | + (responder port not correctly positioned for this initiator): */ | |
4165 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
4166 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
4167 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
4168 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
4169 | + | |
4170 | + /* initiator maximum cycle size: 32 bits | |
4171 | + initiator address offset: 16 bits | |
4172 | + (a 32-bit initiator cannot request 32 bits at an 16-bit offset - this is an array placeholder) | |
4173 | + responder bus port size: 32 bits | |
4174 | + responder port least lane: D23-D16 | |
4175 | + (responder port not correctly positioned for this initiator): */ | |
4176 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
4177 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
4178 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
4179 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
4180 | + | |
4181 | + /* initiator maximum cycle size: 32 bits | |
4182 | + initiator address offset: 16 bits | |
4183 | + (a 32-bit initiator cannot request 32 bits at an 16-bit offset - this is an array placeholder) | |
4184 | + responder bus port size: 32 bits | |
4185 | + responder port least lane: D31-D24 | |
4186 | + (responder port not correctly positioned for this initiator): */ | |
4187 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
4188 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
4189 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
4190 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
4191 | + | |
4192 | + /* initiator maximum cycle size: 32 bits | |
4193 | + initiator address offset: 24 bits | |
4194 | + (a 32-bit initiator cannot request 32 bits at an 24-bit offset - this is an array placeholder) | |
4195 | + responder bus port size: 8 bits | |
4196 | + responder port least lane: D7-D0: */ | |
4197 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
4198 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
4199 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
4200 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
4201 | + | |
4202 | + /* initiator maximum cycle size: 32 bits | |
4203 | + initiator address offset: 24 bits | |
4204 | + (a 32-bit initiator cannot request 32 bits at an 24-bit offset - this is an array placeholder) | |
4205 | + responder bus port size: 8 bits | |
4206 | + responder port least lane: D15-D8: */ | |
4207 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
4208 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
4209 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
4210 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
4211 | + | |
4212 | + /* initiator maximum cycle size: 32 bits | |
4213 | + initiator address offset: 24 bits | |
4214 | + (a 32-bit initiator cannot request 32 bits at an 24-bit offset - this is an array placeholder) | |
4215 | + responder bus port size: 8 bits | |
4216 | + responder port least lane: D23-D16: */ | |
4217 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
4218 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
4219 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
4220 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
4221 | + | |
4222 | + /* initiator maximum cycle size: 32 bits | |
4223 | + initiator address offset: 24 bits | |
4224 | + (a 32-bit initiator cannot request 32 bits at an 24-bit offset - this is an array placeholder) | |
4225 | + responder bus port size: 8 bits | |
4226 | + responder port least lane: D31-D24: */ | |
4227 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
4228 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
4229 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
4230 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
4231 | + | |
4232 | + /* initiator maximum cycle size: 32 bits | |
4233 | + initiator address offset: 24 bits | |
4234 | + (a 32-bit initiator cannot request 32 bits at an 24-bit offset - this is an array placeholder) | |
4235 | + responder bus port size: 16 bits | |
4236 | + responder port least lane: D7-D0: */ | |
4237 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
4238 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
4239 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
4240 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
4241 | + | |
4242 | + /* initiator maximum cycle size: 32 bits | |
4243 | + initiator address offset: 24 bits | |
4244 | + (a 32-bit initiator cannot request 32 bits at an 24-bit offset - this is an array placeholder) | |
4245 | + responder bus port size: 16 bits | |
4246 | + responder port least lane: D15-D8: */ | |
4247 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
4248 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
4249 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
4250 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
4251 | + | |
4252 | + /* initiator maximum cycle size: 32 bits | |
4253 | + initiator address offset: 24 bits | |
4254 | + (a 32-bit initiator cannot request 32 bits at an 24-bit offset - this is an array placeholder) | |
4255 | + responder bus port size: 16 bits | |
4256 | + responder port least lane: D23-D16: */ | |
4257 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
4258 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
4259 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
4260 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
4261 | + | |
4262 | + /* initiator maximum cycle size: 32 bits | |
4263 | + initiator address offset: 24 bits | |
4264 | + (a 32-bit initiator cannot request 32 bits at an 24-bit offset - this is an array placeholder) | |
4265 | + responder bus port size: 16 bits | |
4266 | + responder port least lane: D31-D24 | |
4267 | + (responder port not correctly positioned for this initiator): */ | |
4268 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
4269 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
4270 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
4271 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
4272 | + | |
4273 | + /* initiator maximum cycle size: 32 bits | |
4274 | + initiator address offset: 24 bits | |
4275 | + (a 32-bit initiator cannot request 32 bits at an 24-bit offset - this is an array placeholder) | |
4276 | + responder bus port size: 32 bits | |
4277 | + responder port least lane: D7-D0: */ | |
4278 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
4279 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
4280 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
4281 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
4282 | + | |
4283 | + /* initiator maximum cycle size: 32 bits | |
4284 | + initiator address offset: 24 bits | |
4285 | + (a 32-bit initiator cannot request 32 bits at an 24-bit offset - this is an array placeholder) | |
4286 | + responder bus port size: 32 bits | |
4287 | + responder port least lane: D15-D8 | |
4288 | + (responder port not correctly positioned for this initiator): */ | |
4289 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
4290 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
4291 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
4292 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
4293 | + | |
4294 | + /* initiator maximum cycle size: 32 bits | |
4295 | + initiator address offset: 24 bits | |
4296 | + (a 32-bit initiator cannot request 32 bits at an 24-bit offset - this is an array placeholder) | |
4297 | + responder bus port size: 32 bits | |
4298 | + responder port least lane: D23-D16 | |
4299 | + (responder port not correctly positioned for this initiator): */ | |
4300 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
4301 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
4302 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
4303 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
4304 | + | |
4305 | + /* initiator maximum cycle size: 32 bits | |
4306 | + initiator address offset: 24 bits | |
4307 | + (a 32-bit initiator cannot request 32 bits at an 24-bit offset - this is an array placeholder) | |
4308 | + responder bus port size: 32 bits | |
4309 | + responder port least lane: D31-D24 | |
4310 | + (responder port not correctly positioned for this initiator): */ | |
4311 | + /* D7-D0 */ TME_BUS_LANE_ABORT, | |
4312 | + /* D15-D8 */ TME_BUS_LANE_ABORT, | |
4313 | + /* D23-D16 */ TME_BUS_LANE_ABORT, | |
4314 | + /* D31-D24 */ TME_BUS_LANE_ABORT, | |
4315 | +}; | |
4316 | + | |
4317 | +/* the 32-bit bus master DMA read function: */ | |
4318 | +int | |
4319 | +tme_bus_device_dma_read_32(struct tme_bus_device *bus_device, | |
4320 | + tme_bus_addr_t address_init, | |
4321 | + tme_bus_addr_t size, | |
4322 | + tme_uint8_t *buffer, | |
4323 | + unsigned int locks) | |
4324 | +{ | |
4325 | + struct tme_bus_tlb *tlb, tlb_local; | |
4326 | + struct tme_bus_connection *conn_bus; | |
4327 | + tme_bus_addr_t count_minus_one, count; | |
4328 | + struct tme_bus_cycle cycle; | |
4329 | + tme_bus_addr_t address_resp; | |
4330 | + int shift; | |
4331 | + int err; | |
4332 | + | |
4333 | + /* assume no error: */ | |
4334 | + err = TME_OK; | |
4335 | + | |
4336 | + /* loop while we have more bytes to read: */ | |
4337 | + for (; err == TME_OK && size > 0; ) { | |
4338 | + | |
4339 | + /* hash this address into a TLB entry: */ | |
4340 | + tlb = (*bus_device->tme_bus_device_tlb_hash) | |
4341 | + (bus_device, | |
4342 | + address_init, | |
4343 | + TME_BUS_CYCLE_READ); | |
4344 | + | |
4345 | + /* busy this TLB entry: */ | |
4346 | + tme_bus_tlb_busy(tlb); | |
4347 | + | |
4348 | + /* if this TLB entry is invalid, doesn't cover this address, or if it doesn't | |
4349 | + allow reading, reload it: */ | |
4350 | + if (tme_bus_tlb_is_invalid(tlb) | |
4351 | + || address_init < tlb->tme_bus_tlb_addr_first | |
4352 | + || address_init > tlb->tme_bus_tlb_addr_last | |
4353 | + || (tlb->tme_bus_tlb_emulator_off_read == TME_EMULATOR_OFF_UNDEF | |
4354 | + && !(tlb->tme_bus_tlb_cycles_ok & TME_BUS_CYCLE_READ))) { | |
4355 | + | |
4356 | + /* unbusy this TLB entry for filling: */ | |
4357 | + tme_bus_tlb_unbusy_fill(tlb); | |
4358 | + | |
4359 | + /* pass this TLB's token: */ | |
4360 | + tlb_local.tme_bus_tlb_token = tlb->tme_bus_tlb_token; | |
4361 | + | |
4362 | + /* get our bus connection: */ | |
4363 | + conn_bus = tme_memory_atomic_pointer_read(struct tme_bus_connection *, | |
4364 | + bus_device->tme_bus_device_connection, | |
4365 | + &bus_device->tme_bus_device_connection_rwlock); | |
4366 | + | |
4367 | + /* unlock the device: */ | |
4368 | + (*bus_device->tme_bus_device_unlock)(bus_device, locks); | |
4369 | + | |
4370 | + /* reload the TLB entry: */ | |
4371 | + err = (*conn_bus->tme_bus_tlb_fill) | |
4372 | + (conn_bus, | |
4373 | + &tlb_local, | |
4374 | + address_init, | |
4375 | + TME_BUS_CYCLE_READ); | |
4376 | + | |
4377 | + /* lock the device: */ | |
4378 | + (*bus_device->tme_bus_device_lock)(bus_device, locks); | |
4379 | + | |
4380 | + /* return if we couldn't fill the TLB entry: */ | |
4381 | + if (err != TME_OK) { | |
4382 | + return (err); | |
4383 | + } | |
4384 | + | |
4385 | + /* store the TLB entry: */ | |
4386 | + *tlb = tlb_local; | |
4387 | + | |
4388 | + /* loop to check the newly filled TLB entry: */ | |
4389 | + continue; | |
4390 | + } | |
4391 | + | |
4392 | + /* if this TLB entry allows fast reading: */ | |
4393 | + if (tlb->tme_bus_tlb_emulator_off_read != TME_EMULATOR_OFF_UNDEF) { | |
4394 | + | |
4395 | + /* see how many bytes we can fast read from this TLB entry, | |
4396 | + starting at this address: */ | |
4397 | + count_minus_one = (tlb->tme_bus_tlb_addr_last - address_init); | |
4398 | + | |
4399 | + /* read that many bytes or size bytes, whichever is smaller: */ | |
4400 | + count_minus_one = TME_MIN(count_minus_one, | |
4401 | + (size - 1)); | |
4402 | + count = count_minus_one + 1; | |
4403 | + assert (count != 0); | |
4404 | + | |
4405 | + /* do the bus read: */ | |
4406 | + tme_memory_bus_read_buffer((tlb->tme_bus_tlb_emulator_off_read + address_init), buffer, count, tlb->tme_bus_tlb_rwlock, sizeof(tme_uint8_t), sizeof(tme_uint32_t)); | |
4407 | + | |
4408 | + /* unbusy this TLB entry: */ | |
4409 | + tme_bus_tlb_unbusy(tlb); | |
4410 | + } | |
4411 | + | |
4412 | + /* otherwise, we have to do a slow read: */ | |
4413 | + else { | |
4414 | + | |
4415 | + /* get the size of this bus cycle: */ | |
4416 | + count = (1 << TME_BUS32_LOG2); | |
4417 | + count -= (address_init & (count - 1)); | |
4418 | + count = TME_MIN(count, size); | |
4419 | + | |
4420 | + /* fill the cycle structure: */ | |
4421 | + cycle.tme_bus_cycle_type = TME_BUS_CYCLE_READ; | |
4422 | + cycle.tme_bus_cycle_size = count; | |
4423 | + cycle.tme_bus_cycle_buffer = (tme_uint8_t *) buffer; /* XXX this breaks const */ | |
4424 | + cycle.tme_bus_cycle_buffer_increment = 1; | |
4425 | + cycle.tme_bus_cycle_lane_routing | |
4426 | + = (bus_device->tme_bus_device_router | |
4427 | + + TME_BUS_ROUTER_INIT_INDEX(TME_BUS32_LOG2, count, address_init)); | |
4428 | + | |
4429 | + /* XXX this should come from a socket configuration: */ | |
4430 | + cycle.tme_bus_cycle_port = TME_BUS_CYCLE_PORT(0, TME_BUS32_LOG2); | |
4431 | + | |
4432 | + /* form the physical address for the bus cycle handler: */ | |
4433 | + address_resp = tlb->tme_bus_tlb_addr_offset + address_init; | |
4434 | + shift = tlb->tme_bus_tlb_addr_shift; | |
4435 | + if (shift < 0) { | |
4436 | + address_resp <<= (0 - shift); | |
4437 | + } | |
4438 | + else if (shift > 0) { | |
4439 | + address_resp >>= shift; | |
4440 | + } | |
4441 | + cycle.tme_bus_cycle_address = address_resp; | |
4442 | + | |
4443 | + /* unbusy this TLB entry: */ | |
4444 | + tme_bus_tlb_unbusy(tlb); | |
4445 | + | |
4446 | + /* unlock the device: */ | |
4447 | + (*bus_device->tme_bus_device_unlock)(bus_device, locks); | |
4448 | + | |
4449 | + /* run the bus cycle: */ | |
4450 | + err = (*tlb->tme_bus_tlb_cycle) | |
4451 | + (tlb->tme_bus_tlb_cycle_private, &cycle); | |
4452 | + | |
4453 | + /* if the TLB entry was invalidated before the read: */ | |
4454 | + if (err == EBADF | |
4455 | + && tme_bus_tlb_is_invalid(tlb)) { | |
4456 | + count = 0; | |
4457 | + } | |
4458 | + | |
4459 | + /* otherwise, any other error might be a bus error: */ | |
4460 | + else if (err != TME_OK) { | |
4461 | + err = tme_bus_tlb_fault(tlb, &cycle, err); | |
4462 | + assert (err != TME_OK); | |
4463 | + } | |
4464 | + | |
4465 | + /* lock the device: */ | |
4466 | + (*bus_device->tme_bus_device_lock)(bus_device, locks); | |
4467 | + } | |
4468 | + | |
4469 | + /* update the address, buffer, and size and continue: */ | |
4470 | + address_init += count; | |
4471 | + buffer += count; | |
4472 | + size -= count; | |
4473 | + } | |
4474 | + | |
4475 | + return (err); | |
4476 | +} | |
4477 | + | |
4478 | +/* the 32-bit bus master DMA write function: */ | |
4479 | +int | |
4480 | +tme_bus_device_dma_write_32(struct tme_bus_device *bus_device, | |
4481 | + tme_bus_addr_t address_init, | |
4482 | + tme_bus_addr_t size, | |
4483 | + const tme_uint8_t *buffer, | |
4484 | + unsigned int locks) | |
4485 | +{ | |
4486 | + struct tme_bus_tlb *tlb, tlb_local; | |
4487 | + struct tme_bus_connection *conn_bus; | |
4488 | + tme_bus_addr_t count_minus_one, count; | |
4489 | + struct tme_bus_cycle cycle; | |
4490 | + tme_bus_addr_t address_resp; | |
4491 | + int shift; | |
4492 | + int err; | |
4493 | + | |
4494 | + /* assume no error: */ | |
4495 | + err = TME_OK; | |
4496 | + | |
4497 | + /* loop while we have more bytes to write: */ | |
4498 | + for (; err == TME_OK && size > 0; ) { | |
4499 | + | |
4500 | + /* hash this address into a TLB entry: */ | |
4501 | + tlb = (*bus_device->tme_bus_device_tlb_hash) | |
4502 | + (bus_device, | |
4503 | + address_init, | |
4504 | + TME_BUS_CYCLE_WRITE); | |
4505 | + | |
4506 | + /* busy this TLB entry: */ | |
4507 | + tme_bus_tlb_busy(tlb); | |
4508 | + | |
4509 | + /* if this TLB entry is invalid, doesn't cover this address, or if it doesn't | |
4510 | + allow writing, reload it: */ | |
4511 | + if (tme_bus_tlb_is_invalid(tlb) | |
4512 | + || address_init < tlb->tme_bus_tlb_addr_first | |
4513 | + || address_init > tlb->tme_bus_tlb_addr_last | |
4514 | + || (tlb->tme_bus_tlb_emulator_off_write == TME_EMULATOR_OFF_UNDEF | |
4515 | + && !(tlb->tme_bus_tlb_cycles_ok & TME_BUS_CYCLE_WRITE))) { | |
4516 | + | |
4517 | + /* unbusy this TLB entry for filling: */ | |
4518 | + tme_bus_tlb_unbusy_fill(tlb); | |
4519 | + | |
4520 | + /* pass this TLB's token: */ | |
4521 | + tlb_local.tme_bus_tlb_token = tlb->tme_bus_tlb_token; | |
4522 | + | |
4523 | + /* get our bus connection: */ | |
4524 | + conn_bus = tme_memory_atomic_pointer_read(struct tme_bus_connection *, | |
4525 | + bus_device->tme_bus_device_connection, | |
4526 | + &bus_device->tme_bus_device_connection_rwlock); | |
4527 | + | |
4528 | + /* unlock the device: */ | |
4529 | + (*bus_device->tme_bus_device_unlock)(bus_device, locks); | |
4530 | + | |
4531 | + /* reload the TLB entry: */ | |
4532 | + err = (*conn_bus->tme_bus_tlb_fill) | |
4533 | + (conn_bus, | |
4534 | + &tlb_local, | |
4535 | + address_init, | |
4536 | + TME_BUS_CYCLE_WRITE); | |
4537 | + | |
4538 | + /* lock the device: */ | |
4539 | + (*bus_device->tme_bus_device_lock)(bus_device, locks); | |
4540 | + | |
4541 | + /* return if we couldn't fill the TLB entry: */ | |
4542 | + if (err != TME_OK) { | |
4543 | + return (err); | |
4544 | + } | |
4545 | + | |
4546 | + /* store the TLB entry: */ | |
4547 | + *tlb = tlb_local; | |
4548 | + | |
4549 | + /* loop to check the newly filled TLB entry: */ | |
4550 | + continue; | |
4551 | + } | |
4552 | + | |
4553 | + /* if this TLB entry allows fast writing: */ | |
4554 | + if (tlb->tme_bus_tlb_emulator_off_write != TME_EMULATOR_OFF_UNDEF) { | |
4555 | + | |
4556 | + /* see how many bytes we can fast write to this TLB entry, | |
4557 | + starting at this address: */ | |
4558 | + count_minus_one = (tlb->tme_bus_tlb_addr_last - address_init); | |
4559 | + | |
4560 | + /* write that many bytes or size bytes, whichever is smaller: */ | |
4561 | + count_minus_one = TME_MIN(count_minus_one, | |
4562 | + (size - 1)); | |
4563 | + count = count_minus_one + 1; | |
4564 | + assert (count != 0); | |
4565 | + | |
4566 | + /* do the bus write: */ | |
4567 | + tme_memory_bus_write_buffer((tlb->tme_bus_tlb_emulator_off_write + address_init), buffer, count, tlb->tme_bus_tlb_rwlock, sizeof(tme_uint8_t), sizeof(tme_uint32_t)); | |
4568 | + | |
4569 | + /* unbusy this TLB entry: */ | |
4570 | + tme_bus_tlb_unbusy(tlb); | |
4571 | + } | |
4572 | + | |
4573 | + /* otherwise, we have to do a slow write: */ | |
4574 | + else { | |
4575 | + | |
4576 | + /* get the size of this bus cycle: */ | |
4577 | + count = (1 << TME_BUS32_LOG2); | |
4578 | + count -= (address_init & (count - 1)); | |
4579 | + count = TME_MIN(count, size); | |
4580 | + | |
4581 | + /* fill the cycle structure: */ | |
4582 | + cycle.tme_bus_cycle_type = TME_BUS_CYCLE_WRITE; | |
4583 | + cycle.tme_bus_cycle_size = count; | |
4584 | + cycle.tme_bus_cycle_buffer = (tme_uint8_t *) buffer; /* XXX this breaks const */ | |
4585 | + cycle.tme_bus_cycle_buffer_increment = 1; | |
4586 | + cycle.tme_bus_cycle_lane_routing | |
4587 | + = (bus_device->tme_bus_device_router | |
4588 | + + TME_BUS_ROUTER_INIT_INDEX(TME_BUS32_LOG2, count, address_init)); | |
4589 | + | |
4590 | + /* XXX this should come from a socket configuration: */ | |
4591 | + cycle.tme_bus_cycle_port = TME_BUS_CYCLE_PORT(0, TME_BUS32_LOG2); | |
4592 | + | |
4593 | + /* form the physical address for the bus cycle handler: */ | |
4594 | + address_resp = tlb->tme_bus_tlb_addr_offset + address_init; | |
4595 | + shift = tlb->tme_bus_tlb_addr_shift; | |
4596 | + if (shift < 0) { | |
4597 | + address_resp <<= (0 - shift); | |
4598 | + } | |
4599 | + else if (shift > 0) { | |
4600 | + address_resp >>= shift; | |
4601 | + } | |
4602 | + cycle.tme_bus_cycle_address = address_resp; | |
4603 | + | |
4604 | + /* unbusy this TLB entry: */ | |
4605 | + tme_bus_tlb_unbusy(tlb); | |
4606 | + | |
4607 | + /* unlock the device: */ | |
4608 | + (*bus_device->tme_bus_device_unlock)(bus_device, locks); | |
4609 | + | |
4610 | + /* run the bus cycle: */ | |
4611 | + err = (*tlb->tme_bus_tlb_cycle) | |
4612 | + (tlb->tme_bus_tlb_cycle_private, &cycle); | |
4613 | + | |
4614 | + /* if the TLB entry was invalidated before the write: */ | |
4615 | + if (err == EBADF | |
4616 | + && tme_bus_tlb_is_invalid(tlb)) { | |
4617 | + count = 0; | |
4618 | + } | |
4619 | + | |
4620 | + /* otherwise, any other error might be a bus error: */ | |
4621 | + else if (err != TME_OK) { | |
4622 | + err = tme_bus_tlb_fault(tlb, &cycle, err); | |
4623 | + assert (err != TME_OK); | |
4624 | + } | |
4625 | + | |
4626 | + /* lock the device: */ | |
4627 | + (*bus_device->tme_bus_device_lock)(bus_device, locks); | |
4628 | + } | |
4629 | + | |
4630 | + /* update the address, buffer, and size and continue: */ | |
4631 | + address_init += count; | |
4632 | + buffer += count; | |
4633 | + size -= count; | |
4634 | + } | |
4635 | + | |
4636 | + return (err); | |
4637 | +} |
@@ -0,0 +1,665 @@ | ||
1 | +#! /bin/sh | |
2 | +# Generated from ../../generic/bus-device-auto.m4 by GNU Autoconf 2.69. | |
3 | +## -------------------- ## | |
4 | +## M4sh Initialization. ## | |
5 | +## -------------------- ## | |
6 | + | |
7 | +# Be more Bourne compatible | |
8 | +DUALCASE=1; export DUALCASE # for MKS sh | |
9 | +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : | |
10 | + emulate sh | |
11 | + NULLCMD=: | |
12 | + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which | |
13 | + # is contrary to our usage. Disable this feature. | |
14 | + alias -g '${1+"$@"}'='"$@"' | |
15 | + setopt NO_GLOB_SUBST | |
16 | +else | |
17 | + case `(set -o) 2>/dev/null` in #( | |
18 | + *posix*) : | |
19 | + set -o posix ;; #( | |
20 | + *) : | |
21 | + ;; | |
22 | +esac | |
23 | +fi | |
24 | + | |
25 | + | |
26 | +as_nl=' | |
27 | +' | |
28 | +export as_nl | |
29 | +# Printing a long string crashes Solaris 7 /usr/bin/printf. | |
30 | +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' | |
31 | +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo | |
32 | +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo | |
33 | +# Prefer a ksh shell builtin over an external printf program on Solaris, | |
34 | +# but without wasting forks for bash or zsh. | |
35 | +if test -z "$BASH_VERSION$ZSH_VERSION" \ | |
36 | + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then | |
37 | + as_echo='print -r --' | |
38 | + as_echo_n='print -rn --' | |
39 | +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then | |
40 | + as_echo='printf %s\n' | |
41 | + as_echo_n='printf %s' | |
42 | +else | |
43 | + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then | |
44 | + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' | |
45 | + as_echo_n='/usr/ucb/echo -n' | |
46 | + else | |
47 | + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' | |
48 | + as_echo_n_body='eval | |
49 | + arg=$1; | |
50 | + case $arg in #( | |
51 | + *"$as_nl"*) | |
52 | + expr "X$arg" : "X\\(.*\\)$as_nl"; | |
53 | + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; | |
54 | + esac; | |
55 | + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" | |
56 | + ' | |
57 | + export as_echo_n_body | |
58 | + as_echo_n='sh -c $as_echo_n_body as_echo' | |
59 | + fi | |
60 | + export as_echo_body | |
61 | + as_echo='sh -c $as_echo_body as_echo' | |
62 | +fi | |
63 | + | |
64 | +# The user is always right. | |
65 | +if test "${PATH_SEPARATOR+set}" != set; then | |
66 | + PATH_SEPARATOR=: | |
67 | + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { | |
68 | + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || | |
69 | + PATH_SEPARATOR=';' | |
70 | + } | |
71 | +fi | |
72 | + | |
73 | + | |
74 | +# IFS | |
75 | +# We need space, tab and new line, in precisely that order. Quoting is | |
76 | +# there to prevent editors from complaining about space-tab. | |
77 | +# (If _AS_PATH_WALK were called with IFS unset, it would disable word | |
78 | +# splitting by setting IFS to empty value.) | |
79 | +IFS=" "" $as_nl" | |
80 | + | |
81 | +# Find who we are. Look in the path if we contain no directory separator. | |
82 | +as_myself= | |
83 | +case $0 in #(( | |
84 | + *[\\/]* ) as_myself=$0 ;; | |
85 | + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR | |
86 | +for as_dir in $PATH | |
87 | +do | |
88 | + IFS=$as_save_IFS | |
89 | + test -z "$as_dir" && as_dir=. | |
90 | + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break | |
91 | + done | |
92 | +IFS=$as_save_IFS | |
93 | + | |
94 | + ;; | |
95 | +esac | |
96 | +# We did not find ourselves, most probably we were run as `sh COMMAND' | |
97 | +# in which case we are not to be found in the path. | |
98 | +if test "x$as_myself" = x; then | |
99 | + as_myself=$0 | |
100 | +fi | |
101 | +if test ! -f "$as_myself"; then | |
102 | + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 | |
103 | + exit 1 | |
104 | +fi | |
105 | + | |
106 | +# Unset variables that we do not need and which cause bugs (e.g. in | |
107 | +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" | |
108 | +# suppresses any "Segmentation fault" message there. '((' could | |
109 | +# trigger a bug in pdksh 5.2.14. | |
110 | +for as_var in BASH_ENV ENV MAIL MAILPATH | |
111 | +do eval test x\${$as_var+set} = xset \ | |
112 | + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : | |
113 | +done | |
114 | +PS1='$ ' | |
115 | +PS2='> ' | |
116 | +PS4='+ ' | |
117 | + | |
118 | +# NLS nuisances. | |
119 | +LC_ALL=C | |
120 | +export LC_ALL | |
121 | +LANGUAGE=C | |
122 | +export LANGUAGE | |
123 | + | |
124 | +# CDPATH. | |
125 | +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH | |
126 | + | |
127 | +if test "x$CONFIG_SHELL" = x; then | |
128 | + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : | |
129 | + emulate sh | |
130 | + NULLCMD=: | |
131 | + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which | |
132 | + # is contrary to our usage. Disable this feature. | |
133 | + alias -g '\${1+\"\$@\"}'='\"\$@\"' | |
134 | + setopt NO_GLOB_SUBST | |
135 | +else | |
136 | + case \`(set -o) 2>/dev/null\` in #( | |
137 | + *posix*) : | |
138 | + set -o posix ;; #( | |
139 | + *) : | |
140 | + ;; | |
141 | +esac | |
142 | +fi | |
143 | +" | |
144 | + as_required="as_fn_return () { (exit \$1); } | |
145 | +as_fn_success () { as_fn_return 0; } | |
146 | +as_fn_failure () { as_fn_return 1; } | |
147 | +as_fn_ret_success () { return 0; } | |
148 | +as_fn_ret_failure () { return 1; } | |
149 | + | |
150 | +exitcode=0 | |
151 | +as_fn_success || { exitcode=1; echo as_fn_success failed.; } | |
152 | +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } | |
153 | +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } | |
154 | +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } | |
155 | +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : | |
156 | + | |
157 | +else | |
158 | + exitcode=1; echo positional parameters were not saved. | |
159 | +fi | |
160 | +test x\$exitcode = x0 || exit 1 | |
161 | +test -x / || exit 1" | |
162 | + as_suggested="" | |
163 | + if (eval "$as_required") 2>/dev/null; then : | |
164 | + as_have_required=yes | |
165 | +else | |
166 | + as_have_required=no | |
167 | +fi | |
168 | + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : | |
169 | + | |
170 | +else | |
171 | + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR | |
172 | +as_found=false | |
173 | +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH | |
174 | +do | |
175 | + IFS=$as_save_IFS | |
176 | + test -z "$as_dir" && as_dir=. | |
177 | + as_found=: | |
178 | + case $as_dir in #( | |
179 | + /*) | |
180 | + for as_base in sh bash ksh sh5; do | |
181 | + # Try only shells that exist, to save several forks. | |
182 | + as_shell=$as_dir/$as_base | |
183 | + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && | |
184 | + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : | |
185 | + CONFIG_SHELL=$as_shell as_have_required=yes | |
186 | + break 2 | |
187 | +fi | |
188 | + done;; | |
189 | + esac | |
190 | + as_found=false | |
191 | +done | |
192 | +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && | |
193 | + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : | |
194 | + CONFIG_SHELL=$SHELL as_have_required=yes | |
195 | +fi; } | |
196 | +IFS=$as_save_IFS | |
197 | + | |
198 | + | |
199 | + if test "x$CONFIG_SHELL" != x; then : | |
200 | + export CONFIG_SHELL | |
201 | + # We cannot yet assume a decent shell, so we have to provide a | |
202 | +# neutralization value for shells without unset; and this also | |
203 | +# works around shells that cannot unset nonexistent variables. | |
204 | +# Preserve -v and -x to the replacement shell. | |
205 | +BASH_ENV=/dev/null | |
206 | +ENV=/dev/null | |
207 | +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV | |
208 | +case $- in # (((( | |
209 | + *v*x* | *x*v* ) as_opts=-vx ;; | |
210 | + *v* ) as_opts=-v ;; | |
211 | + *x* ) as_opts=-x ;; | |
212 | + * ) as_opts= ;; | |
213 | +esac | |
214 | +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} | |
215 | +# Admittedly, this is quite paranoid, since all the known shells bail | |
216 | +# out after a failed `exec'. | |
217 | +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 | |
218 | +exit 255 | |
219 | +fi | |
220 | + | |
221 | + if test x$as_have_required = xno; then : | |
222 | + $as_echo "$0: This script requires a shell more modern than all" | |
223 | + $as_echo "$0: the shells that I found on your system." | |
224 | + if test x${ZSH_VERSION+set} = xset ; then | |
225 | + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" | |
226 | + $as_echo "$0: be upgraded to zsh 4.3.4 or later." | |
227 | + else | |
228 | + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, | |
229 | +$0: including any error possibly output before this | |
230 | +$0: message. Then install a modern shell, or manually run | |
231 | +$0: the script under such a shell if you do have one." | |
232 | + fi | |
233 | + exit 1 | |
234 | +fi | |
235 | +fi | |
236 | +fi | |
237 | +SHELL=${CONFIG_SHELL-/bin/sh} | |
238 | +export SHELL | |
239 | +# Unset more variables known to interfere with behavior of common tools. | |
240 | +CLICOLOR_FORCE= GREP_OPTIONS= | |
241 | +unset CLICOLOR_FORCE GREP_OPTIONS | |
242 | + | |
243 | +## --------------------- ## | |
244 | +## M4sh Shell Functions. ## | |
245 | +## --------------------- ## | |
246 | +# as_fn_unset VAR | |
247 | +# --------------- | |
248 | +# Portably unset VAR. | |
249 | +as_fn_unset () | |
250 | +{ | |
251 | + { eval $1=; unset $1;} | |
252 | +} | |
253 | +as_unset=as_fn_unset | |
254 | +## -------------------- ## | |
255 | +## Main body of script. ## | |
256 | +## -------------------- ## | |
257 | + | |
258 | + | |
259 | +# $Id: bus-device-auto.sh,v 1.3 2009/08/29 17:52:04 fredette Exp $ | |
260 | + | |
261 | +# generic/bus-device-auto.sh - automatically generates C code for | |
262 | +# generic bus device support: | |
263 | + | |
264 | +# | |
265 | +# Copyright (c) 2004 Matt Fredette | |
266 | +# All rights reserved. | |
267 | +# | |
268 | +# Redistribution and use in source and binary forms, with or without | |
269 | +# modification, are permitted provided that the following conditions | |
270 | +# are met: | |
271 | +# 1. Redistributions of source code must retain the above copyright | |
272 | +# notice, this list of conditions and the following disclaimer. | |
273 | +# 2. Redistributions in binary form must reproduce the above copyright | |
274 | +# notice, this list of conditions and the following disclaimer in the | |
275 | +# documentation and/or other materials provided with the distribution. | |
276 | +# 3. All advertising materials mentioning features or use of this software | |
277 | +# must display the following acknowledgement: | |
278 | +# This product includes software developed by Matt Fredette. | |
279 | +# 4. The name of the author may not be used to endorse or promote products | |
280 | +# derived from this software without specific prior written permission. | |
281 | +# | |
282 | +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR | |
283 | +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | |
284 | +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |
285 | +# DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, | |
286 | +# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | |
287 | +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |
288 | +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |
289 | +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |
290 | +# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN | |
291 | +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |
292 | +# POSSIBILITY OF SUCH DAMAGE. | |
293 | +# | |
294 | + | |
295 | +header=false | |
296 | + | |
297 | +for option | |
298 | +do | |
299 | + case $option in | |
300 | + --header) header=true ;; | |
301 | + esac | |
302 | +done | |
303 | + | |
304 | +PROG=`basename $0` | |
305 | +cat <<EOF | |
306 | +/* automatically generated by $PROG, do not edit! */ | |
307 | +_TME_RCSID("\$Id: bus-device-auto.sh,v 1.3 2009/08/29 17:52:04 fredette Exp $"); | |
308 | +EOF | |
309 | + | |
310 | +if $header; then :; else | |
311 | + cat <<EOF | |
312 | + | |
313 | +/* this gives the number of entries that must be in a generic bus | |
314 | + router array for a device with a bus size of 8 * (2 ^ siz_lg2) | |
315 | + bits: */ | |
316 | +#define TME_BUS_ROUTER_INIT_SIZE(siz_lg2) \\ | |
317 | + TME_BUS_ROUTER_INIT_INDEX(siz_lg2, (1 << (siz_lg2)) + 1, 0) | |
318 | + | |
319 | +EOF | |
320 | +fi | |
321 | + | |
322 | +# permute over initiator bus port width: | |
323 | +# | |
324 | +i_width=8 | |
325 | +while test ${i_width} != 32; do | |
326 | + i_width=`expr ${i_width} \* 2` | |
327 | + | |
328 | + # permute over initiator endianness: | |
329 | + # | |
330 | + for endian in b l; do | |
331 | + if test ${endian} = b; then endian_what=big; else endian_what=little; fi | |
332 | + | |
333 | + # start the array: | |
334 | + # | |
335 | + $as_echo "" | |
336 | + $as_echo "/* the ${i_width}-bit ${endian_what}-endian bus master bus router: */" | |
337 | + what="const tme_bus_lane_t tme_bus_device_router_${i_width}e${endian}" | |
338 | + if $header; then | |
339 | + $as_echo "extern ${what}[];" | |
340 | + continue | |
341 | + fi | |
342 | + $as_echo "${what}[TME_BUS_ROUTER_INIT_SIZE(TME_BUS${i_width}_LOG2)] = {" | |
343 | + | |
344 | + # permute over initiator maximum cycle size: | |
345 | + # | |
346 | + i_size=0 | |
347 | + while test `expr ${i_size} \< ${i_width}` = 1; do | |
348 | + i_size=`expr ${i_size} + 8` | |
349 | + | |
350 | + # permute over initiator address offset: | |
351 | + # | |
352 | + i_offset=0 | |
353 | + while test `expr ${i_offset} \< ${i_width}` = 1; do | |
354 | + | |
355 | + # calculate the initiator least and greatest lanes: | |
356 | + # | |
357 | + placeholder=false | |
358 | + if test ${endian} = b; then | |
359 | + i_lane_greatest=`expr 0 - 8 + ${i_width} - ${i_offset}` | |
360 | + i_lane_least=`expr 8 + \( ${i_lane_greatest} \) - ${i_size}` | |
361 | + if test `expr \( ${i_lane_least} \) \< 0` = 1; then | |
362 | + placeholder=true | |
363 | + fi | |
364 | + else | |
365 | + i_lane_least=$i_offset | |
366 | + i_lane_greatest=`expr 0 - 8 + ${i_offset} + ${i_size}` | |
367 | + if test `expr \( ${i_lane_greatest} \) \>= ${i_width}` = 1; then | |
368 | + placeholder=true | |
369 | + fi | |
370 | + fi | |
371 | + | |
372 | + # permute over responder bus port width: | |
373 | + # | |
374 | + r_width=4 | |
375 | + while test `expr ${r_width} \< ${i_width}` = 1; do | |
376 | + r_width=`expr ${r_width} \* 2` | |
377 | + | |
378 | + # permute over responder bus port least lane: | |
379 | + # | |
380 | + r_lane_least=0 | |
381 | + while test `expr ${r_lane_least} \< ${i_width}` = 1; do | |
382 | + r_lane_greatest=`expr 0 - 8 + ${r_lane_least} + ${r_width}` | |
383 | + | |
384 | + # emit the initiator information: | |
385 | + # | |
386 | + $as_echo "" | |
387 | + $as_echo " /* initiator maximum cycle size: ${i_size} bits" | |
388 | + $as_echo " initiator address offset: ${i_offset} bits" | |
389 | + if $placeholder; then | |
390 | + $as_echo " (a ${i_width}-bit initiator cannot request ${i_size} bits at an ${i_offset}-bit offset - this is an array placeholder)" | |
391 | + fi | |
392 | + | |
393 | + # emit the responder information: | |
394 | + # | |
395 | + $as_echo " responder bus port size: ${r_width} bits" | |
396 | + $as_echo_n " responder port least lane: D"`expr ${r_lane_least} + 7`"-D${r_lane_least}" | |
397 | + | |
398 | + # if the responder bus port greatest lane is | |
399 | + # greater than the initiator bus port width, | |
400 | + # part of the responder's port is outside of | |
401 | + # the initiator's port: | |
402 | + # | |
403 | + if test `expr \( ${r_lane_greatest} \) \>= ${i_width}` = 1; then | |
404 | + $as_echo "" | |
405 | + $as_echo_n " (responder port not correctly positioned for this initiator)" | |
406 | + fi | |
407 | + $as_echo ": */" | |
408 | + | |
409 | + # permute over the lanes: | |
410 | + # | |
411 | + lane=0 | |
412 | + if test ${endian} = b; then | |
413 | + route=`expr ${i_size} / 8` | |
414 | + route_increment=-1 | |
415 | + else | |
416 | + route=-1 | |
417 | + route_increment=1 | |
418 | + fi | |
419 | + while test `expr ${lane} \< ${i_width}` = 1; do | |
420 | + $as_echo_n " /* D"`expr ${lane} + 7`"-D${lane} */ " | |
421 | + | |
422 | + # see if this lane is on in the responder: | |
423 | + # | |
424 | + if test `expr ${lane} \>= ${r_lane_least}` = 1 \ | |
425 | + && test `expr ${lane} \<= \( ${r_lane_greatest} \)` = 1; then | |
426 | + r_lane_on=true | |
427 | + else | |
428 | + r_lane_on=false | |
429 | + fi | |
430 | + | |
431 | + # see if this lane is on in the initiator: | |
432 | + # | |
433 | + if test `expr ${lane} \>= \( ${i_lane_least} \)` = 1 \ | |
434 | + && test `expr ${lane} \<= \( ${i_lane_greatest} \)` = 1; then | |
435 | + i_lane_on=true | |
436 | + route=`expr \( ${route} + ${route_increment} \)` | |
437 | + else | |
438 | + i_lane_on=false | |
439 | + fi | |
440 | + | |
441 | + # if this is a placeholder entry: | |
442 | + # | |
443 | + if $placeholder; then | |
444 | + $as_echo_n "TME_BUS_LANE_ABORT" | |
445 | + | |
446 | + # otherwise, this is a real entry: | |
447 | + # | |
448 | + else | |
449 | + if $i_lane_on; then | |
450 | + $as_echo_n "TME_BUS_LANE_ROUTE(${route})" | |
451 | + if $r_lane_on; then :; else | |
452 | + $as_echo_n " | TME_BUS_LANE_WARN" | |
453 | + fi | |
454 | + else | |
455 | + $as_echo_n "TME_BUS_LANE_UNDEF" | |
456 | + fi | |
457 | + fi | |
458 | + | |
459 | + $as_echo "," | |
460 | + lane=`expr ${lane} + 8` | |
461 | + done | |
462 | + | |
463 | + r_lane_least=`expr ${r_lane_least} + 8` | |
464 | + done | |
465 | + done | |
466 | + | |
467 | + i_offset=`expr ${i_offset} + 8` | |
468 | + done | |
469 | + done | |
470 | + | |
471 | + # finish the array: | |
472 | + # | |
473 | + $as_echo "};" | |
474 | + done | |
475 | + | |
476 | + # permute over read/write: | |
477 | + # | |
478 | + for name in read write; do | |
479 | + capname=`$as_echo $name | tr a-z A-Z` | |
480 | + if test $name = read; then | |
481 | + naming="reading" | |
482 | + from="from" | |
483 | + constbuffer="" | |
484 | + else | |
485 | + naming="writing" | |
486 | + from="to" | |
487 | + constbuffer="const " | |
488 | + fi | |
489 | + | |
490 | + $as_echo "" | |
491 | + $as_echo "/* the ${i_width}-bit bus master DMA ${name} function: */" | |
492 | + if $header; then | |
493 | + $as_echo "int tme_bus_device_dma_${name}_${i_width} _TME_P((struct tme_bus_device *," | |
494 | + $as_echo " tme_bus_addr_t," | |
495 | + $as_echo " tme_bus_addr_t," | |
496 | + $as_echo " ${constbuffer}tme_uint8_t *," | |
497 | + $as_echo " unsigned int));" | |
498 | + continue | |
499 | + fi | |
500 | + $as_echo "int" | |
501 | + $as_echo "tme_bus_device_dma_${name}_${i_width}(struct tme_bus_device *bus_device," | |
502 | + $as_echo " tme_bus_addr_t address_init," | |
503 | + $as_echo " tme_bus_addr_t size," | |
504 | + $as_echo " ${constbuffer}tme_uint8_t *buffer," | |
505 | + $as_echo " unsigned int locks)" | |
506 | + $as_echo "{" | |
507 | + $as_echo " struct tme_bus_tlb *tlb, tlb_local;" | |
508 | + $as_echo " struct tme_bus_connection *conn_bus;" | |
509 | + $as_echo " tme_bus_addr_t count_minus_one, count;" | |
510 | + $as_echo " struct tme_bus_cycle cycle;" | |
511 | + $as_echo " tme_bus_addr_t address_resp;" | |
512 | + $as_echo " int shift;" | |
513 | + $as_echo " int err;" | |
514 | + $as_echo "" | |
515 | + $as_echo " /* assume no error: */" | |
516 | + $as_echo " err = TME_OK;" | |
517 | + $as_echo "" | |
518 | + $as_echo " /* loop while we have more bytes to ${name}: */" | |
519 | + $as_echo " for (; err == TME_OK && size > 0; ) {" | |
520 | + $as_echo "" | |
521 | + $as_echo " /* hash this address into a TLB entry: */" | |
522 | + $as_echo " tlb = (*bus_device->tme_bus_device_tlb_hash)" | |
523 | + $as_echo " (bus_device," | |
524 | + $as_echo " address_init," | |
525 | + $as_echo " TME_BUS_CYCLE_${capname});" | |
526 | + $as_echo "" | |
527 | + $as_echo " /* busy this TLB entry: */" | |
528 | + $as_echo " tme_bus_tlb_busy(tlb);" | |
529 | + $as_echo "" | |
530 | + $as_echo " /* if this TLB entry is invalid, doesn't cover this address, or if it doesn't" | |
531 | + $as_echo " allow ${naming}, reload it: */" | |
532 | + $as_echo " if (tme_bus_tlb_is_invalid(tlb)" | |
533 | + $as_echo " || address_init < tlb->tme_bus_tlb_addr_first" | |
534 | + $as_echo " || address_init > tlb->tme_bus_tlb_addr_last" | |
535 | + $as_echo " || (tlb->tme_bus_tlb_emulator_off_${name} == TME_EMULATOR_OFF_UNDEF" | |
536 | + $as_echo " && !(tlb->tme_bus_tlb_cycles_ok & TME_BUS_CYCLE_${capname}))) {" | |
537 | + $as_echo "" | |
538 | + $as_echo " /* unbusy this TLB entry for filling: */" | |
539 | + $as_echo " tme_bus_tlb_unbusy_fill(tlb);" | |
540 | + $as_echo "" | |
541 | + $as_echo " /* pass this TLB's token: */" | |
542 | + $as_echo " tlb_local.tme_bus_tlb_token = tlb->tme_bus_tlb_token;" | |
543 | + $as_echo "" | |
544 | + $as_echo " /* get our bus connection: */" | |
545 | + $as_echo " conn_bus = tme_memory_atomic_pointer_read(struct tme_bus_connection *," | |
546 | + $as_echo " bus_device->tme_bus_device_connection," | |
547 | + $as_echo " &bus_device->tme_bus_device_connection_rwlock);" | |
548 | + $as_echo "" | |
549 | + $as_echo " /* unlock the device: */" | |
550 | + $as_echo " (*bus_device->tme_bus_device_unlock)(bus_device, locks);" | |
551 | + $as_echo "" | |
552 | + $as_echo " /* reload the TLB entry: */" | |
553 | + $as_echo " err = (*conn_bus->tme_bus_tlb_fill)" | |
554 | + $as_echo " (conn_bus," | |
555 | + $as_echo " &tlb_local," | |
556 | + $as_echo " address_init," | |
557 | + $as_echo " TME_BUS_CYCLE_${capname});" | |
558 | + $as_echo "" | |
559 | + $as_echo " /* lock the device: */" | |
560 | + $as_echo " (*bus_device->tme_bus_device_lock)(bus_device, locks);" | |
561 | + $as_echo "" | |
562 | + $as_echo " /* return if we couldn't fill the TLB entry: */" | |
563 | + $as_echo " if (err != TME_OK) {" | |
564 | + $as_echo " return (err);" | |
565 | + $as_echo " }" | |
566 | + $as_echo "" | |
567 | + $as_echo " /* store the TLB entry: */" | |
568 | + $as_echo " *tlb = tlb_local;" | |
569 | + $as_echo "" | |
570 | + $as_echo " /* loop to check the newly filled TLB entry: */" | |
571 | + $as_echo " continue;" | |
572 | + $as_echo " }" | |
573 | + $as_echo "" | |
574 | + $as_echo " /* if this TLB entry allows fast ${naming}: */" | |
575 | + $as_echo " if (tlb->tme_bus_tlb_emulator_off_${name} != TME_EMULATOR_OFF_UNDEF) {" | |
576 | + $as_echo "" | |
577 | + $as_echo " /* see how many bytes we can fast ${name} ${from} this TLB entry," | |
578 | + $as_echo " starting at this address: */" | |
579 | + $as_echo " count_minus_one = (tlb->tme_bus_tlb_addr_last - address_init);" | |
580 | + $as_echo "" | |
581 | + $as_echo " /* ${name} that many bytes or size bytes, whichever is smaller: */" | |
582 | + $as_echo " count_minus_one = TME_MIN(count_minus_one," | |
583 | + $as_echo " (size - 1));" | |
584 | + $as_echo " count = count_minus_one + 1;" | |
585 | + $as_echo " assert (count != 0);" | |
586 | + $as_echo "" | |
587 | + $as_echo " /* do the bus ${name}: */" | |
588 | + $as_echo " tme_memory_bus_${name}_buffer((tlb->tme_bus_tlb_emulator_off_${name} + address_init), buffer, count, tlb->tme_bus_tlb_rwlock, sizeof(tme_uint8_t), sizeof(tme_uint${i_width}_t));" | |
589 | + $as_echo "" | |
590 | + $as_echo " /* unbusy this TLB entry: */" | |
591 | + $as_echo " tme_bus_tlb_unbusy(tlb);" | |
592 | + $as_echo " }" | |
593 | + $as_echo "" | |
594 | + $as_echo " /* otherwise, we have to do a slow ${name}: */" | |
595 | + $as_echo " else {" | |
596 | + $as_echo "" | |
597 | + $as_echo " /* get the size of this bus cycle: */" | |
598 | + $as_echo " count = (1 << TME_BUS${i_width}_LOG2);" | |
599 | + $as_echo " count -= (address_init & (count - 1));" | |
600 | + $as_echo " count = TME_MIN(count, size);" | |
601 | + $as_echo "" | |
602 | + $as_echo " /* fill the cycle structure: */" | |
603 | + $as_echo " cycle.tme_bus_cycle_type = TME_BUS_CYCLE_${capname};" | |
604 | + $as_echo " cycle.tme_bus_cycle_size = count;" | |
605 | + $as_echo " cycle.tme_bus_cycle_buffer = (tme_uint8_t *) buffer; /* XXX this breaks const */" | |
606 | + $as_echo " cycle.tme_bus_cycle_buffer_increment = 1;" | |
607 | + $as_echo " cycle.tme_bus_cycle_lane_routing" | |
608 | + $as_echo " = (bus_device->tme_bus_device_router" | |
609 | + $as_echo " + TME_BUS_ROUTER_INIT_INDEX(TME_BUS${i_width}_LOG2, count, address_init));" | |
610 | + $as_echo "" | |
611 | + $as_echo " /* XXX this should come from a socket configuration: */" | |
612 | + $as_echo " cycle.tme_bus_cycle_port = TME_BUS_CYCLE_PORT(0, TME_BUS${i_width}_LOG2);" | |
613 | + $as_echo "" | |
614 | + $as_echo " /* form the physical address for the bus cycle handler: */" | |
615 | + $as_echo " address_resp = tlb->tme_bus_tlb_addr_offset + address_init;" | |
616 | + $as_echo " shift = tlb->tme_bus_tlb_addr_shift;" | |
617 | + $as_echo " if (shift < 0) {" | |
618 | + $as_echo " address_resp <<= (0 - shift);" | |
619 | + $as_echo " }" | |
620 | + $as_echo " else if (shift > 0) {" | |
621 | + $as_echo " address_resp >>= shift;" | |
622 | + $as_echo " }" | |
623 | + $as_echo " cycle.tme_bus_cycle_address = address_resp;" | |
624 | + $as_echo "" | |
625 | + $as_echo " /* unbusy this TLB entry: */" | |
626 | + $as_echo " tme_bus_tlb_unbusy(tlb);" | |
627 | + $as_echo "" | |
628 | + $as_echo " /* unlock the device: */" | |
629 | + $as_echo " (*bus_device->tme_bus_device_unlock)(bus_device, locks);" | |
630 | + $as_echo "" | |
631 | + $as_echo " /* run the bus cycle: */" | |
632 | + $as_echo " err = (*tlb->tme_bus_tlb_cycle)" | |
633 | + $as_echo " (tlb->tme_bus_tlb_cycle_private, &cycle);" | |
634 | + $as_echo "" | |
635 | + $as_echo " /* if the TLB entry was invalidated before the ${name}: */" | |
636 | + $as_echo " if (err == EBADF" | |
637 | + $as_echo " && tme_bus_tlb_is_invalid(tlb)) {" | |
638 | + $as_echo " count = 0;" | |
639 | + $as_echo " }" | |
640 | + $as_echo "" | |
641 | + $as_echo " /* otherwise, any other error might be a bus error: */" | |
642 | + $as_echo " else if (err != TME_OK) {" | |
643 | + $as_echo " err = tme_bus_tlb_fault(tlb, &cycle, err);" | |
644 | + $as_echo " assert (err != TME_OK);" | |
645 | + $as_echo " }" | |
646 | + $as_echo "" | |
647 | + $as_echo " /* lock the device: */" | |
648 | + $as_echo " (*bus_device->tme_bus_device_lock)(bus_device, locks);" | |
649 | + $as_echo " }" | |
650 | + $as_echo "" | |
651 | + $as_echo " /* update the address, buffer, and size and continue: */" | |
652 | + $as_echo " address_init += count;" | |
653 | + $as_echo " buffer += count;" | |
654 | + $as_echo " size -= count;" | |
655 | + $as_echo " }" | |
656 | + $as_echo "" | |
657 | + $as_echo " return (err);" | |
658 | + $as_echo "}" | |
659 | + done | |
660 | + | |
661 | +done | |
662 | + | |
663 | +# done: | |
664 | +# | |
665 | +exit 0 |
@@ -0,0 +1,49709 @@ | ||
1 | +/* automatically generated by fb-xlat-auto.sh, do not edit! */ | |
2 | + | |
3 | +/* | |
4 | + * Copyright (c) 2003, 2005 Matt Fredette | |
5 | + * All rights reserved. | |
6 | + * | |
7 | + * Redistribution and use in source and binary forms, with or without | |
8 | + * modification, are permitted provided that the following conditions | |
9 | + * are met: | |
10 | + * 1. Redistributions of source code must retain the above copyright | |
11 | + * notice, this list of conditions and the following disclaimer. | |
12 | + * 2. Redistributions in binary form must reproduce the above copyright | |
13 | + * notice, this list of conditions and the following disclaimer in the | |
14 | + * documentation and/or other materials provided with the distribution. | |
15 | + * 3. All advertising materials mentioning features or use of this software | |
16 | + * must display the following acknowledgement: | |
17 | + * This product includes software developed by Matt Fredette. | |
18 | + * 4. The name of the author may not be used to endorse or promote products | |
19 | + * derived from this software without specific prior written permission. | |
20 | + * | |
21 | + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR | |
22 | + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | |
23 | + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |
24 | + * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, | |
25 | + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | |
26 | + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |
27 | + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |
28 | + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |
29 | + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN | |
30 | + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |
31 | + * POSSIBILITY OF SUCH DAMAGE. | |
32 | + */ | |
33 | + | |
34 | +_TME_RCSID("$Id: fb-xlat-auto.sh,v 1.12 2009/08/30 21:51:53 fredette Exp $"); | |
35 | + | |
36 | +/* the central feature of these translation functions is the "bit | |
37 | + FIFO", a first-in, first-out stream of bits. source bit FIFOs are | |
38 | + used to read pixel bits out of source images, and destination bit | |
39 | + FIFOs are used to write pixel bits into destination images. | |
40 | + | |
41 | + a bit FIFO has a visible part and an invisible part. | |
42 | + | |
43 | + the visible part of a bit FIFO is 32 bits wide, meaning the | |
44 | + translation code can read (for a source bit FIFO) or write (for a | |
45 | + destination bit FIFO) up to 32 bits of pixel data before a bit | |
46 | + FIFO shift. | |
47 | + | |
48 | + the invisible part of a source bit FIFO contains pixel bits that | |
49 | + have already been read from the source image memory, but that have | |
50 | + yet to be shifted in to the visible part. | |
51 | + | |
52 | + the invisible part of a destination bit FIFO contains the pixel | |
53 | + bits that have been shifted out of the visible part, but that have | |
54 | + yet to be written to the destination image memory. | |
55 | + | |
56 | + depending on various attributes of an image format, it may be | |
57 | + possible for the translation code to always read or write the | |
58 | + entire 32 visible bits of a bit FIFO at a time, and as a result | |
59 | + always shift the bit FIFO 32 bits at a time. this is desirable | |
60 | + because it minimizes bit FIFO shifts. | |
61 | + | |
62 | + when this does happen, it may also be the case that the visible | |
63 | + part of the bit FIFO always perfectly corresponds to an aligned | |
64 | + 32-bit word in the image buffer. | |
65 | + | |
66 | + this is the optimal situation, as it makes it unnecessary to track | |
67 | + the invisible part in C local variables at all - each 32-bit FIFO | |
68 | + shift of a source bit FIFO just reads the next 32-bit word directly | |
69 | + into the visible part, and each 32-bit FIFO shift of a destination | |
70 | + bit FIFO just writes the next 32-bit word directly out of the | |
71 | + visible part. | |
72 | + | |
73 | + within the visible part of a bit FIFO, which bits belong to which | |
74 | + pixels depends on the "order" of the image format. most-significant | |
75 | + (big-endian) images have earlier (more to the left on the screen) | |
76 | + pixels in more-significant bit positions. least-significant | |
77 | + (little-endian) images have earlier pixels in less-significant bit | |
78 | + bit positions. | |
79 | + | |
80 | + bit significance *within* a pixel never depends on image order. | |
81 | + once the bits belonging to a pixel have been identified according | |
82 | + to image order, the least significant bit in that pixel's value is | |
83 | + always the bit with the least absolute value. | |
84 | + | |
85 | + some pictures may help explain this better. each picture shows the | |
86 | + 32 bit visible part of a bit FIFO, with the bits marked from 0 | |
87 | + (least significant) to 31 (most significant). all of these | |
88 | + examples are for a two-bit-deep/two-bits-per-pixel image, and in | |
89 | + the visible part sixteen pixels are numbered. lesser numbered | |
90 | + pixels are earlier (more to the left on the screen). some of the | |
91 | + invisible part is also shown, along with the direction that the bit | |
92 | + FIFO shifts in: | |
93 | + | |
94 | + a source bit FIFO for a little-endian source image with two bits | |
95 | + per pixel looks like: | |
96 | + | |
97 | + | | |
98 | + | 31 30 29 28 7 6 5 4 3 2 1 0 | |
99 | + --+--+--+--+--+--+|+--+--+--+--+- --+--+--+--+--+--+--+--+ | |
100 | + .. p18 | p17 | p16 ||| p15 | p14 | .. p3 | p2 | p1 | p0 | | |
101 | + --+--+--+--+--+--+|+--+--+--+--+- --+--+--+--+--+--+--+--+ | |
102 | + | | |
103 | + invisible part | visible part | |
104 | + | |
105 | + shift -> shift -> shift -> shift -> shift -> | |
106 | + | |
107 | + a source bit FIFO for a big-endian source image with two bits per | |
108 | + pixel looks like: | |
109 | + | |
110 | + | | |
111 | + 31 30 29 28 27 26 25 26 4 3 2 1 0 | | |
112 | + +--+--+--+--+--+--+--+-- -+--+--+--+--+|+--+--+--+--+--+-- | |
113 | + | p0 | p1 | p2 | p3 .. | p14 | p15 ||| p16 | p17 | p18 .. | |
114 | + +--+--+--+--+--+--+--+-- -+--+--+--+--+|+--+--+--+--+--+-- | |
115 | + | | |
116 | + visible part | invisible part | |
117 | + | |
118 | + <- shift <- shift <- shift <- shift <- shift | |
119 | + | |
120 | + a destination bit FIFO for a little-endian destination image with | |
121 | + two bits per pixel looks like: | |
122 | + | |
123 | + | | |
124 | + 31 30 29 28 27 26 25 26 4 3 2 1 0 | | |
125 | + +--+--+--+--+--+--+--+-- -+--+--+--+--+|+--+--+--+--+--+-- | |
126 | + | p23 | p22 | p21 | p20 .. | p9 | p8 ||| p7 | p6 | p5 .. | |
127 | + +--+--+--+--+--+--+--+-- -+--+--+--+--+|+--+--+--+--+--+-- | |
128 | + | | |
129 | + visible part | invisible part | |
130 | + | |
131 | + shift -> shift -> shift -> shift -> shift -> | |
132 | + | |
133 | + a destination bit FIFO for a big-endian destination image with | |
134 | + two bits per pixel looks like: | |
135 | + | |
136 | + | | |
137 | + | 31 30 29 28 7 6 5 4 3 2 1 0 | |
138 | + --+--+--+--+--+--+|+--+--+--+--+- --+--+--+--+--+--+--+--+ | |
139 | + .. p5 | p6 | p7 ||| p8 | p9 | .. p20 | p21 | p22 | p23 | | |
140 | + --+--+--+--+--+--+|+--+--+--+--+- --+--+--+--+--+--+--+--+ | |
141 | + | | |
142 | + invisible part | visible part | |
143 | + | |
144 | + <- shift <- shift <- shift <- shift <- shift | |
145 | + | |
146 | + each translation function has at least one source bit FIFO and at | |
147 | + least one destination bit FIFO. the general idea is to read source | |
148 | + pixel value(s) from the source image, map those source pixel | |
149 | + value(s) somehow into destination pixel value(s), and write those | |
150 | + destination pixel value(s) to the destination image. | |
151 | + | |
152 | + translation functions that do not scale the image have exactly one | |
153 | + source bit FIFO and exactly one destination bit FIFO. one pixel | |
154 | + read from the source bit FIFO becomes one pixel written to the | |
155 | + destination bit FIFO. | |
156 | + | |
157 | + translation functions that halve the image size have two source bit | |
158 | + FIFOs and one destination bit FIFO. one source bit FIFO sources | |
159 | + bits from an even-numbered scanline, and the other sources bits from | |
160 | + an odd-numbered scanline. four pixels read from the source bit | |
161 | + FIFOs - two from each source bit FIFO, making a 2x2 square - become | |
162 | + one pixel written to the destination bit FIFO. | |
163 | + | |
164 | + translation functions that double the image size have one source | |
165 | + bit FIFO and two destination bit FIFOs. one destination bit FIFO | |
166 | + sinks bits for an even-numbered scanline, and the other sinks bits | |
167 | + for an odd-numbered scanline. one pixel read from the source bit | |
168 | + FIFO becomes four pixels written to the destination bit FIFOs - | |
169 | + two to each destination bit FIFO, making a 2x2 square. | |
170 | + | |
171 | + translation functions don't necessarily always translate the entire | |
172 | + source image into the entire destination image. instead, the buffer | |
173 | + holding the current source image is expected to be twice as large as | |
174 | + necessary (plus some overhead), with the second half of the buffer | |
175 | + holding a copy of the last translated ("old") source image. | |
176 | + | |
177 | + before setting up and translating pixels using bit FIFOs, a | |
178 | + translation function treats the the current and old source images as | |
179 | + an array of aligned 32-bit words and compares them. if it finds no | |
180 | + 32-bit word that has changed, no translation is done and the | |
181 | + function returns. | |
182 | + | |
183 | + otherwise, initial source pixel x and y coordinates are derived from | |
184 | + the offset of the 32-bit word that failed comparison, and the source | |
185 | + primary bit FIFO is primed. if this translation function halves the | |
186 | + image size, the source secondary bit FIFO is primed from the same x | |
187 | + coordinate on the "other" (think y ^ 1) scanline. | |
188 | + | |
189 | + then, initial destination pixel x and y coordinates are derived from | |
190 | + the initial source x and y coordinates, and the destination primary | |
191 | + bit FIFO is primed. if this translation function doubles the image | |
192 | + size, the destination secondary bit FIFO is primed from the same x | |
193 | + coordinate on the "other" (think y ^ 1) scanline. | |
194 | + | |
195 | + as mentioned previously, the buffer holding the current source image | |
196 | + is expected to be twice as large as necessary (plus some overhead), | |
197 | + with the second half of the buffer holding a copy of the last | |
198 | + translated ("old") source image. | |
199 | + | |
200 | + this "overhead" is approximately two extra scanlines worth of data, | |
201 | + that is initialized to all-bits-zero and must always remain zero. | |
202 | + this extra data is present at the end of both the current ("new") | |
203 | + and last translated ("old") source images. | |
204 | + | |
205 | + these extra, always-blank scanlines guarantee that the pixel | |
206 | + translation loop terminates. the pixel translation loop *never* | |
207 | + checks for the end of the image buffer. instead, it terminates only | |
208 | + after it has read in TME_FB_XLAT_RUN consecutive aligned 32-bit | |
209 | + words that have *not* changed between the new and old source images. | |
210 | + this small amount of extra memory overhead simplifies the pixel | |
211 | + translation loop, because it doesn't have to worry about going past | |
212 | + the end of the actual image. | |
213 | +*/ | |
214 | + | |
215 | + | |
216 | +/* macros: */ | |
217 | + | |
218 | +/* given a 32-bit aligned pointer into the current source image, this | |
219 | + returns the corresponding 32-bit aligned pointer in the last | |
220 | + translated ("old") source image. since the old source image | |
221 | + follows the current source image, this is simple pointer arithmetic | |
222 | + using src_bypb: */ | |
223 | +#define TME_FB_XLAT_SRC_OLD(raw) \ | |
224 | + ((tme_uint32_t *) (((tme_uint8_t *) (raw)) + src_bypb)) | |
225 | + | |
226 | +/* when the fast, aligned 32-bit word comparison loop finds a word | |
227 | + that has changed in the source image, pixels are translated until | |
228 | + TME_FB_XLAT_RUN consecutive aligned 32-bit words are processed that | |
229 | + have *not* changed in the source image, at which point the fast | |
230 | + comparison loop resumes. | |
231 | + | |
232 | + the idea is that after you've started translating pixels, once the | |
233 | + FIFO shift operation has read TME_FB_XLAT_RUN consecutive raw, | |
234 | + unchanged 32-bit words, all of the pixels from previous, changed | |
235 | + 32-bit words have been translated and shifted out of the source bit | |
236 | + FIFO(s), and all bits remaining in the source bit FIFO(s) are for | |
237 | + pixels in those unchanged 32-bit words. since the pixels are | |
238 | + unchanged, pixel translation can stop, and the entire state of the | |
239 | + source bit FIFO(s) can be discarded. | |
240 | + | |
241 | + so, each time a raw, changed 32-bit word is read, xlat_run is | |
242 | + reloaded with TME_FB_XLAT_RUN, and each time 32 bits worth of | |
243 | + source image pixels are processed, it is decremented. when it | |
244 | + reaches zero, the source bit FIFO(s) are discarded, the destination | |
245 | + bit FIFO(s) are flushed, the pixel translation loop breaks and the | |
246 | + fast comparison loop continues: */ | |
247 | +#define TME_FB_XLAT_RUN (2) | |
248 | + | |
249 | +/* this shifts a source FIFO: */ | |
250 | +#define TME_FB_XLAT_SHIFT_SRC(unaligned, fifo, next, bits, shift, raw, order)\ | |
251 | +do { \ | |
252 | + \ | |
253 | + /* if the source FIFO may not be 32-bit aligned: */ \ | |
254 | + if (unaligned) { \ | |
255 | + \ | |
256 | + /* we must be shifting between 1 and 32 bits: */ \ | |
257 | + assert ((shift) >= 1 && (shift) <= 32); \ | |
258 | + \ | |
259 | + /* the FIFO must have more than 32 bits in it already: */ \ | |
260 | + assert (bits > 32); \ | |
261 | + \ | |
262 | + /* shift the FIFO: */ \ | |
263 | + if ((shift) == 32) { \ | |
264 | + fifo = next; \ | |
265 | + } \ | |
266 | + else if (order == TME_ENDIAN_BIG) { \ | |
267 | + fifo = (fifo << ((shift) & 31)) | (next >> (32 - (shift)));\ | |
268 | + next <<= ((shift) & 31); \ | |
269 | + } \ | |
270 | + else { \ | |
271 | + fifo = (fifo >> ((shift) & 31)) | (next << (32 - (shift)));\ | |
272 | + next >>= ((shift) & 31); \ | |
273 | + } \ | |
274 | + bits -= (shift); \ | |
275 | + \ | |
276 | + /* if we have a new 32-bit word to read: */ \ | |
277 | + if (bits <= 32) { \ | |
278 | + next = *raw; \ | |
279 | + if (*TME_FB_XLAT_SRC_OLD(raw) != next) { \ | |
280 | + *TME_FB_XLAT_SRC_OLD(raw) = next; \ | |
281 | + xlat_run = TME_FB_XLAT_RUN; \ | |
282 | + } \ | |
283 | + raw++; \ | |
284 | + next = (order == TME_ENDIAN_BIG \ | |
285 | + ? tme_betoh_u32(next) \ | |
286 | + : tme_letoh_u32(next)); \ | |
287 | + \ | |
288 | + /* before the load, if there were fewer than 32 bits \ | |
289 | + remaining in the FIFO, shift bits from the word \ | |
290 | + we just loaded into their proper positions: */ \ | |
291 | + if (bits < 32) { \ | |
292 | + if (order == TME_ENDIAN_BIG) { \ | |
293 | + fifo |= (next >> bits); \ | |
294 | + next <<= (32 - bits); \ | |
295 | + } \ | |
296 | + else { \ | |
297 | + fifo |= (next << bits); \ | |
298 | + next >>= (32 - bits); \ | |
299 | + } \ | |
300 | + } \ | |
301 | + \ | |
302 | + /* there are now 32 more bits in the FIFO: */ \ | |
303 | + bits += 32; \ | |
304 | + } \ | |
305 | + } \ | |
306 | + \ | |
307 | + /* otherwise, if the source FIFO is always 32-bit aligned: */ \ | |
308 | + else { \ | |
309 | + \ | |
310 | + /* we must be shifting exactly 32 bits: */ \ | |
311 | + assert((shift) == 32); \ | |
312 | + \ | |
313 | + /* load the next 32-bit word: */ \ | |
314 | + fifo = *raw; \ | |
315 | + if (*TME_FB_XLAT_SRC_OLD(raw) != fifo) { \ | |
316 | + *TME_FB_XLAT_SRC_OLD(raw) = fifo; \ | |
317 | + xlat_run = TME_FB_XLAT_RUN; \ | |
318 | + } \ | |
319 | + raw++; \ | |
320 | + fifo = (order == TME_ENDIAN_BIG \ | |
321 | + ? tme_betoh_u32(fifo) \ | |
322 | + : tme_letoh_u32(fifo)); \ | |
323 | + } \ | |
324 | +} while (/* CONSTCOND */ 0) | |
325 | + | |
326 | +/* this shifts a destination FIFO: */ | |
327 | +#define TME_FB_XLAT_SHIFT_DST(unaligned, fifo, next, bits, shift, raw, order)\ | |
328 | +do { \ | |
329 | + \ | |
330 | + /* if the destination FIFO may not be 32-bit aligned: */ \ | |
331 | + if (unaligned) { \ | |
332 | + \ | |
333 | + /* we must be shifting between 1 and 32 bits: */ \ | |
334 | + assert ((shift) >= 1 && (shift) <= 32); \ | |
335 | + \ | |
336 | + /* the FIFO must have fewer than 32 bits in it: */ \ | |
337 | + assert (bits < 32); \ | |
338 | + \ | |
339 | + /* shift the FIFO: */ \ | |
340 | + if (order == TME_ENDIAN_BIG) { \ | |
341 | + next |= (fifo >> bits); \ | |
342 | + fifo <<= (32 - bits); \ | |
343 | + } \ | |
344 | + else { \ | |
345 | + next |= (fifo << bits); \ | |
346 | + fifo >>= (32 - bits); \ | |
347 | + } \ | |
348 | + if (SHIFTMAX_INT32_T < 32 && bits == 0) { \ | |
349 | + fifo = 0; \ | |
350 | + } \ | |
351 | + bits += (shift); \ | |
352 | + \ | |
353 | + /* if we have a completed 32-bit word to write: */ \ | |
354 | + if (bits >= 32) { \ | |
355 | + *(raw++) = (order == TME_ENDIAN_BIG \ | |
356 | + ? tme_htobe_u32(next) \ | |
357 | + : tme_htole_u32(next)); \ | |
358 | + bits -= 32; \ | |
359 | + assert(bits != 0 || fifo == 0); \ | |
360 | + next = fifo; \ | |
361 | + } \ | |
362 | + } \ | |
363 | + \ | |
364 | + /* the destination FIFO is always 32-bit aligned: */ \ | |
365 | + else { \ | |
366 | + \ | |
367 | + /* we must be shifting exactly 32 bits: */ \ | |
368 | + assert((shift) == 32); \ | |
369 | + \ | |
370 | + /* store the next 32-bit word: */ \ | |
371 | + *(raw++) = (order == TME_ENDIAN_BIG \ | |
372 | + ? tme_htobe_u32(fifo) \ | |
373 | + : tme_htole_u32(fifo)); \ | |
374 | + \ | |
375 | + } \ | |
376 | + \ | |
377 | + /* clear the writable part of the FIFO: */ \ | |
378 | + fifo = 0; \ | |
379 | +} while (/* CONSTCOND */ 0) | |
380 | + | |
381 | +/* _TME_FB_XLAT_MAP_LINEAR_SCALE gives the factor needed to scale a | |
382 | + masked value up or down to a given size in bits. for example, if a | |
383 | + value's mask is 0xf800 (a five bit mask), and the value needs to be | |
384 | + scaled up to seven bits, this gives an factor of four. if a | |
385 | + value's mask is 0x7e0 (a six bit mask), and the value needs to be | |
386 | + scaled down to three bits, this gives a factor of eight: */ | |
387 | +#define _TME_FB_XLAT_MAP_LINEAR_SCALE(mask_in, mask_out) \ | |
388 | + (TME_FB_XLAT_MAP_BASE_MASK(mask_in) \ | |
389 | + ^ TME_FB_XLAT_MAP_BASE_MASK(mask_out)) | |
390 | +#define TME_FB_XLAT_MAP_LINEAR_SCALE(mask_in, mask_out) \ | |
391 | + (_TME_FB_XLAT_MAP_LINEAR_SCALE(mask_in, mask_out) \ | |
392 | + ? (TME_FB_XLAT_MAP_BASE_MASK(_TME_FB_XLAT_MAP_LINEAR_SCALE(mask_in, mask_out))\ | |
393 | + + 1) \ | |
394 | + : 1) | |
395 | + | |
396 | +/* this linearly maps a value from one mask to another: */ | |
397 | +#define _TME_FB_XLAT_MAP_LINEAR(value, mask_in, mask_out) \ | |
398 | + \ | |
399 | + /* if the value does not need to be scaled up: */ \ | |
400 | + (((TME_FB_XLAT_MAP_BASE_MASK(mask_out) \ | |
401 | + <= TME_FB_XLAT_MAP_BASE_MASK(mask_in)) \ | |
402 | + ? \ | |
403 | + \ | |
404 | + /* extract the value and scale it down: */ \ | |
405 | + (TME_FIELD_MASK_EXTRACTU(value, mask_in) \ | |
406 | + / TME_FB_XLAT_MAP_LINEAR_SCALE(mask_in, mask_out)) \ | |
407 | + \ | |
408 | + /* otherwise, the value needs to be scaled up: */ \ | |
409 | + : \ | |
410 | + \ | |
411 | + /* extract the value: */ \ | |
412 | + ((TME_FIELD_MASK_EXTRACTU(value, mask_in) \ | |
413 | + \ | |
414 | + /* scale it up: */ \ | |
415 | + * TME_FB_XLAT_MAP_LINEAR_SCALE(mask_in, mask_out)) \ | |
416 | + \ | |
417 | + /* if the least significant bit of the value is set, add \ | |
418 | + in the scale minus one. this makes the linear mapping \ | |
419 | + at least cover the entire range: */ \ | |
420 | + + (((value / \ | |
421 | + _TME_FIELD_MASK_FACTOR(mask_in)) \ | |
422 | + & 1) \ | |
423 | + * (TME_FB_XLAT_MAP_LINEAR_SCALE(mask_in, mask_out) \ | |
424 | + - 1)))) \ | |
425 | + \ | |
426 | + /* finally, shift the value into position: */ \ | |
427 | + * _TME_FIELD_MASK_FACTOR(mask_out)) | |
428 | + | |
429 | +/* this indexes a value: */ | |
430 | +#define _TME_FB_XLAT_MAP_INDEX(value, mask_out, index) \ | |
431 | + \ | |
432 | + /* intensities are either stored as 8 or 16 bits: */ \ | |
433 | + (((TME_FB_XLAT_MAP_BASE_MASK(mask_out) <= 0xff) \ | |
434 | + ? ((const tme_uint8_t *) (index))[(value)] \ | |
435 | + : ((const tme_uint16_t *) (index))[(value)]) \ | |
436 | + \ | |
437 | + /* shift the value into position: */ \ | |
438 | + * _TME_FIELD_MASK_FACTOR(mask_out)) | |
439 | + | |
440 | +/* this maps one subfield or intensity value into another subfield or | |
441 | + intensity value: */ | |
442 | +#define TME_FB_XLAT_MAP(value, mask_in, mask_out, indexed, index)\ | |
443 | + \ | |
444 | + /* do the linear mapping or the index mapping: */ \ | |
445 | + ((!(indexed)) \ | |
446 | + ? _TME_FB_XLAT_MAP_LINEAR(value, mask_in, mask_out) \ | |
447 | + : _TME_FB_XLAT_MAP_INDEX(TME_FIELD_MASK_EXTRACTU(value, mask_in), mask_out, index)) | |
448 | + | |
449 | +/* this translates frame buffer contents from this source format: | |
450 | + 1152x900 | |
451 | + 1 bit deep, 1 bit per pixel, 0 pixels skipped, 32-bit scanline padding, MSB-first, color, index mapped pixels, 8 bits per mapped intensity, no g mask, no r mask, no b mask | |
452 | + to this destination format: | |
453 | + 24 bits deep, 32 bits per pixel, 0 pixels skipped, 32-bit scanline padding, LSB-first, linearly mapped pixels, a g mask of 0xff00, a r mask of 0xff0000, a b mask of 0xff | |
454 | +*/ | |
455 | +static int | |
456 | +tme_fb_xlat0(struct tme_fb_connection *src, | |
457 | + struct tme_fb_connection *dst) | |
458 | +{ | |
459 | + | |
460 | + /* whenever possible we define macros instead of declaring | |
461 | + variables, for optimization: */ | |
462 | + | |
463 | + /* declare src_x and src_y. these are the current translation | |
464 | + coordinates in the source image: */ | |
465 | + unsigned int src_x, src_y; | |
466 | + | |
467 | + /* declare dst_x and dst_y. these are the current translation | |
468 | + coordinates in the destination image. since this function | |
469 | + does not scale the image, these coordinates are always | |
470 | + the same as the coordinates in the source image: */ | |
471 | +#define dst_x (src_x) | |
472 | +#define dst_y (src_y) | |
473 | + | |
474 | + /* declare pixel. this holds a single pixel value being translated | |
475 | + for the destination image: */ | |
476 | + tme_uint32_t pixel; | |
477 | + | |
478 | + /* declare src_width and dst_width. these are in terms of pixels: */ | |
479 | +#define src_width (1152) | |
480 | +#define dst_width (src_width) | |
481 | + | |
482 | + /* declare src_depth, the source pixel depth, which is in | |
483 | + terms of bits. declare src_mask, which is the corresponding | |
484 | + mask of one bits: */ | |
485 | +#define src_depth (1) | |
486 | +#define src_mask (0xffffffff >> (32 - src_depth)) | |
487 | + | |
488 | + /* declare src_bipp and dst_bipp. these are the bits-per-pixel | |
489 | + values for the source and destination images: */ | |
490 | +#define src_bipp (1) | |
491 | +#define dst_bipp (32) | |
492 | + | |
493 | + /* declare src_skipx and dst_skipx. these are the counts of | |
494 | + undisplayed pixels at the beginning of each scanline in the | |
495 | + source and destination images: */ | |
496 | +#define src_skipx (0) | |
497 | +#define dst_skipx (0) | |
498 | + | |
499 | + /* declare src_pad and dst_pad. these are the paddings, in bits, | |
500 | + of each scanline in the source and destination images: */ | |
501 | +#define src_pad (32) | |
502 | +#define dst_pad (32) | |
503 | + | |
504 | + /* declare src_order and dst_order. these are the bit and byte | |
505 | + orders (either TME_ENDIAN_BIG or TME_ENDIAN_LITTLE) of the | |
506 | + source and destination images. since these values profoundly | |
507 | + affect optimization, they are always constant: */ | |
508 | +#define src_order (TME_ENDIAN_BIG) | |
509 | +#define dst_order (TME_ENDIAN_LITTLE) | |
510 | + | |
511 | + /* declare src_bypl and dst_bypl. these are the bytes per scanline | |
512 | + in the source and destination images. these values are calculated | |
513 | + from the count of undisplayed and displayed pixels per scanline, | |
514 | + the number of bits per pixel, and the scanline padding: */ | |
515 | +#define src_bypl (((((src_skipx + src_width) * src_bipp) + (src_pad - 1)) & -src_pad) / 8) | |
516 | +#define dst_bypl (((((dst_skipx + dst_width) * dst_bipp) + (dst_pad - 1)) & -dst_pad) / 8) | |
517 | + | |
518 | + /* declare src_packed and dst_packed. these are nonzero iff | |
519 | + every last bit in a scanline belongs to a displayed pixel. | |
520 | + put another way, this is zero iff a scanline has undisplayed | |
521 | + pixels at its beginning or padding bits at its end. when | |
522 | + a source image or destination image is packed, translation | |
523 | + doesn't have to worry about skipping FIFO bits to get to | |
524 | + bits belonging to displayed pixels: */ | |
525 | +#define src_packed ((src_width * src_bipp) == (src_bypl * 8)) | |
526 | +#define dst_packed ((dst_width * dst_bipp) == (dst_bypl * 8)) | |
527 | + | |
528 | + /* declare src_bypb and src_bypb_real. src_bypb is the bytes | |
529 | + per source image buffer with the "translation termination | |
530 | + overhead" of approximately two extra scanlines. src_bypb_real | |
531 | + is the real bytes per source image buffer with no overhead. | |
532 | + both values are padded to a multiple of 4 bytes (32 bits): */ | |
533 | +#define src_bypb_real (((900 * src_bypl) + 3) & -4) | |
534 | +#define src_bypb ((src_bypb_real + (src_bypl * 2)) & -4) | |
535 | + | |
536 | + /* declare the source primary bit FIFO: | |
537 | + | |
538 | + src_raw0 points to the next aligned 32-bit word to be | |
539 | + read from the image buffer. | |
540 | + | |
541 | + src_fifo0 is the visible part of the bit FIFO. | |
542 | + | |
543 | + src_fifo0_next and src_fifo0_bits are only used when the | |
544 | + visible part of the bit FIFO is not guaranteed to always | |
545 | + correspond to an aligned 32-bit word in the image buffer. | |
546 | + src_fifo0_next is the invisible part of the bit FIFO, | |
547 | + and src_fifo0_bits tracks the total number of bits in the | |
548 | + visible and invisible parts of the FIFO. */ | |
549 | + const tme_uint32_t *src_raw0; | |
550 | + tme_uint32_t src_fifo0, src_fifo0_next; | |
551 | + unsigned int src_fifo0_bits; | |
552 | + | |
553 | + /* declare the destination primary bit FIFO: | |
554 | + | |
555 | + dst_raw0 points to the next aligned 32-bit word to be | |
556 | + written into the image buffer. | |
557 | + | |
558 | + dst_fifo0 is the visible part of the bit FIFO. | |
559 | + | |
560 | + dst_fifo0_next and dst_fifo0_bits are only used when the | |
561 | + visible part of the bit FIFO is not guaranteed to always | |
562 | + correspond to an aligned 32-bit word in the image buffer. | |
563 | + dst_fifo0_next is the invisible part of the bit FIFO, | |
564 | + and dst_fifo0_bits tracks the total number of bits in the | |
565 | + invisible part of the FIFO. */ | |
566 | + tme_uint32_t *dst_raw0; | |
567 | + tme_uint32_t dst_fifo0, dst_fifo0_next; | |
568 | + unsigned int dst_fifo0_bits; | |
569 | + | |
570 | + /* declare src_off and dst_off. these are used when priming a | |
571 | + source or destination bit FIFO, to identify an initial aligned | |
572 | + 32-bit word in the source or destination image buffer, and an | |
573 | + initial bit offset within that word: */ | |
574 | + unsigned int src_off, dst_off; | |
575 | + | |
576 | + /* declare src_fifo0_may_be_unaligned. this is zero iff all | |
577 | + aligned 32-bit words in the source buffer contain a whole | |
578 | + number of displayed pixels, and at *all times during the | |
579 | + translation* the visible part of the bit FIFO is guaranteed | |
580 | + to correspond to an aligned 32-bit word in the image buffer. | |
581 | + | |
582 | + this is *not* so if any of the following are true: | |
583 | + | |
584 | + - the source bits-per-pixel value is not known at compile | |
585 | + time. in this case, we can't unroll the translation loop | |
586 | + for source pixels, and are forced to shift the FIFO after | |
587 | + each one. | |
588 | + | |
589 | + - if the source image is not packed. in this case, there may | |
590 | + be undisplayed pixels in the FIFO, which we will need to | |
591 | + shift out. | |
592 | + | |
593 | + - if there are 24 bits per source pixel. in this case, a | |
594 | + source pixel may cross a 32-bit boundary: */ | |
595 | +#define src_fifo0_may_be_unaligned (!src_packed || (src_bipp == 24)) | |
596 | + | |
597 | + /* declare dst_fifo0_may_be_unaligned. this is zero iff all | |
598 | + aligned 32-bit words in the destination buffer contain a whole | |
599 | + number of displayed pixels, and at *all times during the | |
600 | + translation* the visible part of the bit FIFO is guaranteed | |
601 | + to correspond to an aligned 32-bit word in the image buffer. | |
602 | + | |
603 | + this is *not* so if any of the following are true: | |
604 | + | |
605 | + - the destination bits-per-pixel value is not known at compile | |
606 | + time. in this case, we can't unroll the translation loop | |
607 | + for destination pixels, and are forced to shift the FIFO | |
608 | + after each one. | |
609 | + | |
610 | + - if src_fifo0_may_be_unaligned is true. in this case, we | |
611 | + definitely can't guarantee that any initial dst_x will | |
612 | + correspond to an aligned 32-bit word in the destination buffer. | |
613 | + | |
614 | + - if the destination image is not packed. in this case, there may | |
615 | + be undisplayed pixels in the FIFO, which we will need to | |
616 | + shift out. | |
617 | + | |
618 | + - if there are 24 bits per destination pixel. in this case, | |
619 | + a destination pixel may cross a 32-bit boundary. | |
620 | + | |
621 | + - if a possible initial dst_x doesn't correspond to an aligned | |
622 | + 32-bit word in the destination buffer. for this last one: | |
623 | + | |
624 | + since we require that src_fifo0_may_be_unaligned is zero, we | |
625 | + know that the initial src_x = (Z * 32) / src_bipp for | |
626 | + some Z. we also have the initial dst_x = src_x. | |
627 | + the initial destination bit offset will then be: | |
628 | + | |
629 | + (dst_skipx + dst_x) * dst_bipp | |
630 | + = (dst_skipx * dst_bipp) + (dst_x * dst_bipp) | |
631 | + | |
632 | + if we additionally require that (dst_skipx * dst_bipp) | |
633 | + be 32-bit aligned, this reduces things to: | |
634 | + | |
635 | + dst_x * dst_bipp | |
636 | + = (src_x) * dst_bipp | |
637 | + = (((Z * 32) / src_bipp)) * dst_bipp | |
638 | + | |
639 | + which will be a multiple of 32 iff: | |
640 | + | |
641 | + ((1 / src_bipp)) * dst_bipp >= 1 and integral | |
642 | + | |
643 | + or, equivalently: | |
644 | + | |
645 | + (dst_bipp % src_bipp) == 0 | |
646 | + */ | |
647 | +#define dst_fifo0_may_be_unaligned (src_fifo0_may_be_unaligned || !dst_packed || (dst_bipp == 24) || (dst_bypl % 4) || ((dst_skipx * dst_bipp) % 32) || (dst_bipp % src_bipp)) | |
648 | + | |
649 | + /* declare src_offset_updated_first and src_offset_updated_last, | |
650 | + which hold the offsets of the first and last updated bytes in | |
651 | + the source image: */ | |
652 | + tme_uint32_t src_offset_updated_first; | |
653 | + tme_uint32_t src_offset_updated_last; | |
654 | + | |
655 | + /* declare src_raw0_end. when treating the source image as | |
656 | + an array of aligned 32-bit words, this variable holds the | |
657 | + address of the first word after the real source image. | |
658 | + if the fast, aligned 32-bit word comparison loop passes | |
659 | + this point, the entire source image has been processed and | |
660 | + the function terminates: */ | |
661 | + const tme_uint32_t *src_raw0_end; | |
662 | + | |
663 | + /* declare xlat_run. see the comment for the TME_FB_XLAT_RUN | |
664 | + macro for an explanation of what this variable does: */ | |
665 | + int xlat_run; | |
666 | + | |
667 | + /* this silences gcc -Wuninitialized: */ | |
668 | + src_fifo0_next = 0; | |
669 | + src_fifo0_bits = 0; | |
670 | + dst_fifo0_next = 0; | |
671 | + dst_fifo0_bits = 0; | |
672 | + | |
673 | + /* initialize src_raw0 and src_raw0_end for the fast aligned 32-bit | |
674 | + word comparison loop. on entry to (and when continuing) that loop, | |
675 | + src_raw0 always points to the aligned 32-bit word *before* the | |
676 | + next word to check. src_raw0_end always points after the last | |
677 | + word to check. | |
678 | + | |
679 | + src_raw0 is actually part of the source primary bit FIFO, which | |
680 | + is good, because when the fast comparison fails on a word, src_raw0 | |
681 | + is already primed and ready to work for that bit FIFO: */ | |
682 | + src_offset_updated_first = src->tme_fb_connection_offset_updated_first; | |
683 | + src_offset_updated_last = TME_MIN(src->tme_fb_connection_offset_updated_last, src_bypb_real - 1); | |
684 | + src->tme_fb_connection_offset_updated_first = 0; | |
685 | + src->tme_fb_connection_offset_updated_last = src_bypb_real - 1; | |
686 | + if (src_offset_updated_first > src_offset_updated_last) { | |
687 | + return (FALSE); | |
688 | + } | |
689 | + src_raw0 | |
690 | + = (((const tme_uint32_t *) | |
691 | + (src->tme_fb_connection_buffer | |
692 | + + (src_offset_updated_first | |
693 | + & (0 - (tme_uint32_t) sizeof(tme_uint32_t))))) | |
694 | + -1); | |
695 | + src_raw0_end | |
696 | + = ((const tme_uint32_t *) | |
697 | + (src->tme_fb_connection_buffer | |
698 | + + src_offset_updated_last | |
699 | + + 1)); | |
700 | + | |
701 | + /* initialize xlat_run to -1. it can never go negative inside the | |
702 | + pixel translation loop, so if xlat_run stays negative for the | |
703 | + entire translation, it means that the source image hasn't changed | |
704 | + since the last translation. this information is returned to the | |
705 | + caller to hopefully save more work in updating the display: */ | |
706 | + xlat_run = -1; | |
707 | + | |
708 | + /* this is the main translation loop, which contains the fast aligned | |
709 | + 32-bit word comparison loop, and the pixel translation loop: */ | |
710 | + for (;;) { | |
711 | + | |
712 | + /* this is the fast aligned 32-bit word comparison loop. it | |
713 | + terminates either when a word fails comparison, or when the | |
714 | + entire source image has been compared. the if test that | |
715 | + follows checks for the latter case and breaks the main | |
716 | + translation loop: */ | |
717 | + for (; (++src_raw0 < src_raw0_end | |
718 | + && *src_raw0 == *TME_FB_XLAT_SRC_OLD(src_raw0)); ); | |
719 | + if (src_raw0 >= src_raw0_end) { | |
720 | + break; | |
721 | + } | |
722 | + | |
723 | + /* calculate the byte offset into the source buffer of the | |
724 | + 32-bit word that failed comparison: */ | |
725 | + src_off = ((tme_uint8_t *) src_raw0) - src->tme_fb_connection_buffer; | |
726 | + | |
727 | + /* calculate the source y pixel coordinate, and reduce | |
728 | + src_off from the byte offset into the buffer to the | |
729 | + byte offset into that scanline: */ | |
730 | + src_y = src_off / src_bypl; | |
731 | + src_off = src_off % src_bypl; | |
732 | + | |
733 | + /* while translating pixels, we use one or more "bit FIFOs", | |
734 | + each composed of one or more 32-bit integers. we load these | |
735 | + FIFOs 32 bits at a time. */ | |
736 | + | |
737 | + /* prime the visible part of the source primary bit FIFO: */ | |
738 | + src_fifo0 = *src_raw0; | |
739 | + *TME_FB_XLAT_SRC_OLD(src_raw0) = src_fifo0; | |
740 | + src_raw0++; | |
741 | + src_fifo0 = ((src_order == TME_ENDIAN_BIG) | |
742 | + ? tme_betoh_u32(src_fifo0) | |
743 | + : tme_letoh_u32(src_fifo0)); | |
744 | + | |
745 | + /* if the source primary bit FIFO may be unaligned: */ | |
746 | + if (src_fifo0_may_be_unaligned) { | |
747 | + | |
748 | + /* prime the invisible part of the source primary bit FIFO and | |
749 | + assume that we will not have to shift it to finish: */ | |
750 | + src_fifo0_next = *src_raw0; | |
751 | + *TME_FB_XLAT_SRC_OLD(src_raw0) = src_fifo0_next; | |
752 | + src_raw0++; | |
753 | + src_fifo0_next = ((src_order == TME_ENDIAN_BIG) | |
754 | + ? tme_betoh_u32(src_fifo0_next) | |
755 | + : tme_letoh_u32(src_fifo0_next)); | |
756 | + src_fifo0_bits = 0; | |
757 | + | |
758 | + /* if there are pixels that need to be skipped, the first 32 bits | |
759 | + we loaded into the FIFO may have first bits that belong to | |
760 | + those undisplayed (skipped) pixels. it is *not* possible for | |
761 | + it to have first bits that belong to the scanline pad; there | |
762 | + might be pad bits in the *middle* of the first 32 bits, but any | |
763 | + first bits *must* belong to pixels, displayed or not: */ | |
764 | + if (src_skipx > 0 | |
765 | + && (src_off * 8) < (src_skipx * src_bipp)) { | |
766 | + | |
767 | + /* see how many bits we will need to skip: */ | |
768 | + src_fifo0_bits = (src_skipx * src_bipp) - (src_off * 8); | |
769 | + | |
770 | + /* if it is more than 31 bits, this is an entire 32 bits of | |
771 | + undisplayed pixels. just advance: */ | |
772 | + if (src_fifo0_bits > 31) { | |
773 | + src_raw0--; | |
774 | + continue; | |
775 | + } | |
776 | + | |
777 | + /* set the source x coordinate to zero: */ | |
778 | + src_x = 0; | |
779 | + } | |
780 | + | |
781 | + /* otherwise, the first 32 bits we load will have first bits for | |
782 | + a displayable pixel: */ | |
783 | + else { | |
784 | + | |
785 | + /* if the source bits per pixel is 24, calculate the number of | |
786 | + bytes *before* the original src_raw0 of any split pixel, and | |
787 | + subtract this from src_off, to leave src_off as the byte offset | |
788 | + into the scanline of the beginning of a pixel: */ | |
789 | + if (src_bipp == 24) { | |
790 | + src_fifo0_bits = (src_off % 3); | |
791 | + src_off -= src_fifo0_bits; | |
792 | + | |
793 | + /* if this is a split pixel, we need to prime the source primary | |
794 | + bit FIFO starting with the part *before* the original src_raw0. | |
795 | + we do not have to copy to the old; it passed comparison: */ | |
796 | + if (src_fifo0_bits) { | |
797 | + src_raw0--; | |
798 | + src_fifo0_next = src_fifo0; | |
799 | + src_fifo0 = ((src_order == TME_ENDIAN_BIG) | |
800 | + ? tme_betoh_u32(*(src_raw0 - 2)) | |
801 | + : tme_letoh_u32(*(src_raw0 - 2))); | |
802 | + } | |
803 | + } | |
804 | + | |
805 | + /* calculate the source x coordinate: */ | |
806 | + src_x = ((src_off * 8) / src_bipp) - src_skipx; | |
807 | + } | |
808 | + | |
809 | + /* do any shifting to finish priming the source primary FIFO: */ | |
810 | + if (src_fifo0_bits) { | |
811 | + if (src_order == TME_ENDIAN_BIG) { | |
812 | + src_fifo0 = (src_fifo0 << src_fifo0_bits) | (src_fifo0_next >> (32 - src_fifo0_bits)); | |
813 | + src_fifo0_next <<= src_fifo0_bits; | |
814 | + } | |
815 | + else { | |
816 | + src_fifo0 = (src_fifo0 >> src_fifo0_bits) | (src_fifo0_next << (32 - src_fifo0_bits)); | |
817 | + src_fifo0_next >>= src_fifo0_bits; | |
818 | + } | |
819 | + } | |
820 | + src_fifo0_bits = 64 - src_fifo0_bits; | |
821 | + } | |
822 | + | |
823 | + /* otherwise, the source primary FIFO is aligned: */ | |
824 | + else { | |
825 | + src_x = ((src_off * 8) / src_bipp) - src_skipx; | |
826 | + } | |
827 | + | |
828 | + /* prime the destination primary bit FIFO: */ | |
829 | + dst_fifo0 = 0; | |
830 | + if (dst_fifo0_may_be_unaligned) { | |
831 | + | |
832 | + /* calculate the bit offset into the destination buffer of | |
833 | + the destination pixel: */ | |
834 | + dst_off = (dst_y * dst_bypl * 8) + ((dst_skipx + dst_x) * dst_bipp); | |
835 | + | |
836 | + /* calculate the number of bits that will be in the primed FIFO: */ | |
837 | + dst_fifo0_bits = dst_off % 32; | |
838 | + | |
839 | + /* set dst_raw0: */ | |
840 | + dst_raw0 = (tme_uint32_t *) | |
841 | + (dst->tme_fb_connection_buffer | |
842 | + + ((dst_off - dst_fifo0_bits) / 8)); | |
843 | + | |
844 | + /* prime the primary destination FIFO: */ | |
845 | + dst_fifo0_next = 0; | |
846 | + if (dst_fifo0_bits) { | |
847 | + dst_fifo0_next = (src_order == TME_ENDIAN_BIG | |
848 | + ? (tme_betoh_u32(*dst_raw0) & (0xffffffffUL << (32 - dst_fifo0_bits))) | |
849 | + : (tme_letoh_u32(*dst_raw0) & (0xffffffffUL >> (32 - dst_fifo0_bits)))); | |
850 | + } | |
851 | + } | |
852 | + | |
853 | + /* otherwise the destination primary FIFO is aligned: */ | |
854 | + else { | |
855 | + dst_off = (dst_y * dst_bypl) + (((dst_skipx + dst_x) * dst_bipp) / 8); | |
856 | + dst_raw0 = (tme_uint32_t *) (dst->tme_fb_connection_buffer + dst_off); | |
857 | + } | |
858 | + | |
859 | + /* since src_bipp is known at code-generation time, the | |
860 | + pixel translation loop is unrolled to translate all | |
861 | + source pixels in the 32-bit visible part of the source | |
862 | + bit FIFO(s) before shifting. | |
863 | + | |
864 | + in this case, src_bipp is known to be 1, so 32 pixels will | |
865 | + be read out of the source bit FIFO(s) before shifting, and | |
866 | + when the source bit FIFO(s) are shifted, they are shifted | |
867 | + 32 bits at a time: */ | |
868 | + | |
869 | + /* since dst_bipp is known at code-generation time, the pixel | |
870 | + translation loop is unrolled to translate all destination | |
871 | + pixels in the 32-bit visible part of the destination bit | |
872 | + FIFO(s) before shifting. | |
873 | + | |
874 | + in this case, dst_bipp is known to be 32, so 1 pixels will | |
875 | + be written into the destination bit FIFO(s) before shifting, | |
876 | + and when the destination bit FIFO(s) are shifted, they are | |
877 | + shifted 32 bits at a time: */ | |
878 | + | |
879 | + /* src_unroll = 32, src_iter_scale = 1 | |
880 | + dst_unroll = 1, dst_iter_scale = 1 */ | |
881 | + for (xlat_run = TME_FB_XLAT_RUN; | |
882 | + xlat_run > 0; ) { | |
883 | + | |
884 | + /* iter #0 */ | |
885 | + | |
886 | + /* get a pixel from the source primary FIFO: */ | |
887 | + pixel = | |
888 | + ((src_fifo0 | |
889 | + >> (src_order == TME_ENDIAN_BIG | |
890 | + ? (32 - (src_bipp + (0 * src_bipp))) | |
891 | + : (0 * src_bipp)))); | |
892 | + | |
893 | + /* since source pixels are known at compile time to | |
894 | + not have subfields, map the source pixel into the | |
895 | + destination pixel: */ | |
896 | + pixel = dst->tme_fb_connection_map_pixel[pixel & src_mask]; | |
897 | + | |
898 | + /* if the source buffer is not packed, and we just | |
899 | + read the last pixel on this source scanline: */ | |
900 | + if (!src_packed | |
901 | + && ++src_x == src_width) { | |
902 | + | |
903 | + /* calculate the number of bits between the | |
904 | + last bit of the last pixel and the first bit | |
905 | + of the first displayed pixel on the next | |
906 | + scanline. this is equal to the number of | |
907 | + pad bits plus bits for undisplayed pixels: */ | |
908 | + src_off = ((src_bypl * 8) - (src_width * src_bipp)); | |
909 | + | |
910 | + /* while there are bits to shift: */ | |
911 | + for (; src_off > 0; src_off -= TME_MIN(src_off, 32)) { | |
912 | + | |
913 | + /* shift the source primary FIFO: */ | |
914 | + TME_FB_XLAT_SHIFT_SRC(src_fifo0_may_be_unaligned, | |
915 | + src_fifo0, | |
916 | + src_fifo0_next, | |
917 | + src_fifo0_bits, | |
918 | + TME_MIN(src_off, 32), | |
919 | + src_raw0, | |
920 | + src_order); | |
921 | + } | |
922 | + | |
923 | + /* we are now on the first pixel of the next scanline: */ | |
924 | + src_x = 0; | |
925 | + } | |
926 | + | |
927 | + /* put the pixel into the destination primary FIFO: */ | |
928 | + dst_fifo0 |= | |
929 | + (pixel | |
930 | + << (dst_order == TME_ENDIAN_BIG | |
931 | + ? ((32 - dst_bipp) - (0 * dst_bipp)) | |
932 | + : (0 * dst_bipp))); | |
933 | + | |
934 | + /* if the destination buffer is not packed, and we just | |
935 | + wrote the last pixel on this destination scanline: */ | |
936 | + if (!dst_packed | |
937 | + && (dst_x += 1) == dst_width) { | |
938 | + | |
939 | + /* calculate the number of bits between the | |
940 | + last bit of the last pixel and the first bit | |
941 | + of the first displayed pixel on the next | |
942 | + scanline. this is equal to the number of | |
943 | + pad bits plus bits for undisplayed pixels: */ | |
944 | + dst_off = ((dst_bypl * 8) - (dst_width * dst_bipp)); | |
945 | + | |
946 | + /* while there are bits to shift: */ | |
947 | + for (; dst_off > 0; dst_off -= TME_MIN(dst_off, 32)) { | |
948 | + | |
949 | + /* shift the destination primary FIFO: */ | |
950 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
951 | + dst_fifo0, | |
952 | + dst_fifo0_next, | |
953 | + dst_fifo0_bits, | |
954 | + TME_MIN(dst_off, 32), | |
955 | + dst_raw0, | |
956 | + dst_order); | |
957 | + } | |
958 | + | |
959 | + /* we are now on the first pixel of the next scanline: */ | |
960 | + dst_x = 0; | |
961 | + } | |
962 | + | |
963 | + /* shift the destination primary FIFO: */ | |
964 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
965 | + dst_fifo0, | |
966 | + dst_fifo0_next, | |
967 | + dst_fifo0_bits, | |
968 | + 32, | |
969 | + dst_raw0, | |
970 | + dst_order); | |
971 | + | |
972 | + /* iter #1 */ | |
973 | + | |
974 | + /* get a pixel from the source primary FIFO: */ | |
975 | + pixel = | |
976 | + ((src_fifo0 | |
977 | + >> (src_order == TME_ENDIAN_BIG | |
978 | + ? (32 - (src_bipp + (1 * src_bipp))) | |
979 | + : (1 * src_bipp)))); | |
980 | + | |
981 | + /* since source pixels are known at compile time to | |
982 | + not have subfields, map the source pixel into the | |
983 | + destination pixel: */ | |
984 | + pixel = dst->tme_fb_connection_map_pixel[pixel & src_mask]; | |
985 | + | |
986 | + /* if the source buffer is not packed, and we just | |
987 | + read the last pixel on this source scanline: */ | |
988 | + if (!src_packed | |
989 | + && ++src_x == src_width) { | |
990 | + | |
991 | + /* calculate the number of bits between the | |
992 | + last bit of the last pixel and the first bit | |
993 | + of the first displayed pixel on the next | |
994 | + scanline. this is equal to the number of | |
995 | + pad bits plus bits for undisplayed pixels: */ | |
996 | + src_off = ((src_bypl * 8) - (src_width * src_bipp)); | |
997 | + | |
998 | + /* while there are bits to shift: */ | |
999 | + for (; src_off > 0; src_off -= TME_MIN(src_off, 32)) { | |
1000 | + | |
1001 | + /* shift the source primary FIFO: */ | |
1002 | + TME_FB_XLAT_SHIFT_SRC(src_fifo0_may_be_unaligned, | |
1003 | + src_fifo0, | |
1004 | + src_fifo0_next, | |
1005 | + src_fifo0_bits, | |
1006 | + TME_MIN(src_off, 32), | |
1007 | + src_raw0, | |
1008 | + src_order); | |
1009 | + } | |
1010 | + | |
1011 | + /* we are now on the first pixel of the next scanline: */ | |
1012 | + src_x = 0; | |
1013 | + } | |
1014 | + | |
1015 | + /* put the pixel into the destination primary FIFO: */ | |
1016 | + dst_fifo0 |= | |
1017 | + (pixel | |
1018 | + << (dst_order == TME_ENDIAN_BIG | |
1019 | + ? ((32 - dst_bipp) - (0 * dst_bipp)) | |
1020 | + : (0 * dst_bipp))); | |
1021 | + | |
1022 | + /* if the destination buffer is not packed, and we just | |
1023 | + wrote the last pixel on this destination scanline: */ | |
1024 | + if (!dst_packed | |
1025 | + && (dst_x += 1) == dst_width) { | |
1026 | + | |
1027 | + /* calculate the number of bits between the | |
1028 | + last bit of the last pixel and the first bit | |
1029 | + of the first displayed pixel on the next | |
1030 | + scanline. this is equal to the number of | |
1031 | + pad bits plus bits for undisplayed pixels: */ | |
1032 | + dst_off = ((dst_bypl * 8) - (dst_width * dst_bipp)); | |
1033 | + | |
1034 | + /* while there are bits to shift: */ | |
1035 | + for (; dst_off > 0; dst_off -= TME_MIN(dst_off, 32)) { | |
1036 | + | |
1037 | + /* shift the destination primary FIFO: */ | |
1038 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
1039 | + dst_fifo0, | |
1040 | + dst_fifo0_next, | |
1041 | + dst_fifo0_bits, | |
1042 | + TME_MIN(dst_off, 32), | |
1043 | + dst_raw0, | |
1044 | + dst_order); | |
1045 | + } | |
1046 | + | |
1047 | + /* we are now on the first pixel of the next scanline: */ | |
1048 | + dst_x = 0; | |
1049 | + } | |
1050 | + | |
1051 | + /* shift the destination primary FIFO: */ | |
1052 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
1053 | + dst_fifo0, | |
1054 | + dst_fifo0_next, | |
1055 | + dst_fifo0_bits, | |
1056 | + 32, | |
1057 | + dst_raw0, | |
1058 | + dst_order); | |
1059 | + | |
1060 | + /* iter #2 */ | |
1061 | + | |
1062 | + /* get a pixel from the source primary FIFO: */ | |
1063 | + pixel = | |
1064 | + ((src_fifo0 | |
1065 | + >> (src_order == TME_ENDIAN_BIG | |
1066 | + ? (32 - (src_bipp + (2 * src_bipp))) | |
1067 | + : (2 * src_bipp)))); | |
1068 | + | |
1069 | + /* since source pixels are known at compile time to | |
1070 | + not have subfields, map the source pixel into the | |
1071 | + destination pixel: */ | |
1072 | + pixel = dst->tme_fb_connection_map_pixel[pixel & src_mask]; | |
1073 | + | |
1074 | + /* if the source buffer is not packed, and we just | |
1075 | + read the last pixel on this source scanline: */ | |
1076 | + if (!src_packed | |
1077 | + && ++src_x == src_width) { | |
1078 | + | |
1079 | + /* calculate the number of bits between the | |
1080 | + last bit of the last pixel and the first bit | |
1081 | + of the first displayed pixel on the next | |
1082 | + scanline. this is equal to the number of | |
1083 | + pad bits plus bits for undisplayed pixels: */ | |
1084 | + src_off = ((src_bypl * 8) - (src_width * src_bipp)); | |
1085 | + | |
1086 | + /* while there are bits to shift: */ | |
1087 | + for (; src_off > 0; src_off -= TME_MIN(src_off, 32)) { | |
1088 | + | |
1089 | + /* shift the source primary FIFO: */ | |
1090 | + TME_FB_XLAT_SHIFT_SRC(src_fifo0_may_be_unaligned, | |
1091 | + src_fifo0, | |
1092 | + src_fifo0_next, | |
1093 | + src_fifo0_bits, | |
1094 | + TME_MIN(src_off, 32), | |
1095 | + src_raw0, | |
1096 | + src_order); | |
1097 | + } | |
1098 | + | |
1099 | + /* we are now on the first pixel of the next scanline: */ | |
1100 | + src_x = 0; | |
1101 | + } | |
1102 | + | |
1103 | + /* put the pixel into the destination primary FIFO: */ | |
1104 | + dst_fifo0 |= | |
1105 | + (pixel | |
1106 | + << (dst_order == TME_ENDIAN_BIG | |
1107 | + ? ((32 - dst_bipp) - (0 * dst_bipp)) | |
1108 | + : (0 * dst_bipp))); | |
1109 | + | |
1110 | + /* if the destination buffer is not packed, and we just | |
1111 | + wrote the last pixel on this destination scanline: */ | |
1112 | + if (!dst_packed | |
1113 | + && (dst_x += 1) == dst_width) { | |
1114 | + | |
1115 | + /* calculate the number of bits between the | |
1116 | + last bit of the last pixel and the first bit | |
1117 | + of the first displayed pixel on the next | |
1118 | + scanline. this is equal to the number of | |
1119 | + pad bits plus bits for undisplayed pixels: */ | |
1120 | + dst_off = ((dst_bypl * 8) - (dst_width * dst_bipp)); | |
1121 | + | |
1122 | + /* while there are bits to shift: */ | |
1123 | + for (; dst_off > 0; dst_off -= TME_MIN(dst_off, 32)) { | |
1124 | + | |
1125 | + /* shift the destination primary FIFO: */ | |
1126 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
1127 | + dst_fifo0, | |
1128 | + dst_fifo0_next, | |
1129 | + dst_fifo0_bits, | |
1130 | + TME_MIN(dst_off, 32), | |
1131 | + dst_raw0, | |
1132 | + dst_order); | |
1133 | + } | |
1134 | + | |
1135 | + /* we are now on the first pixel of the next scanline: */ | |
1136 | + dst_x = 0; | |
1137 | + } | |
1138 | + | |
1139 | + /* shift the destination primary FIFO: */ | |
1140 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
1141 | + dst_fifo0, | |
1142 | + dst_fifo0_next, | |
1143 | + dst_fifo0_bits, | |
1144 | + 32, | |
1145 | + dst_raw0, | |
1146 | + dst_order); | |
1147 | + | |
1148 | + /* iter #3 */ | |
1149 | + | |
1150 | + /* get a pixel from the source primary FIFO: */ | |
1151 | + pixel = | |
1152 | + ((src_fifo0 | |
1153 | + >> (src_order == TME_ENDIAN_BIG | |
1154 | + ? (32 - (src_bipp + (3 * src_bipp))) | |
1155 | + : (3 * src_bipp)))); | |
1156 | + | |
1157 | + /* since source pixels are known at compile time to | |
1158 | + not have subfields, map the source pixel into the | |
1159 | + destination pixel: */ | |
1160 | + pixel = dst->tme_fb_connection_map_pixel[pixel & src_mask]; | |
1161 | + | |
1162 | + /* if the source buffer is not packed, and we just | |
1163 | + read the last pixel on this source scanline: */ | |
1164 | + if (!src_packed | |
1165 | + && ++src_x == src_width) { | |
1166 | + | |
1167 | + /* calculate the number of bits between the | |
1168 | + last bit of the last pixel and the first bit | |
1169 | + of the first displayed pixel on the next | |
1170 | + scanline. this is equal to the number of | |
1171 | + pad bits plus bits for undisplayed pixels: */ | |
1172 | + src_off = ((src_bypl * 8) - (src_width * src_bipp)); | |
1173 | + | |
1174 | + /* while there are bits to shift: */ | |
1175 | + for (; src_off > 0; src_off -= TME_MIN(src_off, 32)) { | |
1176 | + | |
1177 | + /* shift the source primary FIFO: */ | |
1178 | + TME_FB_XLAT_SHIFT_SRC(src_fifo0_may_be_unaligned, | |
1179 | + src_fifo0, | |
1180 | + src_fifo0_next, | |
1181 | + src_fifo0_bits, | |
1182 | + TME_MIN(src_off, 32), | |
1183 | + src_raw0, | |
1184 | + src_order); | |
1185 | + } | |
1186 | + | |
1187 | + /* we are now on the first pixel of the next scanline: */ | |
1188 | + src_x = 0; | |
1189 | + } | |
1190 | + | |
1191 | + /* put the pixel into the destination primary FIFO: */ | |
1192 | + dst_fifo0 |= | |
1193 | + (pixel | |
1194 | + << (dst_order == TME_ENDIAN_BIG | |
1195 | + ? ((32 - dst_bipp) - (0 * dst_bipp)) | |
1196 | + : (0 * dst_bipp))); | |
1197 | + | |
1198 | + /* if the destination buffer is not packed, and we just | |
1199 | + wrote the last pixel on this destination scanline: */ | |
1200 | + if (!dst_packed | |
1201 | + && (dst_x += 1) == dst_width) { | |
1202 | + | |
1203 | + /* calculate the number of bits between the | |
1204 | + last bit of the last pixel and the first bit | |
1205 | + of the first displayed pixel on the next | |
1206 | + scanline. this is equal to the number of | |
1207 | + pad bits plus bits for undisplayed pixels: */ | |
1208 | + dst_off = ((dst_bypl * 8) - (dst_width * dst_bipp)); | |
1209 | + | |
1210 | + /* while there are bits to shift: */ | |
1211 | + for (; dst_off > 0; dst_off -= TME_MIN(dst_off, 32)) { | |
1212 | + | |
1213 | + /* shift the destination primary FIFO: */ | |
1214 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
1215 | + dst_fifo0, | |
1216 | + dst_fifo0_next, | |
1217 | + dst_fifo0_bits, | |
1218 | + TME_MIN(dst_off, 32), | |
1219 | + dst_raw0, | |
1220 | + dst_order); | |
1221 | + } | |
1222 | + | |
1223 | + /* we are now on the first pixel of the next scanline: */ | |
1224 | + dst_x = 0; | |
1225 | + } | |
1226 | + | |
1227 | + /* shift the destination primary FIFO: */ | |
1228 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
1229 | + dst_fifo0, | |
1230 | + dst_fifo0_next, | |
1231 | + dst_fifo0_bits, | |
1232 | + 32, | |
1233 | + dst_raw0, | |
1234 | + dst_order); | |
1235 | + | |
1236 | + /* iter #4 */ | |
1237 | + | |
1238 | + /* get a pixel from the source primary FIFO: */ | |
1239 | + pixel = | |
1240 | + ((src_fifo0 | |
1241 | + >> (src_order == TME_ENDIAN_BIG | |
1242 | + ? (32 - (src_bipp + (4 * src_bipp))) | |
1243 | + : (4 * src_bipp)))); | |
1244 | + | |
1245 | + /* since source pixels are known at compile time to | |
1246 | + not have subfields, map the source pixel into the | |
1247 | + destination pixel: */ | |
1248 | + pixel = dst->tme_fb_connection_map_pixel[pixel & src_mask]; | |
1249 | + | |
1250 | + /* if the source buffer is not packed, and we just | |
1251 | + read the last pixel on this source scanline: */ | |
1252 | + if (!src_packed | |
1253 | + && ++src_x == src_width) { | |
1254 | + | |
1255 | + /* calculate the number of bits between the | |
1256 | + last bit of the last pixel and the first bit | |
1257 | + of the first displayed pixel on the next | |
1258 | + scanline. this is equal to the number of | |
1259 | + pad bits plus bits for undisplayed pixels: */ | |
1260 | + src_off = ((src_bypl * 8) - (src_width * src_bipp)); | |
1261 | + | |
1262 | + /* while there are bits to shift: */ | |
1263 | + for (; src_off > 0; src_off -= TME_MIN(src_off, 32)) { | |
1264 | + | |
1265 | + /* shift the source primary FIFO: */ | |
1266 | + TME_FB_XLAT_SHIFT_SRC(src_fifo0_may_be_unaligned, | |
1267 | + src_fifo0, | |
1268 | + src_fifo0_next, | |
1269 | + src_fifo0_bits, | |
1270 | + TME_MIN(src_off, 32), | |
1271 | + src_raw0, | |
1272 | + src_order); | |
1273 | + } | |
1274 | + | |
1275 | + /* we are now on the first pixel of the next scanline: */ | |
1276 | + src_x = 0; | |
1277 | + } | |
1278 | + | |
1279 | + /* put the pixel into the destination primary FIFO: */ | |
1280 | + dst_fifo0 |= | |
1281 | + (pixel | |
1282 | + << (dst_order == TME_ENDIAN_BIG | |
1283 | + ? ((32 - dst_bipp) - (0 * dst_bipp)) | |
1284 | + : (0 * dst_bipp))); | |
1285 | + | |
1286 | + /* if the destination buffer is not packed, and we just | |
1287 | + wrote the last pixel on this destination scanline: */ | |
1288 | + if (!dst_packed | |
1289 | + && (dst_x += 1) == dst_width) { | |
1290 | + | |
1291 | + /* calculate the number of bits between the | |
1292 | + last bit of the last pixel and the first bit | |
1293 | + of the first displayed pixel on the next | |
1294 | + scanline. this is equal to the number of | |
1295 | + pad bits plus bits for undisplayed pixels: */ | |
1296 | + dst_off = ((dst_bypl * 8) - (dst_width * dst_bipp)); | |
1297 | + | |
1298 | + /* while there are bits to shift: */ | |
1299 | + for (; dst_off > 0; dst_off -= TME_MIN(dst_off, 32)) { | |
1300 | + | |
1301 | + /* shift the destination primary FIFO: */ | |
1302 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
1303 | + dst_fifo0, | |
1304 | + dst_fifo0_next, | |
1305 | + dst_fifo0_bits, | |
1306 | + TME_MIN(dst_off, 32), | |
1307 | + dst_raw0, | |
1308 | + dst_order); | |
1309 | + } | |
1310 | + | |
1311 | + /* we are now on the first pixel of the next scanline: */ | |
1312 | + dst_x = 0; | |
1313 | + } | |
1314 | + | |
1315 | + /* shift the destination primary FIFO: */ | |
1316 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
1317 | + dst_fifo0, | |
1318 | + dst_fifo0_next, | |
1319 | + dst_fifo0_bits, | |
1320 | + 32, | |
1321 | + dst_raw0, | |
1322 | + dst_order); | |
1323 | + | |
1324 | + /* iter #5 */ | |
1325 | + | |
1326 | + /* get a pixel from the source primary FIFO: */ | |
1327 | + pixel = | |
1328 | + ((src_fifo0 | |
1329 | + >> (src_order == TME_ENDIAN_BIG | |
1330 | + ? (32 - (src_bipp + (5 * src_bipp))) | |
1331 | + : (5 * src_bipp)))); | |
1332 | + | |
1333 | + /* since source pixels are known at compile time to | |
1334 | + not have subfields, map the source pixel into the | |
1335 | + destination pixel: */ | |
1336 | + pixel = dst->tme_fb_connection_map_pixel[pixel & src_mask]; | |
1337 | + | |
1338 | + /* if the source buffer is not packed, and we just | |
1339 | + read the last pixel on this source scanline: */ | |
1340 | + if (!src_packed | |
1341 | + && ++src_x == src_width) { | |
1342 | + | |
1343 | + /* calculate the number of bits between the | |
1344 | + last bit of the last pixel and the first bit | |
1345 | + of the first displayed pixel on the next | |
1346 | + scanline. this is equal to the number of | |
1347 | + pad bits plus bits for undisplayed pixels: */ | |
1348 | + src_off = ((src_bypl * 8) - (src_width * src_bipp)); | |
1349 | + | |
1350 | + /* while there are bits to shift: */ | |
1351 | + for (; src_off > 0; src_off -= TME_MIN(src_off, 32)) { | |
1352 | + | |
1353 | + /* shift the source primary FIFO: */ | |
1354 | + TME_FB_XLAT_SHIFT_SRC(src_fifo0_may_be_unaligned, | |
1355 | + src_fifo0, | |
1356 | + src_fifo0_next, | |
1357 | + src_fifo0_bits, | |
1358 | + TME_MIN(src_off, 32), | |
1359 | + src_raw0, | |
1360 | + src_order); | |
1361 | + } | |
1362 | + | |
1363 | + /* we are now on the first pixel of the next scanline: */ | |
1364 | + src_x = 0; | |
1365 | + } | |
1366 | + | |
1367 | + /* put the pixel into the destination primary FIFO: */ | |
1368 | + dst_fifo0 |= | |
1369 | + (pixel | |
1370 | + << (dst_order == TME_ENDIAN_BIG | |
1371 | + ? ((32 - dst_bipp) - (0 * dst_bipp)) | |
1372 | + : (0 * dst_bipp))); | |
1373 | + | |
1374 | + /* if the destination buffer is not packed, and we just | |
1375 | + wrote the last pixel on this destination scanline: */ | |
1376 | + if (!dst_packed | |
1377 | + && (dst_x += 1) == dst_width) { | |
1378 | + | |
1379 | + /* calculate the number of bits between the | |
1380 | + last bit of the last pixel and the first bit | |
1381 | + of the first displayed pixel on the next | |
1382 | + scanline. this is equal to the number of | |
1383 | + pad bits plus bits for undisplayed pixels: */ | |
1384 | + dst_off = ((dst_bypl * 8) - (dst_width * dst_bipp)); | |
1385 | + | |
1386 | + /* while there are bits to shift: */ | |
1387 | + for (; dst_off > 0; dst_off -= TME_MIN(dst_off, 32)) { | |
1388 | + | |
1389 | + /* shift the destination primary FIFO: */ | |
1390 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
1391 | + dst_fifo0, | |
1392 | + dst_fifo0_next, | |
1393 | + dst_fifo0_bits, | |
1394 | + TME_MIN(dst_off, 32), | |
1395 | + dst_raw0, | |
1396 | + dst_order); | |
1397 | + } | |
1398 | + | |
1399 | + /* we are now on the first pixel of the next scanline: */ | |
1400 | + dst_x = 0; | |
1401 | + } | |
1402 | + | |
1403 | + /* shift the destination primary FIFO: */ | |
1404 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
1405 | + dst_fifo0, | |
1406 | + dst_fifo0_next, | |
1407 | + dst_fifo0_bits, | |
1408 | + 32, | |
1409 | + dst_raw0, | |
1410 | + dst_order); | |
1411 | + | |
1412 | + /* iter #6 */ | |
1413 | + | |
1414 | + /* get a pixel from the source primary FIFO: */ | |
1415 | + pixel = | |
1416 | + ((src_fifo0 | |
1417 | + >> (src_order == TME_ENDIAN_BIG | |
1418 | + ? (32 - (src_bipp + (6 * src_bipp))) | |
1419 | + : (6 * src_bipp)))); | |
1420 | + | |
1421 | + /* since source pixels are known at compile time to | |
1422 | + not have subfields, map the source pixel into the | |
1423 | + destination pixel: */ | |
1424 | + pixel = dst->tme_fb_connection_map_pixel[pixel & src_mask]; | |
1425 | + | |
1426 | + /* if the source buffer is not packed, and we just | |
1427 | + read the last pixel on this source scanline: */ | |
1428 | + if (!src_packed | |
1429 | + && ++src_x == src_width) { | |
1430 | + | |
1431 | + /* calculate the number of bits between the | |
1432 | + last bit of the last pixel and the first bit | |
1433 | + of the first displayed pixel on the next | |
1434 | + scanline. this is equal to the number of | |
1435 | + pad bits plus bits for undisplayed pixels: */ | |
1436 | + src_off = ((src_bypl * 8) - (src_width * src_bipp)); | |
1437 | + | |
1438 | + /* while there are bits to shift: */ | |
1439 | + for (; src_off > 0; src_off -= TME_MIN(src_off, 32)) { | |
1440 | + | |
1441 | + /* shift the source primary FIFO: */ | |
1442 | + TME_FB_XLAT_SHIFT_SRC(src_fifo0_may_be_unaligned, | |
1443 | + src_fifo0, | |
1444 | + src_fifo0_next, | |
1445 | + src_fifo0_bits, | |
1446 | + TME_MIN(src_off, 32), | |
1447 | + src_raw0, | |
1448 | + src_order); | |
1449 | + } | |
1450 | + | |
1451 | + /* we are now on the first pixel of the next scanline: */ | |
1452 | + src_x = 0; | |
1453 | + } | |
1454 | + | |
1455 | + /* put the pixel into the destination primary FIFO: */ | |
1456 | + dst_fifo0 |= | |
1457 | + (pixel | |
1458 | + << (dst_order == TME_ENDIAN_BIG | |
1459 | + ? ((32 - dst_bipp) - (0 * dst_bipp)) | |
1460 | + : (0 * dst_bipp))); | |
1461 | + | |
1462 | + /* if the destination buffer is not packed, and we just | |
1463 | + wrote the last pixel on this destination scanline: */ | |
1464 | + if (!dst_packed | |
1465 | + && (dst_x += 1) == dst_width) { | |
1466 | + | |
1467 | + /* calculate the number of bits between the | |
1468 | + last bit of the last pixel and the first bit | |
1469 | + of the first displayed pixel on the next | |
1470 | + scanline. this is equal to the number of | |
1471 | + pad bits plus bits for undisplayed pixels: */ | |
1472 | + dst_off = ((dst_bypl * 8) - (dst_width * dst_bipp)); | |
1473 | + | |
1474 | + /* while there are bits to shift: */ | |
1475 | + for (; dst_off > 0; dst_off -= TME_MIN(dst_off, 32)) { | |
1476 | + | |
1477 | + /* shift the destination primary FIFO: */ | |
1478 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
1479 | + dst_fifo0, | |
1480 | + dst_fifo0_next, | |
1481 | + dst_fifo0_bits, | |
1482 | + TME_MIN(dst_off, 32), | |
1483 | + dst_raw0, | |
1484 | + dst_order); | |
1485 | + } | |
1486 | + | |
1487 | + /* we are now on the first pixel of the next scanline: */ | |
1488 | + dst_x = 0; | |
1489 | + } | |
1490 | + | |
1491 | + /* shift the destination primary FIFO: */ | |
1492 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
1493 | + dst_fifo0, | |
1494 | + dst_fifo0_next, | |
1495 | + dst_fifo0_bits, | |
1496 | + 32, | |
1497 | + dst_raw0, | |
1498 | + dst_order); | |
1499 | + | |
1500 | + /* iter #7 */ | |
1501 | + | |
1502 | + /* get a pixel from the source primary FIFO: */ | |
1503 | + pixel = | |
1504 | + ((src_fifo0 | |
1505 | + >> (src_order == TME_ENDIAN_BIG | |
1506 | + ? (32 - (src_bipp + (7 * src_bipp))) | |
1507 | + : (7 * src_bipp)))); | |
1508 | + | |
1509 | + /* since source pixels are known at compile time to | |
1510 | + not have subfields, map the source pixel into the | |
1511 | + destination pixel: */ | |
1512 | + pixel = dst->tme_fb_connection_map_pixel[pixel & src_mask]; | |
1513 | + | |
1514 | + /* if the source buffer is not packed, and we just | |
1515 | + read the last pixel on this source scanline: */ | |
1516 | + if (!src_packed | |
1517 | + && ++src_x == src_width) { | |
1518 | + | |
1519 | + /* calculate the number of bits between the | |
1520 | + last bit of the last pixel and the first bit | |
1521 | + of the first displayed pixel on the next | |
1522 | + scanline. this is equal to the number of | |
1523 | + pad bits plus bits for undisplayed pixels: */ | |
1524 | + src_off = ((src_bypl * 8) - (src_width * src_bipp)); | |
1525 | + | |
1526 | + /* while there are bits to shift: */ | |
1527 | + for (; src_off > 0; src_off -= TME_MIN(src_off, 32)) { | |
1528 | + | |
1529 | + /* shift the source primary FIFO: */ | |
1530 | + TME_FB_XLAT_SHIFT_SRC(src_fifo0_may_be_unaligned, | |
1531 | + src_fifo0, | |
1532 | + src_fifo0_next, | |
1533 | + src_fifo0_bits, | |
1534 | + TME_MIN(src_off, 32), | |
1535 | + src_raw0, | |
1536 | + src_order); | |
1537 | + } | |
1538 | + | |
1539 | + /* we are now on the first pixel of the next scanline: */ | |
1540 | + src_x = 0; | |
1541 | + } | |
1542 | + | |
1543 | + /* put the pixel into the destination primary FIFO: */ | |
1544 | + dst_fifo0 |= | |
1545 | + (pixel | |
1546 | + << (dst_order == TME_ENDIAN_BIG | |
1547 | + ? ((32 - dst_bipp) - (0 * dst_bipp)) | |
1548 | + : (0 * dst_bipp))); | |
1549 | + | |
1550 | + /* if the destination buffer is not packed, and we just | |
1551 | + wrote the last pixel on this destination scanline: */ | |
1552 | + if (!dst_packed | |
1553 | + && (dst_x += 1) == dst_width) { | |
1554 | + | |
1555 | + /* calculate the number of bits between the | |
1556 | + last bit of the last pixel and the first bit | |
1557 | + of the first displayed pixel on the next | |
1558 | + scanline. this is equal to the number of | |
1559 | + pad bits plus bits for undisplayed pixels: */ | |
1560 | + dst_off = ((dst_bypl * 8) - (dst_width * dst_bipp)); | |
1561 | + | |
1562 | + /* while there are bits to shift: */ | |
1563 | + for (; dst_off > 0; dst_off -= TME_MIN(dst_off, 32)) { | |
1564 | + | |
1565 | + /* shift the destination primary FIFO: */ | |
1566 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
1567 | + dst_fifo0, | |
1568 | + dst_fifo0_next, | |
1569 | + dst_fifo0_bits, | |
1570 | + TME_MIN(dst_off, 32), | |
1571 | + dst_raw0, | |
1572 | + dst_order); | |
1573 | + } | |
1574 | + | |
1575 | + /* we are now on the first pixel of the next scanline: */ | |
1576 | + dst_x = 0; | |
1577 | + } | |
1578 | + | |
1579 | + /* shift the destination primary FIFO: */ | |
1580 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
1581 | + dst_fifo0, | |
1582 | + dst_fifo0_next, | |
1583 | + dst_fifo0_bits, | |
1584 | + 32, | |
1585 | + dst_raw0, | |
1586 | + dst_order); | |
1587 | + | |
1588 | + /* iter #8 */ | |
1589 | + | |
1590 | + /* get a pixel from the source primary FIFO: */ | |
1591 | + pixel = | |
1592 | + ((src_fifo0 | |
1593 | + >> (src_order == TME_ENDIAN_BIG | |
1594 | + ? (32 - (src_bipp + (8 * src_bipp))) | |
1595 | + : (8 * src_bipp)))); | |
1596 | + | |
1597 | + /* since source pixels are known at compile time to | |
1598 | + not have subfields, map the source pixel into the | |
1599 | + destination pixel: */ | |
1600 | + pixel = dst->tme_fb_connection_map_pixel[pixel & src_mask]; | |
1601 | + | |
1602 | + /* if the source buffer is not packed, and we just | |
1603 | + read the last pixel on this source scanline: */ | |
1604 | + if (!src_packed | |
1605 | + && ++src_x == src_width) { | |
1606 | + | |
1607 | + /* calculate the number of bits between the | |
1608 | + last bit of the last pixel and the first bit | |
1609 | + of the first displayed pixel on the next | |
1610 | + scanline. this is equal to the number of | |
1611 | + pad bits plus bits for undisplayed pixels: */ | |
1612 | + src_off = ((src_bypl * 8) - (src_width * src_bipp)); | |
1613 | + | |
1614 | + /* while there are bits to shift: */ | |
1615 | + for (; src_off > 0; src_off -= TME_MIN(src_off, 32)) { | |
1616 | + | |
1617 | + /* shift the source primary FIFO: */ | |
1618 | + TME_FB_XLAT_SHIFT_SRC(src_fifo0_may_be_unaligned, | |
1619 | + src_fifo0, | |
1620 | + src_fifo0_next, | |
1621 | + src_fifo0_bits, | |
1622 | + TME_MIN(src_off, 32), | |
1623 | + src_raw0, | |
1624 | + src_order); | |
1625 | + } | |
1626 | + | |
1627 | + /* we are now on the first pixel of the next scanline: */ | |
1628 | + src_x = 0; | |
1629 | + } | |
1630 | + | |
1631 | + /* put the pixel into the destination primary FIFO: */ | |
1632 | + dst_fifo0 |= | |
1633 | + (pixel | |
1634 | + << (dst_order == TME_ENDIAN_BIG | |
1635 | + ? ((32 - dst_bipp) - (0 * dst_bipp)) | |
1636 | + : (0 * dst_bipp))); | |
1637 | + | |
1638 | + /* if the destination buffer is not packed, and we just | |
1639 | + wrote the last pixel on this destination scanline: */ | |
1640 | + if (!dst_packed | |
1641 | + && (dst_x += 1) == dst_width) { | |
1642 | + | |
1643 | + /* calculate the number of bits between the | |
1644 | + last bit of the last pixel and the first bit | |
1645 | + of the first displayed pixel on the next | |
1646 | + scanline. this is equal to the number of | |
1647 | + pad bits plus bits for undisplayed pixels: */ | |
1648 | + dst_off = ((dst_bypl * 8) - (dst_width * dst_bipp)); | |
1649 | + | |
1650 | + /* while there are bits to shift: */ | |
1651 | + for (; dst_off > 0; dst_off -= TME_MIN(dst_off, 32)) { | |
1652 | + | |
1653 | + /* shift the destination primary FIFO: */ | |
1654 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
1655 | + dst_fifo0, | |
1656 | + dst_fifo0_next, | |
1657 | + dst_fifo0_bits, | |
1658 | + TME_MIN(dst_off, 32), | |
1659 | + dst_raw0, | |
1660 | + dst_order); | |
1661 | + } | |
1662 | + | |
1663 | + /* we are now on the first pixel of the next scanline: */ | |
1664 | + dst_x = 0; | |
1665 | + } | |
1666 | + | |
1667 | + /* shift the destination primary FIFO: */ | |
1668 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
1669 | + dst_fifo0, | |
1670 | + dst_fifo0_next, | |
1671 | + dst_fifo0_bits, | |
1672 | + 32, | |
1673 | + dst_raw0, | |
1674 | + dst_order); | |
1675 | + | |
1676 | + /* iter #9 */ | |
1677 | + | |
1678 | + /* get a pixel from the source primary FIFO: */ | |
1679 | + pixel = | |
1680 | + ((src_fifo0 | |
1681 | + >> (src_order == TME_ENDIAN_BIG | |
1682 | + ? (32 - (src_bipp + (9 * src_bipp))) | |
1683 | + : (9 * src_bipp)))); | |
1684 | + | |
1685 | + /* since source pixels are known at compile time to | |
1686 | + not have subfields, map the source pixel into the | |
1687 | + destination pixel: */ | |
1688 | + pixel = dst->tme_fb_connection_map_pixel[pixel & src_mask]; | |
1689 | + | |
1690 | + /* if the source buffer is not packed, and we just | |
1691 | + read the last pixel on this source scanline: */ | |
1692 | + if (!src_packed | |
1693 | + && ++src_x == src_width) { | |
1694 | + | |
1695 | + /* calculate the number of bits between the | |
1696 | + last bit of the last pixel and the first bit | |
1697 | + of the first displayed pixel on the next | |
1698 | + scanline. this is equal to the number of | |
1699 | + pad bits plus bits for undisplayed pixels: */ | |
1700 | + src_off = ((src_bypl * 8) - (src_width * src_bipp)); | |
1701 | + | |
1702 | + /* while there are bits to shift: */ | |
1703 | + for (; src_off > 0; src_off -= TME_MIN(src_off, 32)) { | |
1704 | + | |
1705 | + /* shift the source primary FIFO: */ | |
1706 | + TME_FB_XLAT_SHIFT_SRC(src_fifo0_may_be_unaligned, | |
1707 | + src_fifo0, | |
1708 | + src_fifo0_next, | |
1709 | + src_fifo0_bits, | |
1710 | + TME_MIN(src_off, 32), | |
1711 | + src_raw0, | |
1712 | + src_order); | |
1713 | + } | |
1714 | + | |
1715 | + /* we are now on the first pixel of the next scanline: */ | |
1716 | + src_x = 0; | |
1717 | + } | |
1718 | + | |
1719 | + /* put the pixel into the destination primary FIFO: */ | |
1720 | + dst_fifo0 |= | |
1721 | + (pixel | |
1722 | + << (dst_order == TME_ENDIAN_BIG | |
1723 | + ? ((32 - dst_bipp) - (0 * dst_bipp)) | |
1724 | + : (0 * dst_bipp))); | |
1725 | + | |
1726 | + /* if the destination buffer is not packed, and we just | |
1727 | + wrote the last pixel on this destination scanline: */ | |
1728 | + if (!dst_packed | |
1729 | + && (dst_x += 1) == dst_width) { | |
1730 | + | |
1731 | + /* calculate the number of bits between the | |
1732 | + last bit of the last pixel and the first bit | |
1733 | + of the first displayed pixel on the next | |
1734 | + scanline. this is equal to the number of | |
1735 | + pad bits plus bits for undisplayed pixels: */ | |
1736 | + dst_off = ((dst_bypl * 8) - (dst_width * dst_bipp)); | |
1737 | + | |
1738 | + /* while there are bits to shift: */ | |
1739 | + for (; dst_off > 0; dst_off -= TME_MIN(dst_off, 32)) { | |
1740 | + | |
1741 | + /* shift the destination primary FIFO: */ | |
1742 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
1743 | + dst_fifo0, | |
1744 | + dst_fifo0_next, | |
1745 | + dst_fifo0_bits, | |
1746 | + TME_MIN(dst_off, 32), | |
1747 | + dst_raw0, | |
1748 | + dst_order); | |
1749 | + } | |
1750 | + | |
1751 | + /* we are now on the first pixel of the next scanline: */ | |
1752 | + dst_x = 0; | |
1753 | + } | |
1754 | + | |
1755 | + /* shift the destination primary FIFO: */ | |
1756 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
1757 | + dst_fifo0, | |
1758 | + dst_fifo0_next, | |
1759 | + dst_fifo0_bits, | |
1760 | + 32, | |
1761 | + dst_raw0, | |
1762 | + dst_order); | |
1763 | + | |
1764 | + /* iter #10 */ | |
1765 | + | |
1766 | + /* get a pixel from the source primary FIFO: */ | |
1767 | + pixel = | |
1768 | + ((src_fifo0 | |
1769 | + >> (src_order == TME_ENDIAN_BIG | |
1770 | + ? (32 - (src_bipp + (10 * src_bipp))) | |
1771 | + : (10 * src_bipp)))); | |
1772 | + | |
1773 | + /* since source pixels are known at compile time to | |
1774 | + not have subfields, map the source pixel into the | |
1775 | + destination pixel: */ | |
1776 | + pixel = dst->tme_fb_connection_map_pixel[pixel & src_mask]; | |
1777 | + | |
1778 | + /* if the source buffer is not packed, and we just | |
1779 | + read the last pixel on this source scanline: */ | |
1780 | + if (!src_packed | |
1781 | + && ++src_x == src_width) { | |
1782 | + | |
1783 | + /* calculate the number of bits between the | |
1784 | + last bit of the last pixel and the first bit | |
1785 | + of the first displayed pixel on the next | |
1786 | + scanline. this is equal to the number of | |
1787 | + pad bits plus bits for undisplayed pixels: */ | |
1788 | + src_off = ((src_bypl * 8) - (src_width * src_bipp)); | |
1789 | + | |
1790 | + /* while there are bits to shift: */ | |
1791 | + for (; src_off > 0; src_off -= TME_MIN(src_off, 32)) { | |
1792 | + | |
1793 | + /* shift the source primary FIFO: */ | |
1794 | + TME_FB_XLAT_SHIFT_SRC(src_fifo0_may_be_unaligned, | |
1795 | + src_fifo0, | |
1796 | + src_fifo0_next, | |
1797 | + src_fifo0_bits, | |
1798 | + TME_MIN(src_off, 32), | |
1799 | + src_raw0, | |
1800 | + src_order); | |
1801 | + } | |
1802 | + | |
1803 | + /* we are now on the first pixel of the next scanline: */ | |
1804 | + src_x = 0; | |
1805 | + } | |
1806 | + | |
1807 | + /* put the pixel into the destination primary FIFO: */ | |
1808 | + dst_fifo0 |= | |
1809 | + (pixel | |
1810 | + << (dst_order == TME_ENDIAN_BIG | |
1811 | + ? ((32 - dst_bipp) - (0 * dst_bipp)) | |
1812 | + : (0 * dst_bipp))); | |
1813 | + | |
1814 | + /* if the destination buffer is not packed, and we just | |
1815 | + wrote the last pixel on this destination scanline: */ | |
1816 | + if (!dst_packed | |
1817 | + && (dst_x += 1) == dst_width) { | |
1818 | + | |
1819 | + /* calculate the number of bits between the | |
1820 | + last bit of the last pixel and the first bit | |
1821 | + of the first displayed pixel on the next | |
1822 | + scanline. this is equal to the number of | |
1823 | + pad bits plus bits for undisplayed pixels: */ | |
1824 | + dst_off = ((dst_bypl * 8) - (dst_width * dst_bipp)); | |
1825 | + | |
1826 | + /* while there are bits to shift: */ | |
1827 | + for (; dst_off > 0; dst_off -= TME_MIN(dst_off, 32)) { | |
1828 | + | |
1829 | + /* shift the destination primary FIFO: */ | |
1830 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
1831 | + dst_fifo0, | |
1832 | + dst_fifo0_next, | |
1833 | + dst_fifo0_bits, | |
1834 | + TME_MIN(dst_off, 32), | |
1835 | + dst_raw0, | |
1836 | + dst_order); | |
1837 | + } | |
1838 | + | |
1839 | + /* we are now on the first pixel of the next scanline: */ | |
1840 | + dst_x = 0; | |
1841 | + } | |
1842 | + | |
1843 | + /* shift the destination primary FIFO: */ | |
1844 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
1845 | + dst_fifo0, | |
1846 | + dst_fifo0_next, | |
1847 | + dst_fifo0_bits, | |
1848 | + 32, | |
1849 | + dst_raw0, | |
1850 | + dst_order); | |
1851 | + | |
1852 | + /* iter #11 */ | |
1853 | + | |
1854 | + /* get a pixel from the source primary FIFO: */ | |
1855 | + pixel = | |
1856 | + ((src_fifo0 | |
1857 | + >> (src_order == TME_ENDIAN_BIG | |
1858 | + ? (32 - (src_bipp + (11 * src_bipp))) | |
1859 | + : (11 * src_bipp)))); | |
1860 | + | |
1861 | + /* since source pixels are known at compile time to | |
1862 | + not have subfields, map the source pixel into the | |
1863 | + destination pixel: */ | |
1864 | + pixel = dst->tme_fb_connection_map_pixel[pixel & src_mask]; | |
1865 | + | |
1866 | + /* if the source buffer is not packed, and we just | |
1867 | + read the last pixel on this source scanline: */ | |
1868 | + if (!src_packed | |
1869 | + && ++src_x == src_width) { | |
1870 | + | |
1871 | + /* calculate the number of bits between the | |
1872 | + last bit of the last pixel and the first bit | |
1873 | + of the first displayed pixel on the next | |
1874 | + scanline. this is equal to the number of | |
1875 | + pad bits plus bits for undisplayed pixels: */ | |
1876 | + src_off = ((src_bypl * 8) - (src_width * src_bipp)); | |
1877 | + | |
1878 | + /* while there are bits to shift: */ | |
1879 | + for (; src_off > 0; src_off -= TME_MIN(src_off, 32)) { | |
1880 | + | |
1881 | + /* shift the source primary FIFO: */ | |
1882 | + TME_FB_XLAT_SHIFT_SRC(src_fifo0_may_be_unaligned, | |
1883 | + src_fifo0, | |
1884 | + src_fifo0_next, | |
1885 | + src_fifo0_bits, | |
1886 | + TME_MIN(src_off, 32), | |
1887 | + src_raw0, | |
1888 | + src_order); | |
1889 | + } | |
1890 | + | |
1891 | + /* we are now on the first pixel of the next scanline: */ | |
1892 | + src_x = 0; | |
1893 | + } | |
1894 | + | |
1895 | + /* put the pixel into the destination primary FIFO: */ | |
1896 | + dst_fifo0 |= | |
1897 | + (pixel | |
1898 | + << (dst_order == TME_ENDIAN_BIG | |
1899 | + ? ((32 - dst_bipp) - (0 * dst_bipp)) | |
1900 | + : (0 * dst_bipp))); | |
1901 | + | |
1902 | + /* if the destination buffer is not packed, and we just | |
1903 | + wrote the last pixel on this destination scanline: */ | |
1904 | + if (!dst_packed | |
1905 | + && (dst_x += 1) == dst_width) { | |
1906 | + | |
1907 | + /* calculate the number of bits between the | |
1908 | + last bit of the last pixel and the first bit | |
1909 | + of the first displayed pixel on the next | |
1910 | + scanline. this is equal to the number of | |
1911 | + pad bits plus bits for undisplayed pixels: */ | |
1912 | + dst_off = ((dst_bypl * 8) - (dst_width * dst_bipp)); | |
1913 | + | |
1914 | + /* while there are bits to shift: */ | |
1915 | + for (; dst_off > 0; dst_off -= TME_MIN(dst_off, 32)) { | |
1916 | + | |
1917 | + /* shift the destination primary FIFO: */ | |
1918 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
1919 | + dst_fifo0, | |
1920 | + dst_fifo0_next, | |
1921 | + dst_fifo0_bits, | |
1922 | + TME_MIN(dst_off, 32), | |
1923 | + dst_raw0, | |
1924 | + dst_order); | |
1925 | + } | |
1926 | + | |
1927 | + /* we are now on the first pixel of the next scanline: */ | |
1928 | + dst_x = 0; | |
1929 | + } | |
1930 | + | |
1931 | + /* shift the destination primary FIFO: */ | |
1932 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
1933 | + dst_fifo0, | |
1934 | + dst_fifo0_next, | |
1935 | + dst_fifo0_bits, | |
1936 | + 32, | |
1937 | + dst_raw0, | |
1938 | + dst_order); | |
1939 | + | |
1940 | + /* iter #12 */ | |
1941 | + | |
1942 | + /* get a pixel from the source primary FIFO: */ | |
1943 | + pixel = | |
1944 | + ((src_fifo0 | |
1945 | + >> (src_order == TME_ENDIAN_BIG | |
1946 | + ? (32 - (src_bipp + (12 * src_bipp))) | |
1947 | + : (12 * src_bipp)))); | |
1948 | + | |
1949 | + /* since source pixels are known at compile time to | |
1950 | + not have subfields, map the source pixel into the | |
1951 | + destination pixel: */ | |
1952 | + pixel = dst->tme_fb_connection_map_pixel[pixel & src_mask]; | |
1953 | + | |
1954 | + /* if the source buffer is not packed, and we just | |
1955 | + read the last pixel on this source scanline: */ | |
1956 | + if (!src_packed | |
1957 | + && ++src_x == src_width) { | |
1958 | + | |
1959 | + /* calculate the number of bits between the | |
1960 | + last bit of the last pixel and the first bit | |
1961 | + of the first displayed pixel on the next | |
1962 | + scanline. this is equal to the number of | |
1963 | + pad bits plus bits for undisplayed pixels: */ | |
1964 | + src_off = ((src_bypl * 8) - (src_width * src_bipp)); | |
1965 | + | |
1966 | + /* while there are bits to shift: */ | |
1967 | + for (; src_off > 0; src_off -= TME_MIN(src_off, 32)) { | |
1968 | + | |
1969 | + /* shift the source primary FIFO: */ | |
1970 | + TME_FB_XLAT_SHIFT_SRC(src_fifo0_may_be_unaligned, | |
1971 | + src_fifo0, | |
1972 | + src_fifo0_next, | |
1973 | + src_fifo0_bits, | |
1974 | + TME_MIN(src_off, 32), | |
1975 | + src_raw0, | |
1976 | + src_order); | |
1977 | + } | |
1978 | + | |
1979 | + /* we are now on the first pixel of the next scanline: */ | |
1980 | + src_x = 0; | |
1981 | + } | |
1982 | + | |
1983 | + /* put the pixel into the destination primary FIFO: */ | |
1984 | + dst_fifo0 |= | |
1985 | + (pixel | |
1986 | + << (dst_order == TME_ENDIAN_BIG | |
1987 | + ? ((32 - dst_bipp) - (0 * dst_bipp)) | |
1988 | + : (0 * dst_bipp))); | |
1989 | + | |
1990 | + /* if the destination buffer is not packed, and we just | |
1991 | + wrote the last pixel on this destination scanline: */ | |
1992 | + if (!dst_packed | |
1993 | + && (dst_x += 1) == dst_width) { | |
1994 | + | |
1995 | + /* calculate the number of bits between the | |
1996 | + last bit of the last pixel and the first bit | |
1997 | + of the first displayed pixel on the next | |
1998 | + scanline. this is equal to the number of | |
1999 | + pad bits plus bits for undisplayed pixels: */ | |
2000 | + dst_off = ((dst_bypl * 8) - (dst_width * dst_bipp)); | |
2001 | + | |
2002 | + /* while there are bits to shift: */ | |
2003 | + for (; dst_off > 0; dst_off -= TME_MIN(dst_off, 32)) { | |
2004 | + | |
2005 | + /* shift the destination primary FIFO: */ | |
2006 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
2007 | + dst_fifo0, | |
2008 | + dst_fifo0_next, | |
2009 | + dst_fifo0_bits, | |
2010 | + TME_MIN(dst_off, 32), | |
2011 | + dst_raw0, | |
2012 | + dst_order); | |
2013 | + } | |
2014 | + | |
2015 | + /* we are now on the first pixel of the next scanline: */ | |
2016 | + dst_x = 0; | |
2017 | + } | |
2018 | + | |
2019 | + /* shift the destination primary FIFO: */ | |
2020 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
2021 | + dst_fifo0, | |
2022 | + dst_fifo0_next, | |
2023 | + dst_fifo0_bits, | |
2024 | + 32, | |
2025 | + dst_raw0, | |
2026 | + dst_order); | |
2027 | + | |
2028 | + /* iter #13 */ | |
2029 | + | |
2030 | + /* get a pixel from the source primary FIFO: */ | |
2031 | + pixel = | |
2032 | + ((src_fifo0 | |
2033 | + >> (src_order == TME_ENDIAN_BIG | |
2034 | + ? (32 - (src_bipp + (13 * src_bipp))) | |
2035 | + : (13 * src_bipp)))); | |
2036 | + | |
2037 | + /* since source pixels are known at compile time to | |
2038 | + not have subfields, map the source pixel into the | |
2039 | + destination pixel: */ | |
2040 | + pixel = dst->tme_fb_connection_map_pixel[pixel & src_mask]; | |
2041 | + | |
2042 | + /* if the source buffer is not packed, and we just | |
2043 | + read the last pixel on this source scanline: */ | |
2044 | + if (!src_packed | |
2045 | + && ++src_x == src_width) { | |
2046 | + | |
2047 | + /* calculate the number of bits between the | |
2048 | + last bit of the last pixel and the first bit | |
2049 | + of the first displayed pixel on the next | |
2050 | + scanline. this is equal to the number of | |
2051 | + pad bits plus bits for undisplayed pixels: */ | |
2052 | + src_off = ((src_bypl * 8) - (src_width * src_bipp)); | |
2053 | + | |
2054 | + /* while there are bits to shift: */ | |
2055 | + for (; src_off > 0; src_off -= TME_MIN(src_off, 32)) { | |
2056 | + | |
2057 | + /* shift the source primary FIFO: */ | |
2058 | + TME_FB_XLAT_SHIFT_SRC(src_fifo0_may_be_unaligned, | |
2059 | + src_fifo0, | |
2060 | + src_fifo0_next, | |
2061 | + src_fifo0_bits, | |
2062 | + TME_MIN(src_off, 32), | |
2063 | + src_raw0, | |
2064 | + src_order); | |
2065 | + } | |
2066 | + | |
2067 | + /* we are now on the first pixel of the next scanline: */ | |
2068 | + src_x = 0; | |
2069 | + } | |
2070 | + | |
2071 | + /* put the pixel into the destination primary FIFO: */ | |
2072 | + dst_fifo0 |= | |
2073 | + (pixel | |
2074 | + << (dst_order == TME_ENDIAN_BIG | |
2075 | + ? ((32 - dst_bipp) - (0 * dst_bipp)) | |
2076 | + : (0 * dst_bipp))); | |
2077 | + | |
2078 | + /* if the destination buffer is not packed, and we just | |
2079 | + wrote the last pixel on this destination scanline: */ | |
2080 | + if (!dst_packed | |
2081 | + && (dst_x += 1) == dst_width) { | |
2082 | + | |
2083 | + /* calculate the number of bits between the | |
2084 | + last bit of the last pixel and the first bit | |
2085 | + of the first displayed pixel on the next | |
2086 | + scanline. this is equal to the number of | |
2087 | + pad bits plus bits for undisplayed pixels: */ | |
2088 | + dst_off = ((dst_bypl * 8) - (dst_width * dst_bipp)); | |
2089 | + | |
2090 | + /* while there are bits to shift: */ | |
2091 | + for (; dst_off > 0; dst_off -= TME_MIN(dst_off, 32)) { | |
2092 | + | |
2093 | + /* shift the destination primary FIFO: */ | |
2094 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
2095 | + dst_fifo0, | |
2096 | + dst_fifo0_next, | |
2097 | + dst_fifo0_bits, | |
2098 | + TME_MIN(dst_off, 32), | |
2099 | + dst_raw0, | |
2100 | + dst_order); | |
2101 | + } | |
2102 | + | |
2103 | + /* we are now on the first pixel of the next scanline: */ | |
2104 | + dst_x = 0; | |
2105 | + } | |
2106 | + | |
2107 | + /* shift the destination primary FIFO: */ | |
2108 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
2109 | + dst_fifo0, | |
2110 | + dst_fifo0_next, | |
2111 | + dst_fifo0_bits, | |
2112 | + 32, | |
2113 | + dst_raw0, | |
2114 | + dst_order); | |
2115 | + | |
2116 | + /* iter #14 */ | |
2117 | + | |
2118 | + /* get a pixel from the source primary FIFO: */ | |
2119 | + pixel = | |
2120 | + ((src_fifo0 | |
2121 | + >> (src_order == TME_ENDIAN_BIG | |
2122 | + ? (32 - (src_bipp + (14 * src_bipp))) | |
2123 | + : (14 * src_bipp)))); | |
2124 | + | |
2125 | + /* since source pixels are known at compile time to | |
2126 | + not have subfields, map the source pixel into the | |
2127 | + destination pixel: */ | |
2128 | + pixel = dst->tme_fb_connection_map_pixel[pixel & src_mask]; | |
2129 | + | |
2130 | + /* if the source buffer is not packed, and we just | |
2131 | + read the last pixel on this source scanline: */ | |
2132 | + if (!src_packed | |
2133 | + && ++src_x == src_width) { | |
2134 | + | |
2135 | + /* calculate the number of bits between the | |
2136 | + last bit of the last pixel and the first bit | |
2137 | + of the first displayed pixel on the next | |
2138 | + scanline. this is equal to the number of | |
2139 | + pad bits plus bits for undisplayed pixels: */ | |
2140 | + src_off = ((src_bypl * 8) - (src_width * src_bipp)); | |
2141 | + | |
2142 | + /* while there are bits to shift: */ | |
2143 | + for (; src_off > 0; src_off -= TME_MIN(src_off, 32)) { | |
2144 | + | |
2145 | + /* shift the source primary FIFO: */ | |
2146 | + TME_FB_XLAT_SHIFT_SRC(src_fifo0_may_be_unaligned, | |
2147 | + src_fifo0, | |
2148 | + src_fifo0_next, | |
2149 | + src_fifo0_bits, | |
2150 | + TME_MIN(src_off, 32), | |
2151 | + src_raw0, | |
2152 | + src_order); | |
2153 | + } | |
2154 | + | |
2155 | + /* we are now on the first pixel of the next scanline: */ | |
2156 | + src_x = 0; | |
2157 | + } | |
2158 | + | |
2159 | + /* put the pixel into the destination primary FIFO: */ | |
2160 | + dst_fifo0 |= | |
2161 | + (pixel | |
2162 | + << (dst_order == TME_ENDIAN_BIG | |
2163 | + ? ((32 - dst_bipp) - (0 * dst_bipp)) | |
2164 | + : (0 * dst_bipp))); | |
2165 | + | |
2166 | + /* if the destination buffer is not packed, and we just | |
2167 | + wrote the last pixel on this destination scanline: */ | |
2168 | + if (!dst_packed | |
2169 | + && (dst_x += 1) == dst_width) { | |
2170 | + | |
2171 | + /* calculate the number of bits between the | |
2172 | + last bit of the last pixel and the first bit | |
2173 | + of the first displayed pixel on the next | |
2174 | + scanline. this is equal to the number of | |
2175 | + pad bits plus bits for undisplayed pixels: */ | |
2176 | + dst_off = ((dst_bypl * 8) - (dst_width * dst_bipp)); | |
2177 | + | |
2178 | + /* while there are bits to shift: */ | |
2179 | + for (; dst_off > 0; dst_off -= TME_MIN(dst_off, 32)) { | |
2180 | + | |
2181 | + /* shift the destination primary FIFO: */ | |
2182 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
2183 | + dst_fifo0, | |
2184 | + dst_fifo0_next, | |
2185 | + dst_fifo0_bits, | |
2186 | + TME_MIN(dst_off, 32), | |
2187 | + dst_raw0, | |
2188 | + dst_order); | |
2189 | + } | |
2190 | + | |
2191 | + /* we are now on the first pixel of the next scanline: */ | |
2192 | + dst_x = 0; | |
2193 | + } | |
2194 | + | |
2195 | + /* shift the destination primary FIFO: */ | |
2196 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
2197 | + dst_fifo0, | |
2198 | + dst_fifo0_next, | |
2199 | + dst_fifo0_bits, | |
2200 | + 32, | |
2201 | + dst_raw0, | |
2202 | + dst_order); | |
2203 | + | |
2204 | + /* iter #15 */ | |
2205 | + | |
2206 | + /* get a pixel from the source primary FIFO: */ | |
2207 | + pixel = | |
2208 | + ((src_fifo0 | |
2209 | + >> (src_order == TME_ENDIAN_BIG | |
2210 | + ? (32 - (src_bipp + (15 * src_bipp))) | |
2211 | + : (15 * src_bipp)))); | |
2212 | + | |
2213 | + /* since source pixels are known at compile time to | |
2214 | + not have subfields, map the source pixel into the | |
2215 | + destination pixel: */ | |
2216 | + pixel = dst->tme_fb_connection_map_pixel[pixel & src_mask]; | |
2217 | + | |
2218 | + /* if the source buffer is not packed, and we just | |
2219 | + read the last pixel on this source scanline: */ | |
2220 | + if (!src_packed | |
2221 | + && ++src_x == src_width) { | |
2222 | + | |
2223 | + /* calculate the number of bits between the | |
2224 | + last bit of the last pixel and the first bit | |
2225 | + of the first displayed pixel on the next | |
2226 | + scanline. this is equal to the number of | |
2227 | + pad bits plus bits for undisplayed pixels: */ | |
2228 | + src_off = ((src_bypl * 8) - (src_width * src_bipp)); | |
2229 | + | |
2230 | + /* while there are bits to shift: */ | |
2231 | + for (; src_off > 0; src_off -= TME_MIN(src_off, 32)) { | |
2232 | + | |
2233 | + /* shift the source primary FIFO: */ | |
2234 | + TME_FB_XLAT_SHIFT_SRC(src_fifo0_may_be_unaligned, | |
2235 | + src_fifo0, | |
2236 | + src_fifo0_next, | |
2237 | + src_fifo0_bits, | |
2238 | + TME_MIN(src_off, 32), | |
2239 | + src_raw0, | |
2240 | + src_order); | |
2241 | + } | |
2242 | + | |
2243 | + /* we are now on the first pixel of the next scanline: */ | |
2244 | + src_x = 0; | |
2245 | + } | |
2246 | + | |
2247 | + /* put the pixel into the destination primary FIFO: */ | |
2248 | + dst_fifo0 |= | |
2249 | + (pixel | |
2250 | + << (dst_order == TME_ENDIAN_BIG | |
2251 | + ? ((32 - dst_bipp) - (0 * dst_bipp)) | |
2252 | + : (0 * dst_bipp))); | |
2253 | + | |
2254 | + /* if the destination buffer is not packed, and we just | |
2255 | + wrote the last pixel on this destination scanline: */ | |
2256 | + if (!dst_packed | |
2257 | + && (dst_x += 1) == dst_width) { | |
2258 | + | |
2259 | + /* calculate the number of bits between the | |
2260 | + last bit of the last pixel and the first bit | |
2261 | + of the first displayed pixel on the next | |
2262 | + scanline. this is equal to the number of | |
2263 | + pad bits plus bits for undisplayed pixels: */ | |
2264 | + dst_off = ((dst_bypl * 8) - (dst_width * dst_bipp)); | |
2265 | + | |
2266 | + /* while there are bits to shift: */ | |
2267 | + for (; dst_off > 0; dst_off -= TME_MIN(dst_off, 32)) { | |
2268 | + | |
2269 | + /* shift the destination primary FIFO: */ | |
2270 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
2271 | + dst_fifo0, | |
2272 | + dst_fifo0_next, | |
2273 | + dst_fifo0_bits, | |
2274 | + TME_MIN(dst_off, 32), | |
2275 | + dst_raw0, | |
2276 | + dst_order); | |
2277 | + } | |
2278 | + | |
2279 | + /* we are now on the first pixel of the next scanline: */ | |
2280 | + dst_x = 0; | |
2281 | + } | |
2282 | + | |
2283 | + /* shift the destination primary FIFO: */ | |
2284 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
2285 | + dst_fifo0, | |
2286 | + dst_fifo0_next, | |
2287 | + dst_fifo0_bits, | |
2288 | + 32, | |
2289 | + dst_raw0, | |
2290 | + dst_order); | |
2291 | + | |
2292 | + /* iter #16 */ | |
2293 | + | |
2294 | + /* get a pixel from the source primary FIFO: */ | |
2295 | + pixel = | |
2296 | + ((src_fifo0 | |
2297 | + >> (src_order == TME_ENDIAN_BIG | |
2298 | + ? (32 - (src_bipp + (16 * src_bipp))) | |
2299 | + : (16 * src_bipp)))); | |
2300 | + | |
2301 | + /* since source pixels are known at compile time to | |
2302 | + not have subfields, map the source pixel into the | |
2303 | + destination pixel: */ | |
2304 | + pixel = dst->tme_fb_connection_map_pixel[pixel & src_mask]; | |
2305 | + | |
2306 | + /* if the source buffer is not packed, and we just | |
2307 | + read the last pixel on this source scanline: */ | |
2308 | + if (!src_packed | |
2309 | + && ++src_x == src_width) { | |
2310 | + | |
2311 | + /* calculate the number of bits between the | |
2312 | + last bit of the last pixel and the first bit | |
2313 | + of the first displayed pixel on the next | |
2314 | + scanline. this is equal to the number of | |
2315 | + pad bits plus bits for undisplayed pixels: */ | |
2316 | + src_off = ((src_bypl * 8) - (src_width * src_bipp)); | |
2317 | + | |
2318 | + /* while there are bits to shift: */ | |
2319 | + for (; src_off > 0; src_off -= TME_MIN(src_off, 32)) { | |
2320 | + | |
2321 | + /* shift the source primary FIFO: */ | |
2322 | + TME_FB_XLAT_SHIFT_SRC(src_fifo0_may_be_unaligned, | |
2323 | + src_fifo0, | |
2324 | + src_fifo0_next, | |
2325 | + src_fifo0_bits, | |
2326 | + TME_MIN(src_off, 32), | |
2327 | + src_raw0, | |
2328 | + src_order); | |
2329 | + } | |
2330 | + | |
2331 | + /* we are now on the first pixel of the next scanline: */ | |
2332 | + src_x = 0; | |
2333 | + } | |
2334 | + | |
2335 | + /* put the pixel into the destination primary FIFO: */ | |
2336 | + dst_fifo0 |= | |
2337 | + (pixel | |
2338 | + << (dst_order == TME_ENDIAN_BIG | |
2339 | + ? ((32 - dst_bipp) - (0 * dst_bipp)) | |
2340 | + : (0 * dst_bipp))); | |
2341 | + | |
2342 | + /* if the destination buffer is not packed, and we just | |
2343 | + wrote the last pixel on this destination scanline: */ | |
2344 | + if (!dst_packed | |
2345 | + && (dst_x += 1) == dst_width) { | |
2346 | + | |
2347 | + /* calculate the number of bits between the | |
2348 | + last bit of the last pixel and the first bit | |
2349 | + of the first displayed pixel on the next | |
2350 | + scanline. this is equal to the number of | |
2351 | + pad bits plus bits for undisplayed pixels: */ | |
2352 | + dst_off = ((dst_bypl * 8) - (dst_width * dst_bipp)); | |
2353 | + | |
2354 | + /* while there are bits to shift: */ | |
2355 | + for (; dst_off > 0; dst_off -= TME_MIN(dst_off, 32)) { | |
2356 | + | |
2357 | + /* shift the destination primary FIFO: */ | |
2358 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
2359 | + dst_fifo0, | |
2360 | + dst_fifo0_next, | |
2361 | + dst_fifo0_bits, | |
2362 | + TME_MIN(dst_off, 32), | |
2363 | + dst_raw0, | |
2364 | + dst_order); | |
2365 | + } | |
2366 | + | |
2367 | + /* we are now on the first pixel of the next scanline: */ | |
2368 | + dst_x = 0; | |
2369 | + } | |
2370 | + | |
2371 | + /* shift the destination primary FIFO: */ | |
2372 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
2373 | + dst_fifo0, | |
2374 | + dst_fifo0_next, | |
2375 | + dst_fifo0_bits, | |
2376 | + 32, | |
2377 | + dst_raw0, | |
2378 | + dst_order); | |
2379 | + | |
2380 | + /* iter #17 */ | |
2381 | + | |
2382 | + /* get a pixel from the source primary FIFO: */ | |
2383 | + pixel = | |
2384 | + ((src_fifo0 | |
2385 | + >> (src_order == TME_ENDIAN_BIG | |
2386 | + ? (32 - (src_bipp + (17 * src_bipp))) | |
2387 | + : (17 * src_bipp)))); | |
2388 | + | |
2389 | + /* since source pixels are known at compile time to | |
2390 | + not have subfields, map the source pixel into the | |
2391 | + destination pixel: */ | |
2392 | + pixel = dst->tme_fb_connection_map_pixel[pixel & src_mask]; | |
2393 | + | |
2394 | + /* if the source buffer is not packed, and we just | |
2395 | + read the last pixel on this source scanline: */ | |
2396 | + if (!src_packed | |
2397 | + && ++src_x == src_width) { | |
2398 | + | |
2399 | + /* calculate the number of bits between the | |
2400 | + last bit of the last pixel and the first bit | |
2401 | + of the first displayed pixel on the next | |
2402 | + scanline. this is equal to the number of | |
2403 | + pad bits plus bits for undisplayed pixels: */ | |
2404 | + src_off = ((src_bypl * 8) - (src_width * src_bipp)); | |
2405 | + | |
2406 | + /* while there are bits to shift: */ | |
2407 | + for (; src_off > 0; src_off -= TME_MIN(src_off, 32)) { | |
2408 | + | |
2409 | + /* shift the source primary FIFO: */ | |
2410 | + TME_FB_XLAT_SHIFT_SRC(src_fifo0_may_be_unaligned, | |
2411 | + src_fifo0, | |
2412 | + src_fifo0_next, | |
2413 | + src_fifo0_bits, | |
2414 | + TME_MIN(src_off, 32), | |
2415 | + src_raw0, | |
2416 | + src_order); | |
2417 | + } | |
2418 | + | |
2419 | + /* we are now on the first pixel of the next scanline: */ | |
2420 | + src_x = 0; | |
2421 | + } | |
2422 | + | |
2423 | + /* put the pixel into the destination primary FIFO: */ | |
2424 | + dst_fifo0 |= | |
2425 | + (pixel | |
2426 | + << (dst_order == TME_ENDIAN_BIG | |
2427 | + ? ((32 - dst_bipp) - (0 * dst_bipp)) | |
2428 | + : (0 * dst_bipp))); | |
2429 | + | |
2430 | + /* if the destination buffer is not packed, and we just | |
2431 | + wrote the last pixel on this destination scanline: */ | |
2432 | + if (!dst_packed | |
2433 | + && (dst_x += 1) == dst_width) { | |
2434 | + | |
2435 | + /* calculate the number of bits between the | |
2436 | + last bit of the last pixel and the first bit | |
2437 | + of the first displayed pixel on the next | |
2438 | + scanline. this is equal to the number of | |
2439 | + pad bits plus bits for undisplayed pixels: */ | |
2440 | + dst_off = ((dst_bypl * 8) - (dst_width * dst_bipp)); | |
2441 | + | |
2442 | + /* while there are bits to shift: */ | |
2443 | + for (; dst_off > 0; dst_off -= TME_MIN(dst_off, 32)) { | |
2444 | + | |
2445 | + /* shift the destination primary FIFO: */ | |
2446 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
2447 | + dst_fifo0, | |
2448 | + dst_fifo0_next, | |
2449 | + dst_fifo0_bits, | |
2450 | + TME_MIN(dst_off, 32), | |
2451 | + dst_raw0, | |
2452 | + dst_order); | |
2453 | + } | |
2454 | + | |
2455 | + /* we are now on the first pixel of the next scanline: */ | |
2456 | + dst_x = 0; | |
2457 | + } | |
2458 | + | |
2459 | + /* shift the destination primary FIFO: */ | |
2460 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
2461 | + dst_fifo0, | |
2462 | + dst_fifo0_next, | |
2463 | + dst_fifo0_bits, | |
2464 | + 32, | |
2465 | + dst_raw0, | |
2466 | + dst_order); | |
2467 | + | |
2468 | + /* iter #18 */ | |
2469 | + | |
2470 | + /* get a pixel from the source primary FIFO: */ | |
2471 | + pixel = | |
2472 | + ((src_fifo0 | |
2473 | + >> (src_order == TME_ENDIAN_BIG | |
2474 | + ? (32 - (src_bipp + (18 * src_bipp))) | |
2475 | + : (18 * src_bipp)))); | |
2476 | + | |
2477 | + /* since source pixels are known at compile time to | |
2478 | + not have subfields, map the source pixel into the | |
2479 | + destination pixel: */ | |
2480 | + pixel = dst->tme_fb_connection_map_pixel[pixel & src_mask]; | |
2481 | + | |
2482 | + /* if the source buffer is not packed, and we just | |
2483 | + read the last pixel on this source scanline: */ | |
2484 | + if (!src_packed | |
2485 | + && ++src_x == src_width) { | |
2486 | + | |
2487 | + /* calculate the number of bits between the | |
2488 | + last bit of the last pixel and the first bit | |
2489 | + of the first displayed pixel on the next | |
2490 | + scanline. this is equal to the number of | |
2491 | + pad bits plus bits for undisplayed pixels: */ | |
2492 | + src_off = ((src_bypl * 8) - (src_width * src_bipp)); | |
2493 | + | |
2494 | + /* while there are bits to shift: */ | |
2495 | + for (; src_off > 0; src_off -= TME_MIN(src_off, 32)) { | |
2496 | + | |
2497 | + /* shift the source primary FIFO: */ | |
2498 | + TME_FB_XLAT_SHIFT_SRC(src_fifo0_may_be_unaligned, | |
2499 | + src_fifo0, | |
2500 | + src_fifo0_next, | |
2501 | + src_fifo0_bits, | |
2502 | + TME_MIN(src_off, 32), | |
2503 | + src_raw0, | |
2504 | + src_order); | |
2505 | + } | |
2506 | + | |
2507 | + /* we are now on the first pixel of the next scanline: */ | |
2508 | + src_x = 0; | |
2509 | + } | |
2510 | + | |
2511 | + /* put the pixel into the destination primary FIFO: */ | |
2512 | + dst_fifo0 |= | |
2513 | + (pixel | |
2514 | + << (dst_order == TME_ENDIAN_BIG | |
2515 | + ? ((32 - dst_bipp) - (0 * dst_bipp)) | |
2516 | + : (0 * dst_bipp))); | |
2517 | + | |
2518 | + /* if the destination buffer is not packed, and we just | |
2519 | + wrote the last pixel on this destination scanline: */ | |
2520 | + if (!dst_packed | |
2521 | + && (dst_x += 1) == dst_width) { | |
2522 | + | |
2523 | + /* calculate the number of bits between the | |
2524 | + last bit of the last pixel and the first bit | |
2525 | + of the first displayed pixel on the next | |
2526 | + scanline. this is equal to the number of | |
2527 | + pad bits plus bits for undisplayed pixels: */ | |
2528 | + dst_off = ((dst_bypl * 8) - (dst_width * dst_bipp)); | |
2529 | + | |
2530 | + /* while there are bits to shift: */ | |
2531 | + for (; dst_off > 0; dst_off -= TME_MIN(dst_off, 32)) { | |
2532 | + | |
2533 | + /* shift the destination primary FIFO: */ | |
2534 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
2535 | + dst_fifo0, | |
2536 | + dst_fifo0_next, | |
2537 | + dst_fifo0_bits, | |
2538 | + TME_MIN(dst_off, 32), | |
2539 | + dst_raw0, | |
2540 | + dst_order); | |
2541 | + } | |
2542 | + | |
2543 | + /* we are now on the first pixel of the next scanline: */ | |
2544 | + dst_x = 0; | |
2545 | + } | |
2546 | + | |
2547 | + /* shift the destination primary FIFO: */ | |
2548 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
2549 | + dst_fifo0, | |
2550 | + dst_fifo0_next, | |
2551 | + dst_fifo0_bits, | |
2552 | + 32, | |
2553 | + dst_raw0, | |
2554 | + dst_order); | |
2555 | + | |
2556 | + /* iter #19 */ | |
2557 | + | |
2558 | + /* get a pixel from the source primary FIFO: */ | |
2559 | + pixel = | |
2560 | + ((src_fifo0 | |
2561 | + >> (src_order == TME_ENDIAN_BIG | |
2562 | + ? (32 - (src_bipp + (19 * src_bipp))) | |
2563 | + : (19 * src_bipp)))); | |
2564 | + | |
2565 | + /* since source pixels are known at compile time to | |
2566 | + not have subfields, map the source pixel into the | |
2567 | + destination pixel: */ | |
2568 | + pixel = dst->tme_fb_connection_map_pixel[pixel & src_mask]; | |
2569 | + | |
2570 | + /* if the source buffer is not packed, and we just | |
2571 | + read the last pixel on this source scanline: */ | |
2572 | + if (!src_packed | |
2573 | + && ++src_x == src_width) { | |
2574 | + | |
2575 | + /* calculate the number of bits between the | |
2576 | + last bit of the last pixel and the first bit | |
2577 | + of the first displayed pixel on the next | |
2578 | + scanline. this is equal to the number of | |
2579 | + pad bits plus bits for undisplayed pixels: */ | |
2580 | + src_off = ((src_bypl * 8) - (src_width * src_bipp)); | |
2581 | + | |
2582 | + /* while there are bits to shift: */ | |
2583 | + for (; src_off > 0; src_off -= TME_MIN(src_off, 32)) { | |
2584 | + | |
2585 | + /* shift the source primary FIFO: */ | |
2586 | + TME_FB_XLAT_SHIFT_SRC(src_fifo0_may_be_unaligned, | |
2587 | + src_fifo0, | |
2588 | + src_fifo0_next, | |
2589 | + src_fifo0_bits, | |
2590 | + TME_MIN(src_off, 32), | |
2591 | + src_raw0, | |
2592 | + src_order); | |
2593 | + } | |
2594 | + | |
2595 | + /* we are now on the first pixel of the next scanline: */ | |
2596 | + src_x = 0; | |
2597 | + } | |
2598 | + | |
2599 | + /* put the pixel into the destination primary FIFO: */ | |
2600 | + dst_fifo0 |= | |
2601 | + (pixel | |
2602 | + << (dst_order == TME_ENDIAN_BIG | |
2603 | + ? ((32 - dst_bipp) - (0 * dst_bipp)) | |
2604 | + : (0 * dst_bipp))); | |
2605 | + | |
2606 | + /* if the destination buffer is not packed, and we just | |
2607 | + wrote the last pixel on this destination scanline: */ | |
2608 | + if (!dst_packed | |
2609 | + && (dst_x += 1) == dst_width) { | |
2610 | + | |
2611 | + /* calculate the number of bits between the | |
2612 | + last bit of the last pixel and the first bit | |
2613 | + of the first displayed pixel on the next | |
2614 | + scanline. this is equal to the number of | |
2615 | + pad bits plus bits for undisplayed pixels: */ | |
2616 | + dst_off = ((dst_bypl * 8) - (dst_width * dst_bipp)); | |
2617 | + | |
2618 | + /* while there are bits to shift: */ | |
2619 | + for (; dst_off > 0; dst_off -= TME_MIN(dst_off, 32)) { | |
2620 | + | |
2621 | + /* shift the destination primary FIFO: */ | |
2622 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
2623 | + dst_fifo0, | |
2624 | + dst_fifo0_next, | |
2625 | + dst_fifo0_bits, | |
2626 | + TME_MIN(dst_off, 32), | |
2627 | + dst_raw0, | |
2628 | + dst_order); | |
2629 | + } | |
2630 | + | |
2631 | + /* we are now on the first pixel of the next scanline: */ | |
2632 | + dst_x = 0; | |
2633 | + } | |
2634 | + | |
2635 | + /* shift the destination primary FIFO: */ | |
2636 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
2637 | + dst_fifo0, | |
2638 | + dst_fifo0_next, | |
2639 | + dst_fifo0_bits, | |
2640 | + 32, | |
2641 | + dst_raw0, | |
2642 | + dst_order); | |
2643 | + | |
2644 | + /* iter #20 */ | |
2645 | + | |
2646 | + /* get a pixel from the source primary FIFO: */ | |
2647 | + pixel = | |
2648 | + ((src_fifo0 | |
2649 | + >> (src_order == TME_ENDIAN_BIG | |
2650 | + ? (32 - (src_bipp + (20 * src_bipp))) | |
2651 | + : (20 * src_bipp)))); | |
2652 | + | |
2653 | + /* since source pixels are known at compile time to | |
2654 | + not have subfields, map the source pixel into the | |
2655 | + destination pixel: */ | |
2656 | + pixel = dst->tme_fb_connection_map_pixel[pixel & src_mask]; | |
2657 | + | |
2658 | + /* if the source buffer is not packed, and we just | |
2659 | + read the last pixel on this source scanline: */ | |
2660 | + if (!src_packed | |
2661 | + && ++src_x == src_width) { | |
2662 | + | |
2663 | + /* calculate the number of bits between the | |
2664 | + last bit of the last pixel and the first bit | |
2665 | + of the first displayed pixel on the next | |
2666 | + scanline. this is equal to the number of | |
2667 | + pad bits plus bits for undisplayed pixels: */ | |
2668 | + src_off = ((src_bypl * 8) - (src_width * src_bipp)); | |
2669 | + | |
2670 | + /* while there are bits to shift: */ | |
2671 | + for (; src_off > 0; src_off -= TME_MIN(src_off, 32)) { | |
2672 | + | |
2673 | + /* shift the source primary FIFO: */ | |
2674 | + TME_FB_XLAT_SHIFT_SRC(src_fifo0_may_be_unaligned, | |
2675 | + src_fifo0, | |
2676 | + src_fifo0_next, | |
2677 | + src_fifo0_bits, | |
2678 | + TME_MIN(src_off, 32), | |
2679 | + src_raw0, | |
2680 | + src_order); | |
2681 | + } | |
2682 | + | |
2683 | + /* we are now on the first pixel of the next scanline: */ | |
2684 | + src_x = 0; | |
2685 | + } | |
2686 | + | |
2687 | + /* put the pixel into the destination primary FIFO: */ | |
2688 | + dst_fifo0 |= | |
2689 | + (pixel | |
2690 | + << (dst_order == TME_ENDIAN_BIG | |
2691 | + ? ((32 - dst_bipp) - (0 * dst_bipp)) | |
2692 | + : (0 * dst_bipp))); | |
2693 | + | |
2694 | + /* if the destination buffer is not packed, and we just | |
2695 | + wrote the last pixel on this destination scanline: */ | |
2696 | + if (!dst_packed | |
2697 | + && (dst_x += 1) == dst_width) { | |
2698 | + | |
2699 | + /* calculate the number of bits between the | |
2700 | + last bit of the last pixel and the first bit | |
2701 | + of the first displayed pixel on the next | |
2702 | + scanline. this is equal to the number of | |
2703 | + pad bits plus bits for undisplayed pixels: */ | |
2704 | + dst_off = ((dst_bypl * 8) - (dst_width * dst_bipp)); | |
2705 | + | |
2706 | + /* while there are bits to shift: */ | |
2707 | + for (; dst_off > 0; dst_off -= TME_MIN(dst_off, 32)) { | |
2708 | + | |
2709 | + /* shift the destination primary FIFO: */ | |
2710 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
2711 | + dst_fifo0, | |
2712 | + dst_fifo0_next, | |
2713 | + dst_fifo0_bits, | |
2714 | + TME_MIN(dst_off, 32), | |
2715 | + dst_raw0, | |
2716 | + dst_order); | |
2717 | + } | |
2718 | + | |
2719 | + /* we are now on the first pixel of the next scanline: */ | |
2720 | + dst_x = 0; | |
2721 | + } | |
2722 | + | |
2723 | + /* shift the destination primary FIFO: */ | |
2724 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
2725 | + dst_fifo0, | |
2726 | + dst_fifo0_next, | |
2727 | + dst_fifo0_bits, | |
2728 | + 32, | |
2729 | + dst_raw0, | |
2730 | + dst_order); | |
2731 | + | |
2732 | + /* iter #21 */ | |
2733 | + | |
2734 | + /* get a pixel from the source primary FIFO: */ | |
2735 | + pixel = | |
2736 | + ((src_fifo0 | |
2737 | + >> (src_order == TME_ENDIAN_BIG | |
2738 | + ? (32 - (src_bipp + (21 * src_bipp))) | |
2739 | + : (21 * src_bipp)))); | |
2740 | + | |
2741 | + /* since source pixels are known at compile time to | |
2742 | + not have subfields, map the source pixel into the | |
2743 | + destination pixel: */ | |
2744 | + pixel = dst->tme_fb_connection_map_pixel[pixel & src_mask]; | |
2745 | + | |
2746 | + /* if the source buffer is not packed, and we just | |
2747 | + read the last pixel on this source scanline: */ | |
2748 | + if (!src_packed | |
2749 | + && ++src_x == src_width) { | |
2750 | + | |
2751 | + /* calculate the number of bits between the | |
2752 | + last bit of the last pixel and the first bit | |
2753 | + of the first displayed pixel on the next | |
2754 | + scanline. this is equal to the number of | |
2755 | + pad bits plus bits for undisplayed pixels: */ | |
2756 | + src_off = ((src_bypl * 8) - (src_width * src_bipp)); | |
2757 | + | |
2758 | + /* while there are bits to shift: */ | |
2759 | + for (; src_off > 0; src_off -= TME_MIN(src_off, 32)) { | |
2760 | + | |
2761 | + /* shift the source primary FIFO: */ | |
2762 | + TME_FB_XLAT_SHIFT_SRC(src_fifo0_may_be_unaligned, | |
2763 | + src_fifo0, | |
2764 | + src_fifo0_next, | |
2765 | + src_fifo0_bits, | |
2766 | + TME_MIN(src_off, 32), | |
2767 | + src_raw0, | |
2768 | + src_order); | |
2769 | + } | |
2770 | + | |
2771 | + /* we are now on the first pixel of the next scanline: */ | |
2772 | + src_x = 0; | |
2773 | + } | |
2774 | + | |
2775 | + /* put the pixel into the destination primary FIFO: */ | |
2776 | + dst_fifo0 |= | |
2777 | + (pixel | |
2778 | + << (dst_order == TME_ENDIAN_BIG | |
2779 | + ? ((32 - dst_bipp) - (0 * dst_bipp)) | |
2780 | + : (0 * dst_bipp))); | |
2781 | + | |
2782 | + /* if the destination buffer is not packed, and we just | |
2783 | + wrote the last pixel on this destination scanline: */ | |
2784 | + if (!dst_packed | |
2785 | + && (dst_x += 1) == dst_width) { | |
2786 | + | |
2787 | + /* calculate the number of bits between the | |
2788 | + last bit of the last pixel and the first bit | |
2789 | + of the first displayed pixel on the next | |
2790 | + scanline. this is equal to the number of | |
2791 | + pad bits plus bits for undisplayed pixels: */ | |
2792 | + dst_off = ((dst_bypl * 8) - (dst_width * dst_bipp)); | |
2793 | + | |
2794 | + /* while there are bits to shift: */ | |
2795 | + for (; dst_off > 0; dst_off -= TME_MIN(dst_off, 32)) { | |
2796 | + | |
2797 | + /* shift the destination primary FIFO: */ | |
2798 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
2799 | + dst_fifo0, | |
2800 | + dst_fifo0_next, | |
2801 | + dst_fifo0_bits, | |
2802 | + TME_MIN(dst_off, 32), | |
2803 | + dst_raw0, | |
2804 | + dst_order); | |
2805 | + } | |
2806 | + | |
2807 | + /* we are now on the first pixel of the next scanline: */ | |
2808 | + dst_x = 0; | |
2809 | + } | |
2810 | + | |
2811 | + /* shift the destination primary FIFO: */ | |
2812 | + TME_FB_XLAT_SHIFT_DST(dst_fifo0_may_be_unaligned, | |
2813 | + |