summaryrefslogtreecommitdiff
path: root/configs/test/fs.py
blob: 61fb97c6475998bd7b598e799802386710283c6b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import m5
from m5.objects import *
import os,optparse,sys
from SysPaths import *
from FullO3Config import *

parser = optparse.OptionParser(option_list=m5.standardOptions)

parser.add_option("-d", "--detailed", action="store_true")
parser.add_option("-t", "--timing", action="store_true")
parser.add_option("-m", "--maxtick", type="int")
parser.add_option("--dual", help="Run full system using dual systems",
                  action="store_true")

(options, args) = parser.parse_args()
m5.setStandardOptions(options)

if args:
    print "Error: script doesn't take any positional arguments"
    sys.exit(1)

# Base for tests is directory containing this file.
test_base = os.path.dirname(__file__)

linux_image = env.get('LINUX_IMAGE', disk('linux-latest.img'))

class CowIdeDisk(IdeDisk):
    image = CowDiskImage(child=RawDiskImage(read_only=True),
                         read_only=False)

    def childImage(self, ci):
        self.image.child.image_file = ci

class BaseTsunami(Tsunami):
    ethernet = NSGigE(configdata=NSGigEPciData(),
                      pci_bus=0, pci_dev=1, pci_func=0)
    etherint = NSGigEInt(device=Parent.ethernet)
    ide = IdeController(disks=[Parent.disk0, Parent.disk2],
                        pci_func=0, pci_dev=0, pci_bus=0)

class MyLinuxAlphaSystem(LinuxAlphaSystem):
    iobus = Bus(bus_id=0)
    membus = Bus(bus_id=1)
    bridge = Bridge()
    physmem = PhysicalMemory(range = AddrRange('128MB'))
    bridge.side_a = iobus.port
    bridge.side_b = membus.port
    physmem.port = membus.port
    disk0 = CowIdeDisk(driveID='master')
    disk2 = CowIdeDisk(driveID='master')
    disk0.childImage(linux_image)
    disk2.childImage(disk('linux-bigswap2.img'))
    tsunami = BaseTsunami()
    tsunami.attachIO(iobus)
    tsunami.ide.pio = iobus.port
    tsunami.ide.dma = iobus.port
    tsunami.ide.config = iobus.port
    tsunami.ethernet.pio = iobus.port
    tsunami.ethernet.dma = iobus.port
    tsunami.ethernet.config = iobus.port
    simple_disk = SimpleDisk(disk=RawDiskImage(image_file = linux_image,
                                               read_only = True))
    intrctrl = IntrControl()
    if options.detailed:
        cpu = DetailedO3CPU()
    elif options.timing:
        cpu = TimingSimpleCPU()
    else:
        cpu = AtomicSimpleCPU()
    cpu.mem = membus
    cpu.icache_port = membus.port
    cpu.dcache_port = membus.port
    cpu.itb = AlphaITB()
    cpu.dtb = AlphaDTB()
    sim_console = SimConsole(listener=ConsoleListener(port=3456))
    kernel = binary('vmlinux')
    pal = binary('ts_osfpal')
    console = binary('console')
    boot_osflags = 'root=/dev/hda1 console=ttyS0'

class TsunamiRoot(Root):
    pass

def DualRoot(clientSystem, serverSystem):
    self = Root()
    self.client = clientSystem
    self.server = serverSystem

    self.etherdump = EtherDump(file='ethertrace')
    self.etherlink = EtherLink(int1 = Parent.client.tsunami.etherint[0],
                               int2 = Parent.server.tsunami.etherint[0],
                               dump = Parent.etherdump)
    self.clock = '5GHz'
    return self

if options.dual:
    root = DualRoot(
        MyLinuxAlphaSystem(readfile=script('netperf-stream-nt-client.rcS')),
        MyLinuxAlphaSystem(readfile=script('netperf-server.rcS')))
else:
    root = TsunamiRoot(clock = '2GHz', system = MyLinuxAlphaSystem())

m5.instantiate(root)

if options.maxtick:
    exit_event = m5.simulate(options.maxtick)
else:
    exit_event = m5.simulate()

print 'Exiting @ cycle', m5.curTick(), 'because', exit_event.getCause()