changeset f9b675da608a in /z/repo/m5
details: http://repo.m5sim.org/m5?cmd=changeset;node=f9b675da608a
description:
        x86: implements vtophys

        Calls walker to look up virt. to phys. page mapping

diffstat:

 src/arch/x86/pagetable_walker.hh |   1 +
 src/arch/x86/system.cc           |   1 +
 src/arch/x86/vtophys.cc          |  29 ++++++++++++++++++++++++++---
 src/arch/x86/vtophys.hh          |   3 ---
 4 files changed, 28 insertions(+), 6 deletions(-)

diffs (87 lines):

diff -r 8b05ff5ef958 -r f9b675da608a src/arch/x86/pagetable_walker.hh
--- a/src/arch/x86/pagetable_walker.hh  Sun Feb 06 22:14:17 2011 -0800
+++ b/src/arch/x86/pagetable_walker.hh  Sun Feb 06 22:14:17 2011 -0800
@@ -48,6 +48,7 @@
 #include "mem/mem_object.hh"
 #include "mem/packet.hh"
 #include "params/X86PagetableWalker.hh"
+#include "sim/faults.hh"
 
 class ThreadContext;
 
diff -r 8b05ff5ef958 -r f9b675da608a src/arch/x86/system.cc
--- a/src/arch/x86/system.cc    Sun Feb 06 22:14:17 2011 -0800
+++ b/src/arch/x86/system.cc    Sun Feb 06 22:14:17 2011 -0800
@@ -39,6 +39,7 @@
 
 #include "arch/x86/bios/smbios.hh"
 #include "arch/x86/bios/intelmp.hh"
+#include "arch/x86/isa_traits.hh"
 #include "arch/x86/regs/misc.hh"
 #include "arch/x86/system.hh"
 #include "arch/vtophys.hh"
diff -r 8b05ff5ef958 -r f9b675da608a src/arch/x86/vtophys.cc
--- a/src/arch/x86/vtophys.cc   Sun Feb 06 22:14:17 2011 -0800
+++ b/src/arch/x86/vtophys.cc   Sun Feb 06 22:14:17 2011 -0800
@@ -39,19 +39,42 @@
 
 #include <string>
 
+#include "arch/x86/pagetable_walker.hh"
+#include "arch/x86/tlb.hh"
 #include "arch/x86/vtophys.hh"
+#include "base/trace.hh"
+#include "config/full_system.hh"
+#include "cpu/thread_context.hh"
+#include "sim/fault.hh"
 
 using namespace std;
 
 namespace X86ISA
 {
-    Addr vtophys(Addr vaddr)
+    Addr
+    vtophys(Addr vaddr)
     {
+#if FULL_SYSTEM
+        panic("Need access to page tables\n");
+#endif
         return vaddr;
     }
 
-    Addr vtophys(ThreadContext *tc, Addr addr)
+    Addr
+    vtophys(ThreadContext *tc, Addr vaddr)
     {
-        return addr;
+#if FULL_SYSTEM
+        Walker *walker = tc->getDTBPtr()->getWalker();
+        Addr size;
+        Addr addr = vaddr;
+        Fault fault = walker->startFunctional(tc, addr, size, BaseTLB::Read);
+        if (fault != NoFault)
+            panic("vtophys page walk returned fault\n");
+        Addr masked_addr = vaddr & (size - 1);
+        Addr paddr = addr | masked_addr;
+        DPRINTF(VtoPhys, "vtophys(%#x) -> %#x\n", vaddr, paddr);
+        return paddr;
+#endif
+        return vaddr;
     }
 }
diff -r 8b05ff5ef958 -r f9b675da608a src/arch/x86/vtophys.hh
--- a/src/arch/x86/vtophys.hh   Sun Feb 06 22:14:17 2011 -0800
+++ b/src/arch/x86/vtophys.hh   Sun Feb 06 22:14:17 2011 -0800
@@ -40,12 +40,9 @@
 #ifndef __ARCH_X86_VTOPHYS_HH__
 #define __ARCH_X86_VTOPHYS_HH__
 
-#include "arch/x86/isa_traits.hh"
-#include "arch/x86/pagetable.hh"
 #include "base/types.hh"
 
 class ThreadContext;
-class FunctionalPort;
 
 namespace X86ISA
 {
_______________________________________________
m5-dev mailing list
m5-dev@m5sim.org
http://m5sim.org/mailman/listinfo/m5-dev

Reply via email to