summaryrefslogtreecommitdiff
path: root/sim/universe.cc
diff options
context:
space:
mode:
authorNathan Binkert <binkertn@umich.edu>2005-01-15 04:12:25 -0500
committerNathan Binkert <binkertn@umich.edu>2005-01-15 04:12:25 -0500
commit3ece6ab029756fa40679677d124e14acd1349416 (patch)
tree917c6adc11d19f9da82bc51511e6fb0cace8cce9 /sim/universe.cc
parentdfecc891509d318ffaefee95b6c6a1ec83b6f28d (diff)
downloadgem5-3ece6ab029756fa40679677d124e14acd1349416.tar.xz
New and improved configuration mechanism. No more writing of
wierd ini files. The ini files are still used as an intermediate step, but a sophisticated python library exists to help build them more easily. SConscript: add the new embedded file stuff remove all of the old object description junk base/inifile.cc: base/inifile.hh: get rid of findDefault and findAppend since they were the source of much evil. base/trace.cc: For now, if we don't have the dprintf_stream set up, dump to standard out. We probably want a command line option for this. dev/alpha_console.cc: PioDevice now takes a platform parameter. All PioDevices must have a pio_latency parameter. We stick a dummy parameter in here for now until we get rid of the builder stuff. dev/alpha_console.hh: don't need Platform anymore dev/baddev.cc: PioDevice now takes a platform parameter. All PioDevices must have a pio_latency parameter. We stick a dummy parameter in here for now until we get rid of the builder stuff. Same for the platform parameter, though we just pass the PioDevice a null parameter since it isn't used by this device and it's quicker. dev/baddev.hh: fix #include guards dev/etherlink.cc: rename parameters. dev/ethertap.cc: rename parameters dev/ide_ctrl.cc: All devices need an address even if it will get overwritten later. dev/ide_disk.cc: use an enum for the drive ID stuff. rename disk_delay -> delay Actually, I think that we should implement "cable select" and have the controller tell the drive what it is. dev/io_device.cc: dev/io_device.hh: All IO devices take a Platform * dev/ns_gige.cc: all devices need an io_bus. rename header_bus to io_bus We don't need stuff for the interrupt controller since it's all in the platform now. dev/ns_gige.hh: We don't need stuff for the interrupt controller now since it's all in the platform. dev/pciconfigall.cc: Pass a dummy NULL to the PioDevice for the platform since we don't need one. dev/pcidev.cc: Move a bunch of common functionality into the PciDev dev/platform.hh: remove unneeded code dev/tsunami.cc: remove unused param dev/tsunami_cchip.cc: pass platform pointer dev/tsunami_io.cc: dev/tsunami_pchip.cc: dev/uart.cc: pass platform variable dev/uart.hh: don't need to keep a platform pointer. it's in the base class kern/linux/linux_system.cc: kern/tru64/tru64_system.cc: rename some parameters sim/builder.cc: clean up builder code. use more parameters from the config node. all sections with a type= are now created, the old mechanisms no longer work sim/builder.hh: remove some extra variables since they are found in the ConfigNode sim/main.cc: add a quick hack command line argument -X to dump out the embedded files. (probably should be fixed up a little.) accept .mpy files printing to the streams has to happen after the hierarchy is built since we're moving away from param contexts sim/param.cc: add parsing support for ranges sim/process.cc: isValid isn't very useful anymore. interpret the names stdout, stderr, cout, cerr for the file descriptors sim/pyconfig/SConscript: Add Action handlers for creating an embedded python file and for creating an embedded C file. use these action handlers to embed all objects found in the objects tree into the binary along with the importer and the m5config stuff sim/pyconfig/m5config.py: Major changes to the original configuration file generator. These changes largely involve implementing copy-on-write like semantics for all of the SimObjects. Real documentation must be written. sim/universe.cc: Universe becomes a SimObject since we don't really have the notion of param contexts in the python code. --HG-- rename : sim/pyconfig/m5configbase.py => sim/pyconfig/m5config.py extra : convert_revision : c353453e5beb91c37f15755998fc0d8858c6829a
Diffstat (limited to 'sim/universe.cc')
-rw-r--r--sim/universe.cc126
1 files changed, 73 insertions, 53 deletions
diff --git a/sim/universe.cc b/sim/universe.cc
index 824b985fa..69563650d 100644
--- a/sim/universe.cc
+++ b/sim/universe.cc
@@ -36,9 +36,10 @@
#include <vector>
#include "base/misc.hh"
-#include "sim/universe.hh"
+#include "sim/builder.hh"
#include "sim/host.hh"
-#include "sim/param.hh"
+#include "sim/sim_object.hh"
+#include "sim/universe.hh"
using namespace std;
@@ -53,60 +54,13 @@ string outputDirectory;
ostream *outputStream;
ostream *configStream;
-class UniverseParamContext : public ParamContext
+// Dummy Object
+class Root : public SimObject
{
public:
- UniverseParamContext(const string &is)
- : ParamContext(is, OutputInitPhase) {}
- void checkParams();
+ Root(const std::string &name) : SimObject(name) {}
};
-
-UniverseParamContext universe("Universe");
-
-Param<Tick> universe_freq(&universe, "frequency", "tick frequency",
- 200000000);
-
-Param<string> universe_output_dir(&universe, "output_dir",
- "directory to output data to",
- ".");
-Param<string> universe_output_file(&universe, "output_file",
- "file to dump simulator output to",
- "cout");
-Param<string> universe_config_output_file(&universe, "config_output_file",
- "file to dump simulator config to",
- "m5config.out");
-
-void
-UniverseParamContext::checkParams()
-{
- ticksPerSecond = universe_freq;
- double freq = double(ticksPerSecond);
- __ticksPerMS = freq / 1.0e3;
- __ticksPerUS = freq / 1.0e6;
- __ticksPerNS = freq / 1.0e9;
- __ticksPerPS = freq / 1.0e12;
-
- if (universe_output_dir.isValid()) {
- outputDirectory = universe_output_dir;
-
- // guarantee that directory ends with a '/'
- if (outputDirectory[outputDirectory.size() - 1] != '/')
- outputDirectory += "/";
-
- if (mkdir(outputDirectory.c_str(), 0777) < 0) {
- if (errno != EEXIST) {
- panic("%s\ncould not make output directory: %s\n",
- strerror(errno), outputDirectory);
- }
- }
- }
-
- outputStream = makeOutputStream(universe_output_file);
- configStream = universe_config_output_file.isValid()
- ? makeOutputStream(universe_config_output_file)
- : outputStream;
-}
-
+Root *root = NULL;
std::ostream *
makeOutputStream(std::string &name)
@@ -146,4 +100,70 @@ closeOutputStream(std::ostream *os)
}
+BEGIN_DECLARE_SIM_OBJECT_PARAMS(Root)
+
+ Param<bool> full_system;
+ Param<Tick> frequency;
+ Param<string> output_dir;
+ Param<string> output_file;
+ Param<string> config_output_file;
+
+END_DECLARE_SIM_OBJECT_PARAMS(Root)
+
+BEGIN_INIT_SIM_OBJECT_PARAMS(Root)
+
+ INIT_PARAM_DFLT(full_system, "full system simulation", true),
+ INIT_PARAM_DFLT(frequency, "tick frequency", 200000000),
+ INIT_PARAM_DFLT(output_dir, "directory to output data to", "."),
+ INIT_PARAM_DFLT(output_file, "file to dump simulator output to", "cout"),
+ INIT_PARAM_DFLT(config_output_file, "file to dump simulator config to",
+ "m5config.out")
+
+END_INIT_SIM_OBJECT_PARAMS(Root)
+
+CREATE_SIM_OBJECT(Root)
+{
+#ifdef FULL_SYSTEM
+ if (!bool(full_system))
+ panic("FULL_SYSTEM compiled and configuration not full_system");
+#else
+ if (bool(full_system))
+ panic("FULL_SYSTEM not compiled but configuration is full_system");
+#endif
+
+ if (root)
+ panic("only one root object allowed!");
+ root = new Root(getInstanceName());
+
+ ticksPerSecond = frequency;
+ double freq = double(ticksPerSecond);
+ __ticksPerMS = freq / 1.0e3;
+ __ticksPerUS = freq / 1.0e6;
+ __ticksPerNS = freq / 1.0e9;
+ __ticksPerPS = freq / 1.0e12;
+
+ if (output_dir.isValid()) {
+ outputDirectory = output_dir;
+
+ // guarantee that directory ends with a '/'
+ if (outputDirectory[outputDirectory.size() - 1] != '/')
+ outputDirectory += "/";
+
+ if (mkdir(outputDirectory.c_str(), 0777) < 0) {
+ if (errno != EEXIST) {
+ panic("%s\ncould not make output directory: %s\n",
+ strerror(errno), outputDirectory);
+ }
+ }
+ }
+
+ outputStream = makeOutputStream(output_file);
+ configStream = config_output_file.isValid()
+ ? makeOutputStream(config_output_file)
+ : outputStream;
+
+ return root;
+}
+
+REGISTER_SIM_OBJECT("Root", Root)