x86: implements vtophys

Calls walker to look up virt. to phys. page mapping
This commit is contained in:
Joel Hestness 2011-02-06 22:14:17 -08:00
parent eea78f968b
commit 38140b5519
4 changed files with 28 additions and 6 deletions

View file

@ -48,6 +48,7 @@
#include "mem/mem_object.hh"
#include "mem/packet.hh"
#include "params/X86PagetableWalker.hh"
#include "sim/faults.hh"
class ThreadContext;

View file

@ -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"

View file

@ -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;
}
}

View file

@ -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
{