fs.py revision 2889
12158SN/Aimport optparse, os, sys 22158SN/A 32158SN/Aimport m5 42158SN/Afrom m5.objects import * 52158SN/Afrom SysPaths import * 62158SN/A 72158SN/Aparser = optparse.OptionParser() 82158SN/A 92158SN/Aparser.add_option("-t", "--timing", action="store_true") 102158SN/A 112158SN/A(options, args) = parser.parse_args() 122158SN/A 132158SN/Aif args: 142158SN/A print "Error: script doesn't take any positional arguments" 152158SN/A sys.exit(1) 162158SN/A 172158SN/A# Base for tests is directory containing this file. 182158SN/Atest_base = os.path.dirname(__file__) 192158SN/A 202158SN/Alinux_image = env.get('LINUX_IMAGE', disk('linux-latest.img')) 212158SN/A 222158SN/Aclass IdeControllerPciData(PciConfigData): 232158SN/A VendorID = 0x8086 242158SN/A DeviceID = 0x7111 252158SN/A Command = 0x0 262158SN/A Status = 0x280 272665Ssaidi@eecs.umich.edu Revision = 0x0 282665Ssaidi@eecs.umich.edu ClassCode = 0x01 292760Sbinkertn@umich.edu SubClassCode = 0x01 302158SN/A ProgIF = 0x85 312158SN/A BAR0 = 0x00000001 323567Sgblack@eecs.umich.edu BAR1 = 0x00000001 333567Sgblack@eecs.umich.edu BAR2 = 0x00000001 342432SN/A BAR3 = 0x00000001 352158SN/A BAR4 = 0x00000001 363536Sgblack@eecs.umich.edu BAR5 = 0x00000001 372215SN/A InterruptLine = 0x1f 382158SN/A InterruptPin = 0x01 392158SN/A BAR0Size = '8B' 402158SN/A BAR1Size = '4B' 412521SN/A BAR2Size = '8B' 424762Snate@binkert.org BAR3Size = '4B' 432158SN/A BAR4Size = '16B' 442158SN/A 452158SN/Aclass SinicPciData(PciConfigData): 462158SN/A VendorID = 0x1291 472158SN/A DeviceID = 0x1293 482158SN/A Status = 0x0290 492158SN/A SubClassCode = 0x00 502158SN/A ClassCode = 0x02 512158SN/A ProgIF = 0x00 522158SN/A BAR0 = 0x00000000 532158SN/A BAR1 = 0x00000000 542158SN/A BAR2 = 0x00000000 552158SN/A BAR3 = 0x00000000 562158SN/A BAR4 = 0x00000000 572158SN/A BAR5 = 0x00000000 582158SN/A MaximumLatency = 0x34 594762Snate@binkert.org MinimumGrant = 0xb0 602158SN/A InterruptLine = 0x1e 614762Snate@binkert.org InterruptPin = 0x01 622158SN/A BAR0Size = '64kB' 632158SN/A 644762Snate@binkert.orgclass NSGigEPciData(PciConfigData): 652158SN/A VendorID = 0x100B 664762Snate@binkert.org DeviceID = 0x0022 672158SN/A Status = 0x0290 682158SN/A SubClassCode = 0x00 692158SN/A ClassCode = 0x02 702521SN/A ProgIF = 0x00 712521SN/A BAR0 = 0x00000001 722158SN/A BAR1 = 0x00000000 732158SN/A BAR2 = 0x00000000 742158SN/A BAR3 = 0x00000000 752158SN/A BAR4 = 0x00000000 762158SN/A BAR5 = 0x00000000 772158SN/A MaximumLatency = 0x34 782158SN/A MinimumGrant = 0xb0 792158SN/A InterruptLine = 0x1e 802158SN/A InterruptPin = 0x01 812158SN/A BAR0Size = '256B' 822158SN/A BAR1Size = '4kB' 832158SN/A 842158SN/Aclass LinuxRootDisk(IdeDisk): 852158SN/A raw_image = RawDiskImage(image_file=linux_image, read_only=True) 862158SN/A image = CowDiskImage(child=Parent.raw_image, read_only=False) 872158SN/A 882158SN/Aclass LinuxSwapDisk(IdeDisk): 892158SN/A raw_image = RawDiskImage(image_file = disk('linux-bigswap2.img'), 902158SN/A read_only=True) 912158SN/A image = CowDiskImage(child = Parent.raw_image, read_only=False) 922158SN/A 932158SN/Aclass SpecwebFilesetDisk(IdeDisk): 942158SN/A raw_image = RawDiskImage(image_file = disk('specweb-fileset.img'), 952158SN/A read_only=True) 962158SN/A image = CowDiskImage(child = Parent.raw_image, read_only=False) 972158SN/A 982158SN/Aclass BaseTsunami(Tsunami): 992158SN/A cchip = TsunamiCChip(pio_addr=0x801a0000000) 1002158SN/A pchip = TsunamiPChip(pio_addr=0x80180000000) 1012158SN/A pciconfig = PciConfigAll() 1022158SN/A fake_sm_chip = IsaFake(pio_addr=0x801fc000370) 1032158SN/A 1042521SN/A fake_uart1 = IsaFake(pio_addr=0x801fc0002f8) 1052521SN/A fake_uart2 = IsaFake(pio_addr=0x801fc0003e8) 1062158SN/A fake_uart3 = IsaFake(pio_addr=0x801fc0002e8) 1072158SN/A fake_uart4 = IsaFake(pio_addr=0x801fc0003f0) 1082158SN/A 1092158SN/A fake_ppc = IsaFake(pio_addr=0x801fc0003bc) 1102158SN/A 1112158SN/A fake_OROM = IsaFake(pio_addr=0x800000a0000, pio_size=0x60000) 1122158SN/A 1132521SN/A fake_pnp_addr = IsaFake(pio_addr=0x801fc000279) 1142521SN/A fake_pnp_write = IsaFake(pio_addr=0x801fc000a79) 1152549SN/A fake_pnp_read0 = IsaFake(pio_addr=0x801fc000203) 1162521SN/A fake_pnp_read1 = IsaFake(pio_addr=0x801fc000243) 1172549SN/A fake_pnp_read2 = IsaFake(pio_addr=0x801fc000283) 1182158SN/A fake_pnp_read3 = IsaFake(pio_addr=0x801fc0002c3) 1192158SN/A fake_pnp_read4 = IsaFake(pio_addr=0x801fc000303) 1202158SN/A fake_pnp_read5 = IsaFake(pio_addr=0x801fc000343) 1212158SN/A fake_pnp_read6 = IsaFake(pio_addr=0x801fc000383) 1222158SN/A fake_pnp_read7 = IsaFake(pio_addr=0x801fc0003c3) 1232158SN/A 1242158SN/A fake_ata0 = IsaFake(pio_addr=0x801fc0001f0) 1252158SN/A fake_ata1 = IsaFake(pio_addr=0x801fc000170) 1262158SN/A 1272158SN/A fb = BadDevice(pio_addr=0x801fc0003d0, devicename='FrameBuffer') 1282158SN/A io = TsunamiIO(pio_addr=0x801fc000000) 1292158SN/A uart = Uart8250(pio_addr=0x801fc0003f8) 1302158SN/A ethernet = NSGigE(configdata=NSGigEPciData(), 1312158SN/A pci_bus=0, pci_dev=1, pci_func=0) 1322158SN/A etherint = NSGigEInt(device=Parent.ethernet) 1332158SN/A console = AlphaConsole(pio_addr=0x80200000000, disk=Parent.simple_disk) 1342158SN/A 1352158SN/Aclass LinuxTsunami(BaseTsunami): 1362158SN/A disk0 = LinuxRootDisk(driveID='master') 1372158SN/A disk1 = SpecwebFilesetDisk(driveID='slave') 1382158SN/A disk2 = LinuxSwapDisk(driveID='master') 1392158SN/A ide = IdeController(disks=[Parent.disk0, Parent.disk1, Parent.disk2], 1402158SN/A configdata=IdeControllerPciData(), 1412158SN/A pci_func=0, pci_dev=0, pci_bus=0) 1422158SN/A 1432158SN/Aclass MyLinuxAlphaSystem(LinuxAlphaSystem): 1442158SN/A magicbus = Bus(bus_id=0) 1452158SN/A magicbus2 = Bus(bus_id=1) 1462158SN/A bridge = Bridge() 1472158SN/A physmem = PhysicalMemory(range = AddrRange('128MB')) 1482158SN/A bridge.side_a = magicbus.port 1492158SN/A bridge.side_b = magicbus2.port 1502158SN/A physmem.port = magicbus2.port 1512158SN/A tsunami = LinuxTsunami() 1522158SN/A tsunami.cchip.pio = magicbus.port 1532158SN/A tsunami.pchip.pio = magicbus.port 1542158SN/A tsunami.pciconfig.pio = magicbus.default 1552158SN/A tsunami.fake_sm_chip.pio = magicbus.port 1562158SN/A tsunami.ethernet.pio = magicbus.port 1572158SN/A tsunami.ethernet.dma = magicbus.port 1582158SN/A tsunami.ethernet.config = magicbus.port 1592158SN/A tsunami.fake_uart1.pio = magicbus.port 1602158SN/A tsunami.fake_uart2.pio = magicbus.port 1612158SN/A tsunami.fake_uart3.pio = magicbus.port 1622158SN/A tsunami.fake_uart4.pio = magicbus.port 1632158SN/A tsunami.ide.pio = magicbus.port 1642158SN/A tsunami.ide.dma = magicbus.port 1652158SN/A tsunami.ide.config = magicbus.port 1662158SN/A tsunami.fake_ppc.pio = magicbus.port 1672158SN/A tsunami.fake_OROM.pio = magicbus.port 1682158SN/A tsunami.fake_pnp_addr.pio = magicbus.port 1692158SN/A tsunami.fake_pnp_write.pio = magicbus.port 1702158SN/A tsunami.fake_pnp_read0.pio = magicbus.port 1712158SN/A tsunami.fake_pnp_read1.pio = magicbus.port 1722158SN/A tsunami.fake_pnp_read2.pio = magicbus.port 1732158SN/A tsunami.fake_pnp_read3.pio = magicbus.port 1742521SN/A tsunami.fake_pnp_read4.pio = magicbus.port 1752521SN/A tsunami.fake_pnp_read5.pio = magicbus.port 1762158SN/A tsunami.fake_pnp_read6.pio = magicbus.port 1772158SN/A tsunami.fake_pnp_read7.pio = magicbus.port 1782158SN/A tsunami.fake_ata0.pio = magicbus.port 1792521SN/A tsunami.fake_ata1.pio = magicbus.port 1802158SN/A tsunami.fb.pio = magicbus.port 1812158SN/A tsunami.io.pio = magicbus.port 1822158SN/A tsunami.uart.pio = magicbus.port 1832158SN/A tsunami.console.pio = magicbus.port 1842158SN/A raw_image = RawDiskImage(image_file=disk('linux-latest.img'), 1852158SN/A read_only=True) 1862158SN/A simple_disk = SimpleDisk(disk=Parent.raw_image) 1872158SN/A intrctrl = IntrControl() 1882158SN/A if options.timing: 1892158SN/A cpu = TimingSimpleCPU() 1902158SN/A else: 1912158SN/A cpu = AtomicSimpleCPU() 1922158SN/A cpu.mem = magicbus2 1932521SN/A cpu.icache_port = magicbus2.port 1942158SN/A cpu.dcache_port = magicbus2.port 1952158SN/A cpu.itb = AlphaITB() 1962158SN/A cpu.dtb = AlphaDTB() 1972158SN/A sim_console = SimConsole(listener=ConsoleListener(port=3456)) 1982158SN/A kernel = binary('vmlinux') 1992158SN/A pal = binary('ts_osfpal') 2002158SN/A console = binary('console') 2012158SN/A boot_osflags = 'root=/dev/hda1 console=ttyS0' 2022158SN/A# readfile = os.path.join(test_base, 'halt.sh') 2032158SN/A 2042158SN/A 2052158SN/A 2062158SN/Aclass TsunamiRoot(System): 2072158SN/A pass 2082158SN/A 2092158SN/A 2102158SN/Adef DualRoot(clientSystem, serverSystem): 2112158SN/A self = Root() 2122158SN/A self.client = clientSystem 2132158SN/A self.server = serverSystem 2142158SN/A 2154762Snate@binkert.org self.etherdump = EtherDump(file='ethertrace') 2164762Snate@binkert.org self.etherlink = EtherLink(int1 = Parent.client.tsunami.etherint[0], 2172158SN/A int2 = Parent.server.tsunami.etherint[0], 2184762Snate@binkert.org dump = Parent.etherdump) 2192158SN/A self.clock = '5GHz' 220 return self 221 222root = DualRoot( 223 MyLinuxAlphaSystem(readfile=script('netperf-stream-nt-client.rcS')), 224 MyLinuxAlphaSystem(readfile=script('netperf-server.rcS'))) 225 226m5.instantiate(root) 227 228exit_event = m5.simulate() 229 230print 'Exiting @ cycle', m5.curTick(), 'because', exit_event.getCause() 231