summaryrefslogtreecommitdiff
path: root/src/python
diff options
context:
space:
mode:
Diffstat (limited to 'src/python')
-rw-r--r--src/python/m5/main.py3
-rw-r--r--src/python/m5/objects/T1000.py15
-rw-r--r--src/python/m5/objects/Tsunami.py4
-rw-r--r--src/python/m5/params.py52
4 files changed, 70 insertions, 4 deletions
diff --git a/src/python/m5/main.py b/src/python/m5/main.py
index 114c668a6..5df6d03cf 100644
--- a/src/python/m5/main.py
+++ b/src/python/m5/main.py
@@ -304,7 +304,8 @@ def main():
sys.argv = arguments
sys.path = [ os.path.dirname(sys.argv[0]) ] + sys.path
- scope = { '__file__' : sys.argv[0] }
+ scope = { '__file__' : sys.argv[0],
+ '__name__' : '__m5_main__' }
# we want readline if we're doing anything interactive
if options.interactive or options.pdb:
diff --git a/src/python/m5/objects/T1000.py b/src/python/m5/objects/T1000.py
index 79195d976..7b93268ac 100644
--- a/src/python/m5/objects/T1000.py
+++ b/src/python/m5/objects/T1000.py
@@ -5,6 +5,18 @@ from Uart import Uart8250
from Platform import Platform
from SimConsole import SimConsole, ConsoleListener
+
+class MmDisk(BasicPioDevice):
+ type = 'MmDisk'
+ image = Param.DiskImage("Disk Image")
+ pio_addr = 0x1F40000000
+
+class DumbTOD(BasicPioDevice):
+ type = 'DumbTOD'
+ time = Param.Time('01/01/2009', "System time to use ('Now' for real time)")
+ pio_addr = 0xfff0c1fff8
+
+
class T1000(Platform):
type = 'T1000'
system = Param.System(Parent.any, "system")
@@ -58,6 +70,8 @@ class T1000(Platform):
warn_access="Accessing SSI -- Unimplemented!")
hvuart = Uart8250(pio_addr=0xfff0c2c000)
+ htod = DumbTOD()
+
puart0 = Uart8250(pio_addr=0x1f10000000)
console = SimConsole(listener = ConsoleListener())
@@ -80,3 +94,4 @@ class T1000(Platform):
self.fake_ssi.pio = bus.port
self.puart0.pio = bus.port
self.hvuart.pio = bus.port
+ self.htod.pio = bus.port
diff --git a/src/python/m5/objects/Tsunami.py b/src/python/m5/objects/Tsunami.py
index ac9020b47..18a776a7f 100644
--- a/src/python/m5/objects/Tsunami.py
+++ b/src/python/m5/objects/Tsunami.py
@@ -13,8 +13,8 @@ class TsunamiCChip(BasicPioDevice):
class TsunamiIO(BasicPioDevice):
type = 'TsunamiIO'
- time = Param.UInt64(1136073600,
- "System time to use (0 for actual time, default is 1/1/06)")
+ time = Param.Time('01/01/2009',
+ "System time to use ('Now' for actual time)")
tsunami = Param.Tsunami(Parent.any, "Tsunami")
frequency = Param.Frequency('1024Hz', "frequency of interrupts")
diff --git a/src/python/m5/params.py b/src/python/m5/params.py
index d83d5f73f..d570804d8 100644
--- a/src/python/m5/params.py
+++ b/src/python/m5/params.py
@@ -44,7 +44,12 @@
#
#####################################################################
-import sys, inspect, copy
+import copy
+import datetime
+import inspect
+import sys
+import time
+
import convert
from util import *
@@ -513,6 +518,50 @@ class EthernetAddr(ParamValue):
else:
return self.value
+def parse_time(value):
+ strings = [ "%a %b %d %H:%M:%S %Z %Y",
+ "%a %b %d %H:%M:%S %Z %Y",
+ "%Y/%m/%d %H:%M:%S",
+ "%Y/%m/%d %H:%M",
+ "%Y/%m/%d",
+ "%m/%d/%Y %H:%M:%S",
+ "%m/%d/%Y %H:%M",
+ "%m/%d/%Y",
+ "%m/%d/%y %H:%M:%S",
+ "%m/%d/%y %H:%M",
+ "%m/%d/%y"]
+
+ for string in strings:
+ try:
+ return time.strptime(value, string)
+ except ValueError:
+ pass
+
+ raise ValueError, "Could not parse '%s' as a time" % value
+
+class Time(ParamValue):
+ cxx_type = 'time_t'
+ def __init__(self, value):
+ if isinstance(value, time.struct_time):
+ self.value = time.mktime(value)
+ elif isinstance(value, int):
+ self.value = value
+ elif isinstance(value, str):
+ if value in ('Now', 'Today'):
+ self.value = time.time()
+ else:
+ self.value = time.mktime(parse_time(value))
+ elif isinstance(value, (datetime.datetime, datetime.date)):
+ self.value = time.mktime(value.timetuple())
+ else:
+ raise ValueError, "Could not parse '%s' as a time" % value
+
+ def __str__(self):
+ return str(int(self.value))
+
+ def ini_str(self):
+ return str(int(self.value))
+
# Enumerated types are a little more complex. The user specifies the
# type as Enum(foo) where foo is either a list or dictionary of
# alternatives (typically strings, but not necessarily so). (In the
@@ -973,6 +1022,7 @@ __all__ = ['Param', 'VectorParam',
'NetworkBandwidth', 'MemoryBandwidth',
'Range', 'AddrRange', 'TickRange',
'MaxAddr', 'MaxTick', 'AllMemory',
+ 'Time',
'NextEthernetAddr', 'NULL',
'Port', 'VectorPort']