Add hook to call map() on Process from python.
authorSteve Reinhardt <steve.reinhardt@amd.com>
Wed, 11 Jul 2012 05:51:54 +0000 (22:51 -0700)
committerSteve Reinhardt <steve.reinhardt@amd.com>
Wed, 11 Jul 2012 05:51:54 +0000 (22:51 -0700)
This enables configuration scripts to set up mappings
from process virtual addresses to specific physical
addresses in SE mode.  This feature is needed to
support modeling of user-accessible memories or
devices in SE mode, avoiding the complexities of FS
mode and the need to write a device driver.

src/sim/Process.py
src/sim/process.cc
src/sim/process.hh

index 81108dd70743b233143fbd2c4d3eea81c2d9a4e3..bb76b5cf71d73d01937d1ba0c6a2d7770a9fb932 100644 (file)
@@ -39,6 +39,14 @@ class Process(SimObject):
     system = Param.System(Parent.any, "system process will run on")
     max_stack_size = Param.MemorySize('64MB', 'maximum size of the stack')
 
+    @classmethod
+    def export_method_cxx_predecls(cls, code):
+        code('#include "sim/process.hh"')
+
+    @classmethod
+    def export_methods(cls, code):
+        code('bool map(Addr vaddr, Addr paddr, int size);')
+
 class LiveProcess(Process):
     type = 'LiveProcess'
     executable = Param.String('', "executable (overrides cmd[0] if set)")
index 39b2d0777182bff88e0d23e3ae3dcd9a18d678af..72b808a1d5e8000233a505a8cb9273de4944fe22 100644 (file)
@@ -545,6 +545,14 @@ Process::unserialize(Checkpoint *cp, const std::string &section)
 }
 
 
+bool
+Process::map(Addr vaddr, Addr paddr, int size)
+{
+    pTable->map(vaddr, paddr, size);
+    return true;
+}
+
+
 ////////////////////////////////////////////////////////////////////////
 //
 // LiveProcess member definitions
index a5265f5b04d0b3890f70392da74cbed45f8eefd4..cddd060fd79a173bc16ce5ae11510e220edd2b6c 100644 (file)
@@ -210,6 +210,21 @@ class Process : public SimObject
     /// @return Whether the fault has been fixed.
     bool fixupStackFault(Addr vaddr);
 
+    /**
+     * Map a contiguous range of virtual addresses in this process's
+     * address space to a contiguous range of physical addresses.
+     * This function exists primarily to enable exposing the map
+     * operation to python, so that configuration scripts can set up
+     * mappings in SE mode.
+     *
+     * @param vaddr The starting virtual address of the range.
+     * @param paddr The starting physical address of the range.
+     * @param size The length of the range in bytes.
+     * @return True if the map operation was successful.  (At this
+     *           point in time, the map operation always succeeds.)
+     */
+    bool map(Addr vaddr, Addr paddr, int size);
+
     void serialize(std::ostream &os);
     void unserialize(Checkpoint *cp, const std::string &section);
 };