25 |
* SUCH DAMAGE. |
* SUCH DAMAGE. |
26 |
* |
* |
27 |
* |
* |
28 |
* $Id: machine_test.c,v 1.13 2006/06/12 10:21:12 debug Exp $ |
* $Id: machine_test.c,v 1.22 2006/10/25 09:24:06 debug Exp $ |
29 |
* |
* |
30 |
* Various "test" machines (bare machines with just a CPU, or a bare machine |
* Various "test" machines (bare machines with just a CPU, or a bare machine |
31 |
* plus some experimental devices). |
* plus some experimental devices). |
46 |
#include "testmachine/dev_ether.h" |
#include "testmachine/dev_ether.h" |
47 |
#include "testmachine/dev_fb.h" |
#include "testmachine/dev_fb.h" |
48 |
#include "testmachine/dev_mp.h" |
#include "testmachine/dev_mp.h" |
49 |
|
#include "testmachine/dev_rtc.h" |
50 |
|
|
51 |
|
|
52 |
static void default_test(struct machine *machine, struct cpu *cpu) |
static void default_test(struct machine *machine, struct cpu *cpu) |
61 |
(uint64_t) DEV_MP_ADDRESS); |
(uint64_t) DEV_MP_ADDRESS); |
62 |
device_add(machine, tmpstr); |
device_add(machine, tmpstr); |
63 |
|
|
64 |
dev_fb_init(machine, machine->memory, DEV_FB_ADDRESS, VFB_GENERIC, |
snprintf(tmpstr, sizeof(tmpstr), "fbctrl addr=0x%"PRIx64, |
65 |
640,480, 640,480, 24, "generic"); |
(uint64_t) DEV_FBCTRL_ADDRESS); |
66 |
|
device_add(machine, tmpstr); |
67 |
|
|
68 |
snprintf(tmpstr, sizeof(tmpstr), "disk addr=0x%"PRIx64, |
snprintf(tmpstr, sizeof(tmpstr), "disk addr=0x%"PRIx64, |
69 |
(uint64_t) DEV_DISK_ADDRESS); |
(uint64_t) DEV_DISK_ADDRESS); |
72 |
snprintf(tmpstr, sizeof(tmpstr), "ether addr=0x%"PRIx64" irq=0", |
snprintf(tmpstr, sizeof(tmpstr), "ether addr=0x%"PRIx64" irq=0", |
73 |
(uint64_t) DEV_ETHER_ADDRESS); |
(uint64_t) DEV_ETHER_ADDRESS); |
74 |
device_add(machine, tmpstr); |
device_add(machine, tmpstr); |
75 |
|
|
76 |
|
snprintf(tmpstr, sizeof(tmpstr), "rtc addr=0x%"PRIx64" irq=0", |
77 |
|
(uint64_t) DEV_RTC_ADDRESS); |
78 |
|
device_add(machine, tmpstr); |
79 |
} |
} |
80 |
|
|
81 |
|
|
112 |
MACHINE_REGISTER(barealpha) |
MACHINE_REGISTER(barealpha) |
113 |
{ |
{ |
114 |
MR_DEFAULT(barealpha, "Generic \"bare\" Alpha machine", |
MR_DEFAULT(barealpha, "Generic \"bare\" Alpha machine", |
115 |
ARCH_ALPHA, MACHINE_BAREALPHA, 1, 0); |
ARCH_ALPHA, MACHINE_BAREALPHA); |
116 |
me->aliases[0] = "barealpha"; |
|
117 |
machine_entry_add(me, ARCH_ALPHA); |
machine_entry_add_alias(me, "barealpha"); |
118 |
} |
} |
119 |
|
|
120 |
|
|
121 |
MACHINE_REGISTER(testalpha) |
MACHINE_REGISTER(testalpha) |
122 |
{ |
{ |
123 |
MR_DEFAULT(testalpha, "Test-machine for Alpha", |
MR_DEFAULT(testalpha, "Test-machine for Alpha", |
124 |
ARCH_ALPHA, MACHINE_TESTALPHA, 1, 0); |
ARCH_ALPHA, MACHINE_TESTALPHA); |
125 |
me->aliases[0] = "testalpha"; |
|
126 |
machine_entry_add(me, ARCH_ALPHA); |
machine_entry_add_alias(me, "testalpha"); |
127 |
} |
} |
128 |
|
|
129 |
|
|
171 |
MACHINE_REGISTER(barearm) |
MACHINE_REGISTER(barearm) |
172 |
{ |
{ |
173 |
MR_DEFAULT(barearm, "Generic \"bare\" ARM machine", |
MR_DEFAULT(barearm, "Generic \"bare\" ARM machine", |
174 |
ARCH_ARM, MACHINE_BAREARM, 1, 0); |
ARCH_ARM, MACHINE_BAREARM); |
175 |
me->aliases[0] = "barearm"; |
|
176 |
machine_entry_add(me, ARCH_ARM); |
machine_entry_add_alias(me, "barearm"); |
177 |
} |
} |
178 |
|
|
179 |
|
|
180 |
MACHINE_REGISTER(testarm) |
MACHINE_REGISTER(testarm) |
181 |
{ |
{ |
182 |
MR_DEFAULT(testarm, "Test-machine for ARM", |
MR_DEFAULT(testarm, "Test-machine for ARM", ARCH_ARM, MACHINE_TESTARM); |
183 |
ARCH_ARM, MACHINE_TESTARM, 1, 0); |
|
184 |
me->aliases[0] = "testarm"; |
machine_entry_add_alias(me, "testarm"); |
185 |
machine_entry_add(me, ARCH_ARM); |
} |
186 |
|
|
187 |
|
|
188 |
|
|
189 |
|
MACHINE_SETUP(bareavr32) |
190 |
|
{ |
191 |
|
machine->machine_name = "Generic \"bare\" AVR32 machine"; |
192 |
|
machine->stable = 1; |
193 |
|
} |
194 |
|
|
195 |
|
|
196 |
|
MACHINE_SETUP(testavr32) |
197 |
|
{ |
198 |
|
machine->machine_name = "AVR32 test machine"; |
199 |
|
machine->stable = 1; |
200 |
|
|
201 |
|
/* TODO: interrupts */ |
202 |
|
|
203 |
|
default_test(machine, cpu); |
204 |
|
} |
205 |
|
|
206 |
|
|
207 |
|
MACHINE_DEFAULT_CPU(bareavr32) |
208 |
|
{ |
209 |
|
machine->cpu_name = strdup("AVR32A"); |
210 |
|
} |
211 |
|
|
212 |
|
|
213 |
|
MACHINE_DEFAULT_CPU(testavr32) |
214 |
|
{ |
215 |
|
machine->cpu_name = strdup("AVR32A"); |
216 |
} |
} |
217 |
|
|
218 |
|
|
219 |
|
MACHINE_REGISTER(bareavr32) |
220 |
|
{ |
221 |
|
MR_DEFAULT(bareavr32, "Generic \"bare\" AVR32 machine", |
222 |
|
ARCH_AVR32, MACHINE_BAREAVR32); |
223 |
|
|
224 |
|
machine_entry_add_alias(me, "bareavr32"); |
225 |
|
} |
226 |
|
|
227 |
|
|
228 |
|
MACHINE_REGISTER(testavr32) |
229 |
|
{ |
230 |
|
MR_DEFAULT(testavr32, "Test-machine for AVR32", |
231 |
|
ARCH_AVR32, MACHINE_TESTAVR32); |
232 |
|
|
233 |
|
machine_entry_add_alias(me, "testavr32"); |
234 |
|
} |
235 |
|
|
236 |
|
|
237 |
MACHINE_SETUP(barehppa) |
MACHINE_SETUP(barehppa) |
238 |
{ |
{ |
267 |
MACHINE_REGISTER(barehppa) |
MACHINE_REGISTER(barehppa) |
268 |
{ |
{ |
269 |
MR_DEFAULT(barehppa, "Generic \"bare\" HPPA machine", |
MR_DEFAULT(barehppa, "Generic \"bare\" HPPA machine", |
270 |
ARCH_HPPA, MACHINE_BAREHPPA, 1, 0); |
ARCH_HPPA, MACHINE_BAREHPPA); |
271 |
me->aliases[0] = "barehppa"; |
|
272 |
machine_entry_add(me, ARCH_HPPA); |
machine_entry_add_alias(me, "barehppa"); |
273 |
} |
} |
274 |
|
|
275 |
|
|
276 |
MACHINE_REGISTER(testhppa) |
MACHINE_REGISTER(testhppa) |
277 |
{ |
{ |
278 |
MR_DEFAULT(testhppa, "Test-machine for HPPA", |
MR_DEFAULT(testhppa, "Test-machine for HPPA", |
279 |
ARCH_HPPA, MACHINE_TESTHPPA, 1, 0); |
ARCH_HPPA, MACHINE_TESTHPPA); |
280 |
me->aliases[0] = "testhppa"; |
|
281 |
machine_entry_add(me, ARCH_HPPA); |
machine_entry_add_alias(me, "testhppa"); |
282 |
} |
} |
283 |
|
|
284 |
|
|
315 |
MACHINE_REGISTER(barei960) |
MACHINE_REGISTER(barei960) |
316 |
{ |
{ |
317 |
MR_DEFAULT(barei960, "Generic \"bare\" i960 machine", |
MR_DEFAULT(barei960, "Generic \"bare\" i960 machine", |
318 |
ARCH_I960, MACHINE_BAREI960, 1, 0); |
ARCH_I960, MACHINE_BAREI960); |
319 |
me->aliases[0] = "barei960"; |
|
320 |
machine_entry_add(me, ARCH_I960); |
machine_entry_add_alias(me, "barei960"); |
321 |
} |
} |
322 |
|
|
323 |
|
|
324 |
MACHINE_REGISTER(testi960) |
MACHINE_REGISTER(testi960) |
325 |
{ |
{ |
326 |
MR_DEFAULT(testi960, "Test-machine for i960", |
MR_DEFAULT(testi960, "Test-machine for i960", |
327 |
ARCH_I960, MACHINE_TESTI960, 1, 0); |
ARCH_I960, MACHINE_TESTI960); |
328 |
me->aliases[0] = "testi960"; |
|
329 |
machine_entry_add(me, ARCH_I960); |
machine_entry_add_alias(me, "testi960"); |
330 |
} |
} |
331 |
|
|
332 |
|
|
363 |
MACHINE_REGISTER(bareia64) |
MACHINE_REGISTER(bareia64) |
364 |
{ |
{ |
365 |
MR_DEFAULT(bareia64, "Generic \"bare\" IA64 machine", |
MR_DEFAULT(bareia64, "Generic \"bare\" IA64 machine", |
366 |
ARCH_IA64, MACHINE_BAREIA64, 1, 0); |
ARCH_IA64, MACHINE_BAREIA64); |
367 |
me->aliases[0] = "bareia64"; |
|
368 |
machine_entry_add(me, ARCH_IA64); |
machine_entry_add_alias(me, "bareia64"); |
369 |
} |
} |
370 |
|
|
371 |
|
|
372 |
MACHINE_REGISTER(testia64) |
MACHINE_REGISTER(testia64) |
373 |
{ |
{ |
374 |
MR_DEFAULT(testia64, "Test-machine for IA64", |
MR_DEFAULT(testia64, "Test-machine for IA64", |
375 |
ARCH_IA64, MACHINE_TESTIA64, 1, 0); |
ARCH_IA64, MACHINE_TESTIA64); |
376 |
me->aliases[0] = "testia64"; |
|
377 |
machine_entry_add(me, ARCH_IA64); |
machine_entry_add_alias(me, "testia64"); |
378 |
} |
} |
379 |
|
|
380 |
|
|
411 |
MACHINE_REGISTER(barem68k) |
MACHINE_REGISTER(barem68k) |
412 |
{ |
{ |
413 |
MR_DEFAULT(barem68k, "Generic \"bare\" M68K machine", |
MR_DEFAULT(barem68k, "Generic \"bare\" M68K machine", |
414 |
ARCH_M68K, MACHINE_BAREM68K, 1, 0); |
ARCH_M68K, MACHINE_BAREM68K); |
415 |
me->aliases[0] = "barem68k"; |
|
416 |
machine_entry_add(me, ARCH_M68K); |
machine_entry_add_alias(me, "barem68k"); |
417 |
} |
} |
418 |
|
|
419 |
|
|
420 |
MACHINE_REGISTER(testm68k) |
MACHINE_REGISTER(testm68k) |
421 |
{ |
{ |
422 |
MR_DEFAULT(testm68k, "Test-machine for M68K", |
MR_DEFAULT(testm68k, "Test-machine for M68K", |
423 |
ARCH_M68K, MACHINE_TESTM68K, 1, 0); |
ARCH_M68K, MACHINE_TESTM68K); |
424 |
me->aliases[0] = "testm68k"; |
|
425 |
machine_entry_add(me, ARCH_M68K); |
machine_entry_add_alias(me, "testm68k"); |
426 |
} |
} |
427 |
|
|
428 |
|
|
444 |
* 7 CPU counter |
* 7 CPU counter |
445 |
* 6 SMP IPIs |
* 6 SMP IPIs |
446 |
* 5 not used yet |
* 5 not used yet |
447 |
* 4 not used yet |
* 4 rtc |
448 |
* 3 ethernet |
* 3 ethernet |
449 |
* 2 serial console |
* 2 serial console |
450 |
*/ |
*/ |
463 |
(uint64_t) DEV_MP_ADDRESS); |
(uint64_t) DEV_MP_ADDRESS); |
464 |
device_add(machine, tmpstr); |
device_add(machine, tmpstr); |
465 |
|
|
466 |
dev_fb_init(machine, machine->memory, DEV_FB_ADDRESS, VFB_GENERIC, |
snprintf(tmpstr, sizeof(tmpstr), "fbctrl addr=0x%"PRIx64, |
467 |
640,480, 640,480, 24, "testmips generic"); |
(uint64_t) DEV_FBCTRL_ADDRESS); |
468 |
|
device_add(machine, tmpstr); |
469 |
|
|
470 |
snprintf(tmpstr, sizeof(tmpstr), "disk addr=0x%"PRIx64, |
snprintf(tmpstr, sizeof(tmpstr), "disk addr=0x%"PRIx64, |
471 |
(uint64_t) DEV_DISK_ADDRESS); |
(uint64_t) DEV_DISK_ADDRESS); |
474 |
snprintf(tmpstr, sizeof(tmpstr), "ether addr=0x%"PRIx64" irq=3", |
snprintf(tmpstr, sizeof(tmpstr), "ether addr=0x%"PRIx64" irq=3", |
475 |
(uint64_t) DEV_ETHER_ADDRESS); |
(uint64_t) DEV_ETHER_ADDRESS); |
476 |
device_add(machine, tmpstr); |
device_add(machine, tmpstr); |
477 |
|
|
478 |
|
snprintf(tmpstr, sizeof(tmpstr), "rtc addr=0x%"PRIx64" irq=4", |
479 |
|
(uint64_t) DEV_RTC_ADDRESS); |
480 |
|
device_add(machine, tmpstr); |
481 |
} |
} |
482 |
|
|
483 |
|
|
496 |
MACHINE_REGISTER(baremips) |
MACHINE_REGISTER(baremips) |
497 |
{ |
{ |
498 |
MR_DEFAULT(baremips, "Generic \"bare\" MIPS machine", |
MR_DEFAULT(baremips, "Generic \"bare\" MIPS machine", |
499 |
ARCH_MIPS, MACHINE_BAREMIPS, 1, 0); |
ARCH_MIPS, MACHINE_BAREMIPS); |
500 |
me->aliases[0] = "baremips"; |
|
501 |
machine_entry_add(me, ARCH_MIPS); |
machine_entry_add_alias(me, "baremips"); |
502 |
} |
} |
503 |
|
|
504 |
|
|
505 |
MACHINE_REGISTER(testmips) |
MACHINE_REGISTER(testmips) |
506 |
{ |
{ |
507 |
MR_DEFAULT(testmips, "Test-machine for MIPS", |
MR_DEFAULT(testmips, "Test-machine for MIPS", |
508 |
ARCH_MIPS, MACHINE_TESTMIPS, 1, 0); |
ARCH_MIPS, MACHINE_TESTMIPS); |
509 |
me->aliases[0] = "testmips"; |
|
510 |
machine_entry_add(me, ARCH_MIPS); |
machine_entry_add_alias(me, "testmips"); |
511 |
} |
} |
512 |
|
|
513 |
|
|
544 |
MACHINE_REGISTER(bareppc) |
MACHINE_REGISTER(bareppc) |
545 |
{ |
{ |
546 |
MR_DEFAULT(bareppc, "Generic \"bare\" PPC machine", |
MR_DEFAULT(bareppc, "Generic \"bare\" PPC machine", |
547 |
ARCH_PPC, MACHINE_BAREPPC, 1, 0); |
ARCH_PPC, MACHINE_BAREPPC); |
548 |
me->aliases[0] = "bareppc"; |
|
549 |
machine_entry_add(me, ARCH_PPC); |
machine_entry_add_alias(me, "bareppc"); |
550 |
} |
} |
551 |
|
|
552 |
|
|
553 |
MACHINE_REGISTER(testppc) |
MACHINE_REGISTER(testppc) |
554 |
{ |
{ |
555 |
MR_DEFAULT(testppc, "Test-machine for PPC", |
MR_DEFAULT(testppc, "Test-machine for PPC", ARCH_PPC, MACHINE_TESTPPC); |
556 |
ARCH_PPC, MACHINE_TESTPPC, 1, 0); |
|
557 |
me->aliases[0] = "testppc"; |
machine_entry_add_alias(me, "testppc"); |
|
machine_entry_add(me, ARCH_PPC); |
|
558 |
} |
} |
559 |
|
|
560 |
|
|
578 |
|
|
579 |
MACHINE_DEFAULT_CPU(baresh) |
MACHINE_DEFAULT_CPU(baresh) |
580 |
{ |
{ |
581 |
machine->cpu_name = strdup("SH"); |
machine->cpu_name = strdup("SH7750"); |
582 |
} |
} |
583 |
|
|
584 |
|
|
585 |
MACHINE_DEFAULT_CPU(testsh) |
MACHINE_DEFAULT_CPU(testsh) |
586 |
{ |
{ |
587 |
machine->cpu_name = strdup("SH"); |
machine->cpu_name = strdup("SH7750"); |
588 |
} |
} |
589 |
|
|
590 |
|
|
591 |
MACHINE_REGISTER(baresh) |
MACHINE_REGISTER(baresh) |
592 |
{ |
{ |
593 |
MR_DEFAULT(baresh, "Generic \"bare\" SH machine", |
MR_DEFAULT(baresh, "Generic \"bare\" SH machine", |
594 |
ARCH_SH, MACHINE_BARESH, 1, 0); |
ARCH_SH, MACHINE_BARESH); |
595 |
me->aliases[0] = "baresh"; |
|
596 |
machine_entry_add(me, ARCH_SH); |
machine_entry_add_alias(me, "baresh"); |
597 |
} |
} |
598 |
|
|
599 |
|
|
600 |
MACHINE_REGISTER(testsh) |
MACHINE_REGISTER(testsh) |
601 |
{ |
{ |
602 |
MR_DEFAULT(testsh, "Test-machine for SH", |
MR_DEFAULT(testsh, "Test-machine for SH", ARCH_SH, MACHINE_TESTSH); |
603 |
ARCH_SH, MACHINE_TESTSH, 1, 0); |
|
604 |
me->aliases[0] = "testsh"; |
machine_entry_add_alias(me, "testsh"); |
|
machine_entry_add(me, ARCH_SH); |
|
605 |
} |
} |
606 |
|
|
607 |
|
|
638 |
MACHINE_REGISTER(baresparc) |
MACHINE_REGISTER(baresparc) |
639 |
{ |
{ |
640 |
MR_DEFAULT(baresparc, "Generic \"bare\" SPARC machine", |
MR_DEFAULT(baresparc, "Generic \"bare\" SPARC machine", |
641 |
ARCH_SPARC, MACHINE_BARESPARC, 1, 0); |
ARCH_SPARC, MACHINE_BARESPARC); |
642 |
me->aliases[0] = "baresparc"; |
|
643 |
machine_entry_add(me, ARCH_SPARC); |
machine_entry_add_alias(me, "baresparc"); |
644 |
} |
} |
645 |
|
|
646 |
|
|
647 |
MACHINE_REGISTER(testsparc) |
MACHINE_REGISTER(testsparc) |
648 |
{ |
{ |
649 |
MR_DEFAULT(testsparc, "Test-machine for SPARC", |
MR_DEFAULT(testsparc, "Test-machine for SPARC", |
650 |
ARCH_SPARC, MACHINE_TESTSPARC, 1, 0); |
ARCH_SPARC, MACHINE_TESTSPARC); |
651 |
me->aliases[0] = "testsparc"; |
|
652 |
machine_entry_add(me, ARCH_SPARC); |
machine_entry_add_alias(me, "testsparc"); |
653 |
|
} |
654 |
|
|
655 |
|
|
656 |
|
MACHINE_SETUP(baretransputer) |
657 |
|
{ |
658 |
|
machine->machine_name = "Generic \"bare\" Transputer machine"; |
659 |
|
machine->stable = 1; |
660 |
|
} |
661 |
|
|
662 |
|
|
663 |
|
MACHINE_DEFAULT_CPU(baretransputer) |
664 |
|
{ |
665 |
|
machine->cpu_name = strdup("T800"); |
666 |
|
} |
667 |
|
|
668 |
|
|
669 |
|
MACHINE_REGISTER(baretransputer) |
670 |
|
{ |
671 |
|
MR_DEFAULT(baretransputer, "Generic \"bare\" Transputer machine", |
672 |
|
ARCH_TRANSPUTER, MACHINE_BARETRANSPUTER); |
673 |
|
|
674 |
|
machine_entry_add_alias(me, "baretransputer"); |
675 |
} |
} |
676 |
|
|