fs.py revision 2566
1from m5 import *
2import os
3from SysPaths import *
4
5# Base for tests is directory containing this file.
6test_base = os.path.dirname(__file__)
7
8linux_image = env.get('LINUX_IMAGE', disk('linux-latest.img'))
9
10class IdeControllerPciData(PciConfigData):
11    VendorID = 0x8086
12    DeviceID = 0x7111
13    Command = 0x0
14    Status = 0x280
15    Revision = 0x0
16    ClassCode = 0x01
17    SubClassCode = 0x01
18    ProgIF = 0x85
19    BAR0 = 0x00000001
20    BAR1 = 0x00000001
21    BAR2 = 0x00000001
22    BAR3 = 0x00000001
23    BAR4 = 0x00000001
24    BAR5 = 0x00000001
25    InterruptLine = 0x1f
26    InterruptPin = 0x01
27    BAR0Size = '8B'
28    BAR1Size = '4B'
29    BAR2Size = '8B'
30    BAR3Size = '4B'
31    BAR4Size = '16B'
32
33class SinicPciData(PciConfigData):
34    VendorID = 0x1291
35    DeviceID = 0x1293
36    Status = 0x0290
37    SubClassCode = 0x00
38    ClassCode = 0x02
39    ProgIF = 0x00
40    BAR0 = 0x00000000
41    BAR1 = 0x00000000
42    BAR2 = 0x00000000
43    BAR3 = 0x00000000
44    BAR4 = 0x00000000
45    BAR5 = 0x00000000
46    MaximumLatency = 0x34
47    MinimumGrant = 0xb0
48    InterruptLine = 0x1e
49    InterruptPin = 0x01
50    BAR0Size = '64kB'
51
52class NSGigEPciData(PciConfigData):
53    VendorID = 0x100B
54    DeviceID = 0x0022
55    Status = 0x0290
56    SubClassCode = 0x00
57    ClassCode = 0x02
58    ProgIF = 0x00
59    BAR0 = 0x00000001
60    BAR1 = 0x00000000
61    BAR2 = 0x00000000
62    BAR3 = 0x00000000
63    BAR4 = 0x00000000
64    BAR5 = 0x00000000
65    MaximumLatency = 0x34
66    MinimumGrant = 0xb0
67    InterruptLine = 0x1e
68    InterruptPin = 0x01
69    BAR0Size = '256B'
70    BAR1Size = '4kB'
71
72class LinuxRootDisk(IdeDisk):
73    raw_image = RawDiskImage(image_file=linux_image, read_only=True)
74    image = CowDiskImage(child=Parent.raw_image, read_only=False)
75
76class LinuxSwapDisk(IdeDisk):
77    raw_image = RawDiskImage(image_file = disk('linux-bigswap2.img'),
78                                  read_only=True)
79    image = CowDiskImage(child = Parent.raw_image, read_only=False)
80
81class SpecwebFilesetDisk(IdeDisk):
82    raw_image = RawDiskImage(image_file = disk('specweb-fileset.img'),
83                                  read_only=True)
84    image = CowDiskImage(child = Parent.raw_image, read_only=False)
85
86class BaseTsunami(Tsunami):
87    cchip = TsunamiCChip(pio_addr=0x801a0000000)
88    pchip = TsunamiPChip(pio_addr=0x80180000000)
89    pciconfig = PciConfigAll(pio_addr=0x801fe000000)
90    fake_sm_chip = IsaFake(pio_addr=0x801fc000370)
91
92    fake_uart1 = IsaFake(pio_addr=0x801fc0002f8)
93    fake_uart2 = IsaFake(pio_addr=0x801fc0003e8)
94    fake_uart3 = IsaFake(pio_addr=0x801fc0002e8)
95    fake_uart4 = IsaFake(pio_addr=0x801fc0003f0)
96
97    fake_ppc = IsaFake(pio_addr=0x801fc0003bc)
98
99    fake_OROM = IsaFake(pio_addr=0x800000a0000, pio_size=0x60000)
100
101    fake_pnp_addr = IsaFake(pio_addr=0x801fc000279)
102    fake_pnp_write = IsaFake(pio_addr=0x801fc000a79)
103    fake_pnp_read0 = IsaFake(pio_addr=0x801fc000203)
104    fake_pnp_read1 = IsaFake(pio_addr=0x801fc000243)
105    fake_pnp_read2 = IsaFake(pio_addr=0x801fc000283)
106    fake_pnp_read3 = IsaFake(pio_addr=0x801fc0002c3)
107    fake_pnp_read4 = IsaFake(pio_addr=0x801fc000303)
108    fake_pnp_read5 = IsaFake(pio_addr=0x801fc000343)
109    fake_pnp_read6 = IsaFake(pio_addr=0x801fc000383)
110    fake_pnp_read7 = IsaFake(pio_addr=0x801fc0003c3)
111
112    fake_ata0 = IsaFake(pio_addr=0x801fc0001f0)
113    fake_ata1 = IsaFake(pio_addr=0x801fc000170)
114
115    fb = BadDevice(pio_addr=0x801fc0003d0, devicename='FrameBuffer')
116    io = TsunamiIO(pio_addr=0x801fc000000)
117    uart = Uart8250(pio_addr=0x801fc0003f8)
118    ethernet = NSGigE(configdata=NSGigEPciData(),
119                      pci_bus=0, pci_dev=1, pci_func=0)
120    etherint = NSGigEInt(device=Parent.ethernet)
121#    ethernet = Sinic(configdata=SinicPciData(),
122#                      pci_bus=0, pci_dev=1, pci_func=0)
123#    etherint = SinicInt(device=Parent.ethernet)
124    console = AlphaConsole(pio_addr=0x80200000000, disk=Parent.simple_disk)
125#    bridge = PciFake(configdata=BridgePciData(), pci_bus=0, pci_dev=2, pci_func=0)
126
127#class FreeBSDTsunami(BaseTsunami):
128#    disk0 = FreeBSDRootDisk(delay='0us', driveID='master')
129#    ide = IdeController(disks=[Parent.disk0],
130#                        configdata=IdeControllerPciData(),
131#                        pci_func=0, pci_dev=0, pci_bus=0)
132
133class LinuxTsunami(BaseTsunami):
134    disk0 = LinuxRootDisk(driveID='master')
135    disk1 = SpecwebFilesetDisk(driveID='slave')
136    disk2 = LinuxSwapDisk(driveID='master')
137    ide = IdeController(disks=[Parent.disk0, Parent.disk1, Parent.disk2],
138                        configdata=IdeControllerPciData(),
139                        pci_func=0, pci_dev=0, pci_bus=0)
140
141class LinuxAlphaSystem(LinuxAlphaSystem):
142    magicbus = Bus()
143    physmem = PhysicalMemory(range = AddrRange('128MB'))
144    c1 = Connector(side_a=Parent.physmem, side_b=Parent.magicbus)
145    tsunami = LinuxTsunami()
146    c2 = Connector(side_a=Parent.tsunami.cchip, side_a_name='pio', side_b=Parent.magicbus)
147    c3 = Connector(side_a=Parent.tsunami.pchip, side_a_name='pio', side_b=Parent.magicbus)
148    c4 = Connector(side_a=Parent.tsunami.pciconfig, side_a_name='pio', side_b=Parent.magicbus)
149    c5 = Connector(side_a=Parent.tsunami.fake_sm_chip, side_a_name='pio', side_b=Parent.magicbus)
150    c6 = Connector(side_a=Parent.tsunami.ethernet, side_a_name='pio', side_b=Parent.magicbus)
151    c6a = Connector(side_a=Parent.tsunami.ethernet, side_a_name='dma', side_b=Parent.magicbus)
152    c7 = Connector(side_a=Parent.tsunami.fake_uart1, side_a_name='pio', side_b=Parent.magicbus)
153    c8 = Connector(side_a=Parent.tsunami.fake_uart2, side_a_name='pio', side_b=Parent.magicbus)
154    c9 = Connector(side_a=Parent.tsunami.fake_uart3, side_a_name='pio', side_b=Parent.magicbus)
155    c10 = Connector(side_a=Parent.tsunami.fake_uart4, side_a_name='pio', side_b=Parent.magicbus)
156    c11 = Connector(side_a=Parent.tsunami.ide, side_a_name='pio', side_b=Parent.magicbus)
157    c13 = Connector(side_a=Parent.tsunami.ide, side_a_name='dma', side_b=Parent.magicbus)
158    c12 = Connector(side_a=Parent.tsunami.fake_ppc, side_a_name='pio', side_b=Parent.magicbus)
159    c14 = Connector(side_a=Parent.tsunami.fake_OROM, side_a_name='pio', side_b=Parent.magicbus)
160    c16 = Connector(side_a=Parent.tsunami.fake_pnp_addr, side_a_name='pio', side_b=Parent.magicbus)
161    c17 = Connector(side_a=Parent.tsunami.fake_pnp_write, side_a_name='pio', side_b=Parent.magicbus)
162    c18 = Connector(side_a=Parent.tsunami.fake_pnp_read0, side_a_name='pio', side_b=Parent.magicbus)
163    c19 = Connector(side_a=Parent.tsunami.fake_pnp_read1, side_a_name='pio', side_b=Parent.magicbus)
164    c20 = Connector(side_a=Parent.tsunami.fake_pnp_read2, side_a_name='pio', side_b=Parent.magicbus)
165    c21 = Connector(side_a=Parent.tsunami.fake_pnp_read3, side_a_name='pio', side_b=Parent.magicbus)
166    c22 = Connector(side_a=Parent.tsunami.fake_pnp_read4, side_a_name='pio', side_b=Parent.magicbus)
167    c23 = Connector(side_a=Parent.tsunami.fake_pnp_read5, side_a_name='pio', side_b=Parent.magicbus)
168    c24 = Connector(side_a=Parent.tsunami.fake_pnp_read6, side_a_name='pio', side_b=Parent.magicbus)
169    c25 = Connector(side_a=Parent.tsunami.fake_pnp_read7, side_a_name='pio', side_b=Parent.magicbus)
170    c27 = Connector(side_a=Parent.tsunami.fake_ata0, side_a_name='pio', side_b=Parent.magicbus)
171    c28 = Connector(side_a=Parent.tsunami.fake_ata1, side_a_name='pio', side_b=Parent.magicbus)
172    c30 = Connector(side_a=Parent.tsunami.fb, side_a_name='pio', side_b=Parent.magicbus)
173    c31 = Connector(side_a=Parent.tsunami.io, side_a_name='pio', side_b=Parent.magicbus)
174    c32 = Connector(side_a=Parent.tsunami.uart, side_a_name='pio', side_b=Parent.magicbus)
175    c33 = Connector(side_a=Parent.tsunami.console, side_a_name='pio', side_b=Parent.magicbus)
176    raw_image = RawDiskImage(image_file=disk('linux-latest.img'),
177                             read_only=True)
178    simple_disk = SimpleDisk(disk=Parent.raw_image)
179    intrctrl = IntrControl()
180    cpu = SimpleCPU(mem=Parent.magicbus)
181    sim_console = SimConsole(listener=ConsoleListener(port=3456))
182    kernel = '/z/saidi/work/m5.newmem/build/vmlinux'
183    pal = binary('ts_osfpal')
184    console = binary('console')
185    boot_osflags = 'root=/dev/hda1 console=ttyS0'
186#    readfile = os.path.join(test_base, 'halt.sh')
187
188
189BaseCPU.itb = AlphaITB()
190BaseCPU.dtb = AlphaDTB()
191BaseCPU.system = Parent.any
192
193class TsunamiRoot(System):
194    pass
195
196
197def DualRoot(ClientSystem, ServerSystem):
198    self = Root()
199    self.client = ClientSystem()
200    self.server = ServerSystem()
201
202    self.etherdump = EtherDump(file='ethertrace')
203    self.etherlink = EtherLink(int1 = Parent.client.tsunami.etherint[0],
204                               int2 = Parent.server.tsunami.etherint[0],
205                               dump = Parent.etherdump)
206    self.clock = '5GHz'
207    return self
208
209root = DualRoot(ClientSystem = LinuxAlphaSystem(readfile=script('netperf-stream-nt-client.rcS')),
210                ServerSystem = LinuxAlphaSystem(readfile=script('netperf-server.rcS')))
211
212