FSConfig.py revision 4103
17130Sgblack@eecs.umich.edu# Copyright (c) 2006-2007 The Regents of The University of Michigan
27130Sgblack@eecs.umich.edu# All rights reserved.
37130Sgblack@eecs.umich.edu#
47130Sgblack@eecs.umich.edu# Redistribution and use in source and binary forms, with or without
57130Sgblack@eecs.umich.edu# modification, are permitted provided that the following conditions are
67130Sgblack@eecs.umich.edu# met: redistributions of source code must retain the above copyright
77130Sgblack@eecs.umich.edu# notice, this list of conditions and the following disclaimer;
87130Sgblack@eecs.umich.edu# redistributions in binary form must reproduce the above copyright
97130Sgblack@eecs.umich.edu# notice, this list of conditions and the following disclaimer in the
107130Sgblack@eecs.umich.edu# documentation and/or other materials provided with the distribution;
117130Sgblack@eecs.umich.edu# neither the name of the copyright holders nor the names of its
127130Sgblack@eecs.umich.edu# contributors may be used to endorse or promote products derived from
137130Sgblack@eecs.umich.edu# this software without specific prior written permission.
147130Sgblack@eecs.umich.edu#
156253Sgblack@eecs.umich.edu# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
166253Sgblack@eecs.umich.edu# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
176253Sgblack@eecs.umich.edu# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
186253Sgblack@eecs.umich.edu# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
196253Sgblack@eecs.umich.edu# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
206253Sgblack@eecs.umich.edu# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
216253Sgblack@eecs.umich.edu# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
226253Sgblack@eecs.umich.edu# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
236253Sgblack@eecs.umich.edu# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
246253Sgblack@eecs.umich.edu# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
256253Sgblack@eecs.umich.edu# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
266253Sgblack@eecs.umich.edu#
276253Sgblack@eecs.umich.edu# Authors: Kevin Lim
286253Sgblack@eecs.umich.edu
296253Sgblack@eecs.umich.eduimport m5
306253Sgblack@eecs.umich.edufrom m5 import makeList
316253Sgblack@eecs.umich.edufrom m5.objects import *
326253Sgblack@eecs.umich.edufrom Benchmarks import *
336253Sgblack@eecs.umich.edu
346253Sgblack@eecs.umich.educlass CowIdeDisk(IdeDisk):
356253Sgblack@eecs.umich.edu    image = CowDiskImage(child=RawDiskImage(read_only=True),
366253Sgblack@eecs.umich.edu                         read_only=False)
376253Sgblack@eecs.umich.edu
386253Sgblack@eecs.umich.edu    def childImage(self, ci):
396253Sgblack@eecs.umich.edu        self.image.child.image_file = ci
406253Sgblack@eecs.umich.edu
416253Sgblack@eecs.umich.educlass CowMmDisk(MmDisk):
426253Sgblack@eecs.umich.edu    image = CowDiskImage(child=RawDiskImage(read_only=True),
436253Sgblack@eecs.umich.edu                         read_only=False)
446253Sgblack@eecs.umich.edu
456253Sgblack@eecs.umich.edu    def childImage(self, ci):
467294Sgblack@eecs.umich.edu        self.image.child.image_file = ci
476253Sgblack@eecs.umich.edu
486253Sgblack@eecs.umich.edu
496253Sgblack@eecs.umich.educlass BaseTsunami(Tsunami):
506253Sgblack@eecs.umich.edu    ethernet = NSGigE(configdata=NSGigEPciData(),
516253Sgblack@eecs.umich.edu                      pci_bus=0, pci_dev=1, pci_func=0)
526253Sgblack@eecs.umich.edu    etherint = NSGigEInt(device=Parent.ethernet)
536253Sgblack@eecs.umich.edu    ide = IdeController(disks=[Parent.disk0, Parent.disk2],
546253Sgblack@eecs.umich.edu                        pci_func=0, pci_dev=0, pci_bus=0)
556253Sgblack@eecs.umich.edu
566253Sgblack@eecs.umich.edudef makeLinuxAlphaSystem(mem_mode, mdesc = None):
576253Sgblack@eecs.umich.edu    self = LinuxAlphaSystem()
586253Sgblack@eecs.umich.edu    if not mdesc:
596253Sgblack@eecs.umich.edu        # generic system
606253Sgblack@eecs.umich.edu        mdesc = SysConfig()
616253Sgblack@eecs.umich.edu    self.readfile = mdesc.script()
626253Sgblack@eecs.umich.edu    self.iobus = Bus(bus_id=0)
637343Sgblack@eecs.umich.edu    self.membus = Bus(bus_id=1)
647343Sgblack@eecs.umich.edu    self.bridge = Bridge()
657343Sgblack@eecs.umich.edu    self.physmem = PhysicalMemory(range = AddrRange(mdesc.mem()))
667343Sgblack@eecs.umich.edu    self.bridge.side_a = self.iobus.port
677343Sgblack@eecs.umich.edu    self.bridge.side_b = self.membus.port
687343Sgblack@eecs.umich.edu    self.physmem.port = self.membus.port
697343Sgblack@eecs.umich.edu    self.disk0 = CowIdeDisk(driveID='master')
707343Sgblack@eecs.umich.edu    self.disk2 = CowIdeDisk(driveID='master')
717343Sgblack@eecs.umich.edu    self.disk0.childImage(mdesc.disk())
727343Sgblack@eecs.umich.edu    self.disk2.childImage(disk('linux-bigswap2.img'))
737343Sgblack@eecs.umich.edu    self.tsunami = BaseTsunami()
747343Sgblack@eecs.umich.edu    self.tsunami.attachIO(self.iobus)
757343Sgblack@eecs.umich.edu    self.tsunami.ide.pio = self.iobus.port
767343Sgblack@eecs.umich.edu    self.tsunami.ethernet.pio = self.iobus.port
777343Sgblack@eecs.umich.edu    self.simple_disk = SimpleDisk(disk=RawDiskImage(image_file = mdesc.disk(),
787343Sgblack@eecs.umich.edu                                               read_only = True))
796253Sgblack@eecs.umich.edu    self.intrctrl = IntrControl()
806308Sgblack@eecs.umich.edu    self.mem_mode = mem_mode
816308Sgblack@eecs.umich.edu    self.sim_console = SimConsole()
827343Sgblack@eecs.umich.edu    self.kernel = binary('vmlinux')
836308Sgblack@eecs.umich.edu    self.pal = binary('ts_osfpal')
846308Sgblack@eecs.umich.edu    self.console = binary('console')
856308Sgblack@eecs.umich.edu    self.boot_osflags = 'root=/dev/hda1 console=ttyS0'
866308Sgblack@eecs.umich.edu
876308Sgblack@eecs.umich.edu    return self
886308Sgblack@eecs.umich.edu
896308Sgblack@eecs.umich.edudef makeSparcSystem(mem_mode, mdesc = None):
907343Sgblack@eecs.umich.edu    self = SparcSystem()
916308Sgblack@eecs.umich.edu    if not mdesc:
926308Sgblack@eecs.umich.edu        # generic system
936308Sgblack@eecs.umich.edu        mdesc = SysConfig()
946308Sgblack@eecs.umich.edu    self.readfile = mdesc.script()
956308Sgblack@eecs.umich.edu    self.iobus = Bus(bus_id=0)
966308Sgblack@eecs.umich.edu    self.membus = Bus(bus_id=1)
976309Sgblack@eecs.umich.edu    self.bridge = Bridge()
986309Sgblack@eecs.umich.edu    self.t1000 = T1000()
996309Sgblack@eecs.umich.edu    self.t1000.attachIO(self.iobus)
1006309Sgblack@eecs.umich.edu    self.physmem = PhysicalMemory(range = AddrRange(Addr('1MB'), size = '64MB'), zero = True)
1016309Sgblack@eecs.umich.edu    self.physmem2 = PhysicalMemory(range = AddrRange(Addr('2GB'), size ='256MB'), zero = True)
1027134Sgblack@eecs.umich.edu    self.bridge.side_a = self.iobus.port
1036309Sgblack@eecs.umich.edu    self.bridge.side_b = self.membus.port
1046309Sgblack@eecs.umich.edu    self.physmem.port = self.membus.port
1056309Sgblack@eecs.umich.edu    self.physmem2.port = self.membus.port
1067134Sgblack@eecs.umich.edu    self.rom.port = self.membus.port
1076309Sgblack@eecs.umich.edu    self.nvram.port = self.membus.port
1087294Sgblack@eecs.umich.edu    self.hypervisor_desc.port = self.membus.port
1096309Sgblack@eecs.umich.edu    self.partition_desc.port = self.membus.port
1106309Sgblack@eecs.umich.edu    self.intrctrl = IntrControl()
1116309Sgblack@eecs.umich.edu    self.disk0 = CowMmDisk()
1126309Sgblack@eecs.umich.edu    self.disk0.childImage(disk('disk.s10hw2'))
1137170Sgblack@eecs.umich.edu    self.disk0.pio = self.iobus.port
1147170Sgblack@eecs.umich.edu    self.reset_bin = binary('reset_new.bin')
1157170Sgblack@eecs.umich.edu    self.hypervisor_bin = binary('q_new.bin')
1167170Sgblack@eecs.umich.edu    self.openboot_bin = binary('openboot_new.bin')
1177170Sgblack@eecs.umich.edu    self.nvram_bin = binary('nvram1')
1187170Sgblack@eecs.umich.edu    self.hypervisor_desc_bin = binary('1up-hv.bin')
1197170Sgblack@eecs.umich.edu    self.partition_desc_bin = binary('1up-md.bin')
1207170Sgblack@eecs.umich.edu
1217175Sgblack@eecs.umich.edu    return self
1227175Sgblack@eecs.umich.edu
1237175Sgblack@eecs.umich.edu
1247175Sgblack@eecs.umich.edudef makeDualRoot(testSystem, driveSystem, dumpfile):
1257175Sgblack@eecs.umich.edu    self = Root()
1267175Sgblack@eecs.umich.edu    self.testsys = testSystem
1277175Sgblack@eecs.umich.edu    self.drivesys = driveSystem
1287175Sgblack@eecs.umich.edu    self.etherlink = EtherLink(int1 = Parent.testsys.tsunami.etherint[0],
1296253Sgblack@eecs.umich.edu                               int2 = Parent.drivesys.tsunami.etherint[0])
1306253Sgblack@eecs.umich.edu    if dumpfile:
1316253Sgblack@eecs.umich.edu        self.etherdump = EtherDump(file=dumpfile)
132        self.etherlink.dump = Parent.etherdump
133
134    self.clock = '1THz'
135    return self
136