tlb.cc revision 5034
14997Sgblack@eecs.umich.edu/*
24997Sgblack@eecs.umich.edu * Copyright (c) 2001-2005 The Regents of The University of Michigan
34997Sgblack@eecs.umich.edu * All rights reserved.
44997Sgblack@eecs.umich.edu *
54997Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without
64997Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are
74997Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright
84997Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer;
94997Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright
104997Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the
114997Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution;
124997Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its
134997Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from
144997Sgblack@eecs.umich.edu * this software without specific prior written permission.
154997Sgblack@eecs.umich.edu *
164997Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
174997Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
184997Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
194997Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
204997Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
214997Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
224997Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
234997Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
244997Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
254997Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
264997Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
274997Sgblack@eecs.umich.edu *
284997Sgblack@eecs.umich.edu * Authors: Gabe Black
294997Sgblack@eecs.umich.edu */
304997Sgblack@eecs.umich.edu
314997Sgblack@eecs.umich.edu#include <cstring>
324997Sgblack@eecs.umich.edu
334997Sgblack@eecs.umich.edu#include "arch/mips/tlb.hh"
344997Sgblack@eecs.umich.edu
354997Sgblack@eecs.umich.edunamespace MipsISA {
365019Sgblack@eecs.umich.edu    Fault
375019Sgblack@eecs.umich.edu    TLB::translate(RequestPtr req, ThreadContext *tc, bool)
385019Sgblack@eecs.umich.edu    {
395019Sgblack@eecs.umich.edu        Fault fault = GenericTLB::translate(req, tc);
405019Sgblack@eecs.umich.edu        if (fault != NoFault)
415019Sgblack@eecs.umich.edu            return fault;
425019Sgblack@eecs.umich.edu
435019Sgblack@eecs.umich.edu        typeof(req->getSize()) size = req->getSize();
445019Sgblack@eecs.umich.edu        Addr paddr = req->getPaddr();
455019Sgblack@eecs.umich.edu
465019Sgblack@eecs.umich.edu        if (!isPowerOf2(size))
475019Sgblack@eecs.umich.edu            panic("Invalid request size!\n");
485019Sgblack@eecs.umich.edu        if ((size - 1) & paddr)
495019Sgblack@eecs.umich.edu            return new GenericAlignmentFault(paddr);
505019Sgblack@eecs.umich.edu
515019Sgblack@eecs.umich.edu        return NoFault;
525019Sgblack@eecs.umich.edu    }
535019Sgblack@eecs.umich.edu
545014Sgblack@eecs.umich.edu    void
555014Sgblack@eecs.umich.edu    TlbEntry::serialize(std::ostream &os)
565014Sgblack@eecs.umich.edu    {
575014Sgblack@eecs.umich.edu        SERIALIZE_SCALAR(pageStart);
585014Sgblack@eecs.umich.edu    }
595014Sgblack@eecs.umich.edu
605014Sgblack@eecs.umich.edu    void
615014Sgblack@eecs.umich.edu    TlbEntry::unserialize(Checkpoint *cp, const std::string &section)
625014Sgblack@eecs.umich.edu    {
635014Sgblack@eecs.umich.edu        UNSERIALIZE_SCALAR(pageStart);
645014Sgblack@eecs.umich.edu    }
654997Sgblack@eecs.umich.edu};
664997Sgblack@eecs.umich.edu
674997Sgblack@eecs.umich.eduMipsISA::ITB *
684997Sgblack@eecs.umich.eduMipsITBParams::create()
694997Sgblack@eecs.umich.edu{
705034Smilesck@eecs.umich.edu    return new MipsISA::ITB(this);
714997Sgblack@eecs.umich.edu}
724997Sgblack@eecs.umich.edu
734997Sgblack@eecs.umich.eduMipsISA::DTB *
744997Sgblack@eecs.umich.eduMipsDTBParams::create()
754997Sgblack@eecs.umich.edu{
765034Smilesck@eecs.umich.edu    return new MipsISA::DTB(this);
774997Sgblack@eecs.umich.edu}
78