tlb.cc revision 5100
14997Sgblack@eecs.umich.edu/*
24997Sgblack@eecs.umich.edu * Copyright (c) 2007 The Hewlett-Packard Development Company
34997Sgblack@eecs.umich.edu * All rights reserved.
44997Sgblack@eecs.umich.edu *
54997Sgblack@eecs.umich.edu * Redistribution and use of this software in source and binary forms,
64997Sgblack@eecs.umich.edu * with or without modification, are permitted provided that the
74997Sgblack@eecs.umich.edu * following conditions are met:
84997Sgblack@eecs.umich.edu *
94997Sgblack@eecs.umich.edu * The software must be used only for Non-Commercial Use which means any
104997Sgblack@eecs.umich.edu * use which is NOT directed to receiving any direct monetary
114997Sgblack@eecs.umich.edu * compensation for, or commercial advantage from such use.  Illustrative
124997Sgblack@eecs.umich.edu * examples of non-commercial use are academic research, personal study,
134997Sgblack@eecs.umich.edu * teaching, education and corporate research & development.
144997Sgblack@eecs.umich.edu * Illustrative examples of commercial use are distributing products for
154997Sgblack@eecs.umich.edu * commercial advantage and providing services using the software for
164997Sgblack@eecs.umich.edu * commercial advantage.
174997Sgblack@eecs.umich.edu *
184997Sgblack@eecs.umich.edu * If you wish to use this software or functionality therein that may be
194997Sgblack@eecs.umich.edu * covered by patents for commercial use, please contact:
204997Sgblack@eecs.umich.edu *     Director of Intellectual Property Licensing
214997Sgblack@eecs.umich.edu *     Office of Strategy and Technology
224997Sgblack@eecs.umich.edu *     Hewlett-Packard Company
234997Sgblack@eecs.umich.edu *     1501 Page Mill Road
244997Sgblack@eecs.umich.edu *     Palo Alto, California  94304
254997Sgblack@eecs.umich.edu *
264997Sgblack@eecs.umich.edu * Redistributions of source code must retain the above copyright notice,
274997Sgblack@eecs.umich.edu * this list of conditions and the following disclaimer.  Redistributions
284997Sgblack@eecs.umich.edu * in binary form must reproduce the above copyright notice, this list of
294997Sgblack@eecs.umich.edu * conditions and the following disclaimer in the documentation and/or
304997Sgblack@eecs.umich.edu * other materials provided with the distribution.  Neither the name of
314997Sgblack@eecs.umich.edu * the COPYRIGHT HOLDER(s), HEWLETT-PACKARD COMPANY, nor the names of its
324997Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from
334997Sgblack@eecs.umich.edu * this software without specific prior written permission.  No right of
344997Sgblack@eecs.umich.edu * sublicense is granted herewith.  Derivatives of the software and
354997Sgblack@eecs.umich.edu * output created using the software may be prepared, but only for
364997Sgblack@eecs.umich.edu * Non-Commercial Uses.  Derivatives of the software may be shared with
374997Sgblack@eecs.umich.edu * others provided: (i) the others agree to abide by the list of
384997Sgblack@eecs.umich.edu * conditions herein which includes the Non-Commercial Use restrictions;
394997Sgblack@eecs.umich.edu * and (ii) such Derivatives of the software include the above copyright
404997Sgblack@eecs.umich.edu * notice to acknowledge the contribution from this software where
414997Sgblack@eecs.umich.edu * applicable, this list of conditions and the disclaimer below.
424997Sgblack@eecs.umich.edu *
434997Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
444997Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
454997Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
464997Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
474997Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
484997Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
494997Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
504997Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
514997Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
524997Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
534997Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
544997Sgblack@eecs.umich.edu *
554997Sgblack@eecs.umich.edu * Authors: Gabe Black
564997Sgblack@eecs.umich.edu */
574997Sgblack@eecs.umich.edu
584997Sgblack@eecs.umich.edu#include <cstring>
594997Sgblack@eecs.umich.edu
605086Sgblack@eecs.umich.edu#include "config/full_system.hh"
615086Sgblack@eecs.umich.edu
625086Sgblack@eecs.umich.edu#if FULL_SYSTEM
635086Sgblack@eecs.umich.edu
645086Sgblack@eecs.umich.edu#include "arch/x86/tlb.hh"
655086Sgblack@eecs.umich.edu#include "base/bitfield.hh"
665086Sgblack@eecs.umich.edu#include "base/trace.hh"
675086Sgblack@eecs.umich.edu#include "cpu/thread_context.hh"
685086Sgblack@eecs.umich.edu#include "cpu/base.hh"
695086Sgblack@eecs.umich.edu#include "mem/packet_access.hh"
705086Sgblack@eecs.umich.edu#include "mem/request.hh"
715086Sgblack@eecs.umich.edu#include "sim/system.hh"
725086Sgblack@eecs.umich.edu
735086Sgblack@eecs.umich.edunamespace X86ISA {
745086Sgblack@eecs.umich.edu
755086Sgblack@eecs.umich.eduTLB::TLB(const Params *p) : SimObject(p)
765086Sgblack@eecs.umich.edu{
775086Sgblack@eecs.umich.edu}
785086Sgblack@eecs.umich.edu
795086Sgblack@eecs.umich.eduFault
805086Sgblack@eecs.umich.eduITB::translate(RequestPtr &req, ThreadContext *tc)
815086Sgblack@eecs.umich.edu{
825086Sgblack@eecs.umich.edu    return NoFault;
835086Sgblack@eecs.umich.edu}
845086Sgblack@eecs.umich.edu
855086Sgblack@eecs.umich.edu
865086Sgblack@eecs.umich.edu
875086Sgblack@eecs.umich.eduFault
885086Sgblack@eecs.umich.eduDTB::translate(RequestPtr &req, ThreadContext *tc, bool write)
895086Sgblack@eecs.umich.edu{
905086Sgblack@eecs.umich.edu    return NoFault;
915086Sgblack@eecs.umich.edu};
925086Sgblack@eecs.umich.edu
935086Sgblack@eecs.umich.edu#if FULL_SYSTEM
945086Sgblack@eecs.umich.edu
955086Sgblack@eecs.umich.eduTick
965086Sgblack@eecs.umich.eduDTB::doMmuRegRead(ThreadContext *tc, Packet *pkt)
975086Sgblack@eecs.umich.edu{
985100Ssaidi@eecs.umich.edu    return tc->getCpuPtr()->ticks(1);
995086Sgblack@eecs.umich.edu}
1005086Sgblack@eecs.umich.edu
1015086Sgblack@eecs.umich.eduTick
1025086Sgblack@eecs.umich.eduDTB::doMmuRegWrite(ThreadContext *tc, Packet *pkt)
1035086Sgblack@eecs.umich.edu{
1045100Ssaidi@eecs.umich.edu    return tc->getCpuPtr()->ticks(1);
1055086Sgblack@eecs.umich.edu}
1065086Sgblack@eecs.umich.edu
1075086Sgblack@eecs.umich.edu#endif
1085086Sgblack@eecs.umich.edu
1095086Sgblack@eecs.umich.eduvoid
1105086Sgblack@eecs.umich.eduTLB::serialize(std::ostream &os)
1115086Sgblack@eecs.umich.edu{
1125086Sgblack@eecs.umich.edu}
1135086Sgblack@eecs.umich.edu
1145086Sgblack@eecs.umich.eduvoid
1155086Sgblack@eecs.umich.eduTLB::unserialize(Checkpoint *cp, const std::string &section)
1165086Sgblack@eecs.umich.edu{
1175086Sgblack@eecs.umich.edu}
1185086Sgblack@eecs.umich.edu
1195086Sgblack@eecs.umich.eduvoid
1205086Sgblack@eecs.umich.eduDTB::serialize(std::ostream &os)
1215086Sgblack@eecs.umich.edu{
1225086Sgblack@eecs.umich.edu    TLB::serialize(os);
1235086Sgblack@eecs.umich.edu}
1245086Sgblack@eecs.umich.edu
1255086Sgblack@eecs.umich.eduvoid
1265086Sgblack@eecs.umich.eduDTB::unserialize(Checkpoint *cp, const std::string &section)
1275086Sgblack@eecs.umich.edu{
1285086Sgblack@eecs.umich.edu    TLB::unserialize(cp, section);
1295086Sgblack@eecs.umich.edu}
1305086Sgblack@eecs.umich.edu
1315086Sgblack@eecs.umich.edu/* end namespace X86ISA */ }
1325086Sgblack@eecs.umich.edu
1335086Sgblack@eecs.umich.edu#else
1345086Sgblack@eecs.umich.edu
1355086Sgblack@eecs.umich.edu#include <cstring>
1365086Sgblack@eecs.umich.edu
1374997Sgblack@eecs.umich.edu#include "arch/x86/tlb.hh"
1384997Sgblack@eecs.umich.edu#include "params/X86DTB.hh"
1394997Sgblack@eecs.umich.edu#include "params/X86ITB.hh"
1405004Sgblack@eecs.umich.edu#include "sim/serialize.hh"
1414997Sgblack@eecs.umich.edu
1424997Sgblack@eecs.umich.edunamespace X86ISA {
1435004Sgblack@eecs.umich.edu    void
1445004Sgblack@eecs.umich.edu    TlbEntry::serialize(std::ostream &os)
1455004Sgblack@eecs.umich.edu    {
1465004Sgblack@eecs.umich.edu        SERIALIZE_SCALAR(pageStart);
1475004Sgblack@eecs.umich.edu    }
1485004Sgblack@eecs.umich.edu
1495004Sgblack@eecs.umich.edu    void
1505004Sgblack@eecs.umich.edu    TlbEntry::unserialize(Checkpoint *cp, const std::string &section)
1515004Sgblack@eecs.umich.edu    {
1525004Sgblack@eecs.umich.edu        UNSERIALIZE_SCALAR(pageStart);
1535004Sgblack@eecs.umich.edu    }
1544997Sgblack@eecs.umich.edu};
1554997Sgblack@eecs.umich.edu
1565086Sgblack@eecs.umich.edu#endif
1575086Sgblack@eecs.umich.edu
1584997Sgblack@eecs.umich.eduX86ISA::ITB *
1594997Sgblack@eecs.umich.eduX86ITBParams::create()
1604997Sgblack@eecs.umich.edu{
1615038Sgblack@eecs.umich.edu    return new X86ISA::ITB(this);
1624997Sgblack@eecs.umich.edu}
1634997Sgblack@eecs.umich.edu
1644997Sgblack@eecs.umich.eduX86ISA::DTB *
1654997Sgblack@eecs.umich.eduX86DTBParams::create()
1664997Sgblack@eecs.umich.edu{
1675038Sgblack@eecs.umich.edu    return new X86ISA::DTB(this);
1684997Sgblack@eecs.umich.edu}
169