vtophys.cc revision 11793
110779SCurtis.Dunham@arm.com/* 210779SCurtis.Dunham@arm.com * Copyright (c) 2007 The Hewlett-Packard Development Company 310779SCurtis.Dunham@arm.com * All rights reserved. 410779SCurtis.Dunham@arm.com * 510779SCurtis.Dunham@arm.com * The license below extends only to copyright in the software and shall 610779SCurtis.Dunham@arm.com * not be construed as granting a license to any other intellectual 710779SCurtis.Dunham@arm.com * property including but not limited to intellectual property relating 810779SCurtis.Dunham@arm.com * to a hardware implementation of the functionality of the software 910779SCurtis.Dunham@arm.com * licensed hereunder. You may use the software subject to the license 1010779SCurtis.Dunham@arm.com * terms below provided that you ensure that this notice is replicated 1110779SCurtis.Dunham@arm.com * unmodified and in its entirety in all distributions of the software, 1210779SCurtis.Dunham@arm.com * modified or unmodified, in source code or in binary form. 1310779SCurtis.Dunham@arm.com * 1410779SCurtis.Dunham@arm.com * Redistribution and use in source and binary forms, with or without 1510779SCurtis.Dunham@arm.com * modification, are permitted provided that the following conditions are 1610779SCurtis.Dunham@arm.com * met: redistributions of source code must retain the above copyright 1710779SCurtis.Dunham@arm.com * notice, this list of conditions and the following disclaimer; 1810779SCurtis.Dunham@arm.com * redistributions in binary form must reproduce the above copyright 1910779SCurtis.Dunham@arm.com * notice, this list of conditions and the following disclaimer in the 2010779SCurtis.Dunham@arm.com * documentation and/or other materials provided with the distribution; 2110779SCurtis.Dunham@arm.com * neither the name of the copyright holders nor the names of its 2210779SCurtis.Dunham@arm.com * contributors may be used to endorse or promote products derived from 2310779SCurtis.Dunham@arm.com * this software without specific prior written permission. 2410779SCurtis.Dunham@arm.com * 2510779SCurtis.Dunham@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 2610779SCurtis.Dunham@arm.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2710779SCurtis.Dunham@arm.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2810779SCurtis.Dunham@arm.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2910779SCurtis.Dunham@arm.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 3010779SCurtis.Dunham@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 3110779SCurtis.Dunham@arm.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 3210779SCurtis.Dunham@arm.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 3310779SCurtis.Dunham@arm.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 3410779SCurtis.Dunham@arm.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 3510779SCurtis.Dunham@arm.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3610779SCurtis.Dunham@arm.com * 3710779SCurtis.Dunham@arm.com * Authors: Gabe Black 3810779SCurtis.Dunham@arm.com */ 3910779SCurtis.Dunham@arm.com 4010779SCurtis.Dunham@arm.com#include "arch/x86/vtophys.hh" 4110779SCurtis.Dunham@arm.com 4210779SCurtis.Dunham@arm.com#include <string> 4310779SCurtis.Dunham@arm.com 4410779SCurtis.Dunham@arm.com#include "arch/x86/pagetable_walker.hh" 4510779SCurtis.Dunham@arm.com#include "arch/x86/tlb.hh" 4610779SCurtis.Dunham@arm.com#include "base/trace.hh" 4710779SCurtis.Dunham@arm.com#include "cpu/thread_context.hh" 4810779SCurtis.Dunham@arm.com#include "debug/VtoPhys.hh" 4910779SCurtis.Dunham@arm.com 5010779SCurtis.Dunham@arm.comusing namespace std; 5110779SCurtis.Dunham@arm.com 5210779SCurtis.Dunham@arm.comnamespace X86ISA 5310779SCurtis.Dunham@arm.com{ 5410779SCurtis.Dunham@arm.com Addr 5510779SCurtis.Dunham@arm.com vtophys(Addr vaddr) 5610779SCurtis.Dunham@arm.com { 5710779SCurtis.Dunham@arm.com panic("Need access to page tables\n"); 5810779SCurtis.Dunham@arm.com } 5910779SCurtis.Dunham@arm.com 6010779SCurtis.Dunham@arm.com Addr 6110779SCurtis.Dunham@arm.com vtophys(ThreadContext *tc, Addr vaddr) 6210779SCurtis.Dunham@arm.com { 6310779SCurtis.Dunham@arm.com Walker *walker = tc->getDTBPtr()->getWalker(); 6410779SCurtis.Dunham@arm.com unsigned logBytes; 6510779SCurtis.Dunham@arm.com Addr addr = vaddr; 6610779SCurtis.Dunham@arm.com Fault fault = walker->startFunctional( 6710779SCurtis.Dunham@arm.com tc, addr, logBytes, BaseTLB::Read); 6810779SCurtis.Dunham@arm.com if (fault != NoFault) 6910779SCurtis.Dunham@arm.com panic("vtophys page walk returned fault\n"); 7010779SCurtis.Dunham@arm.com Addr masked_addr = vaddr & mask(logBytes); 7110779SCurtis.Dunham@arm.com Addr paddr = addr | masked_addr; 7210779SCurtis.Dunham@arm.com DPRINTF(VtoPhys, "vtophys(%#x) -> %#x\n", vaddr, paddr); 7310779SCurtis.Dunham@arm.com return paddr; 7410779SCurtis.Dunham@arm.com } 7510779SCurtis.Dunham@arm.com} 7610779SCurtis.Dunham@arm.com