util: Expose addr config mechanisms in the gem5 op java wrapper.
authorGabe Black <gabe.black@gmail.com>
Fri, 23 Oct 2020 03:01:08 +0000 (20:01 -0700)
committerGabe Black <gabe.black@gmail.com>
Mon, 21 Dec 2020 23:47:51 +0000 (23:47 +0000)
These allow you to set the target physical address, and map or unmap the
region of physical memory. This is not automatic for two reasons. First,
the address needs to be configured before the mapping is done, and
there's no way to ensure that ordering when everything is handled
automatically. Second, if the user isn't going to use the address based
mechanism, then the mapping and access to /dev/mem isn't necessary and
may prevent using the other call types.

Change-Id: I0f9c32d6bfa402ba59ea1bf5672fb7f11003568d
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/28184
Reviewed-by: Gabe Black <gabe.black@gmail.com>
Maintainer: Bobby R. Bruce <bbruce@ucdavis.edu>
Tested-by: kokoro <noreply+kokoro@google.com>
util/m5/README.md
util/m5/src/java/gem5/Ops.java
util/m5/src/java/gem5/ops.cc

index b9ccbff557d8f6bc888ad00b0f4bb2d0e322c06d..cbdff1d12f795232814125ea7b5aa82ec55c48e4 100644 (file)
@@ -362,6 +362,19 @@ gem5.Ops gem5_ops = gem5.Ops.callTypes.get("default");
 long sum = gem5_ops.sum(1, 2, 3, 4, 5, 6);
 ```
 
+To configure the address based trigger mechanism, you can use these static
+methods.
+
+void setAddr(long addr);
+Set the address for the "magic" address region.
+
+void mapMem();
+Map the "magic" physical address region into the process' address space, likely
+by mmapping the "/dev/mem" device file.
+
+void unmapMem();
+Unmap the "magic" physical address region that was previously mapped.
+
 
 
 # lua module
index f6ab178dbe95489223f763253d3a886a7ca451da..ab254194795dd527f0a09a1d0574cf133d6ac1db 100644 (file)
@@ -53,6 +53,10 @@ public class Ops {
     private static Map<String, Ops> _callTypes;
     public static final Map<String, Ops> callTypes;
 
+    public static native void setAddr(long addr);
+    public static native void mapMem();
+    public static native void unmapMem();
+
     static {
         try {
             File temp_lib = File.createTempFile("gem5Ops", ".so");
index c1f36e483ce5e171f91c9271d0f90f3a3bb666b0..da21840766bd3fc2d39b5fd1b5258af93bda5f64 100644 (file)
@@ -44,6 +44,7 @@
 #include "call_type/semi_dt.hh"
 #include "gem5/m5ops.h"
 #include "java/gem5_Ops.h"
+#include "m5_mmap.h"
 
 #define _stringify(x) #x
 #define stringify(x) _stringify(x)
@@ -108,6 +109,24 @@ Java_gem5_Ops_setupCallTypes(JNIEnv *env, jclass clazz)
     env->DeleteLocalRef(map);
 }
 
+JNIEXPORT void JNICALL
+Java_gem5_Ops_setAddr(JNIEnv *env, jclass clazz, jlong addr)
+{
+    m5op_addr = addr;
+}
+
+JNIEXPORT void JNICALL
+Java_gem5_Ops_mapMem(JNIEnv *env, jclass clazz)
+{
+    map_m5_mem();
+}
+
+JNIEXPORT void JNICALL
+Java_gem5_Ops_unmapMem(JNIEnv *env, jclass clazz)
+{
+    unmap_m5_mem();
+}
+
 static DispatchTable *
 getDispatchTable(JNIEnv *env, jobject obj)
 {