pagetable.hh revision 6216
14159Sgblack@eecs.umich.edu/*
24159Sgblack@eecs.umich.edu * Copyright (c) 2007 The Hewlett-Packard Development Company
34159Sgblack@eecs.umich.edu * All rights reserved.
44159Sgblack@eecs.umich.edu *
54159Sgblack@eecs.umich.edu * Redistribution and use of this software in source and binary forms,
64159Sgblack@eecs.umich.edu * with or without modification, are permitted provided that the
74159Sgblack@eecs.umich.edu * following conditions are met:
84159Sgblack@eecs.umich.edu *
94159Sgblack@eecs.umich.edu * The software must be used only for Non-Commercial Use which means any
104159Sgblack@eecs.umich.edu * use which is NOT directed to receiving any direct monetary
114159Sgblack@eecs.umich.edu * compensation for, or commercial advantage from such use.  Illustrative
124159Sgblack@eecs.umich.edu * examples of non-commercial use are academic research, personal study,
134159Sgblack@eecs.umich.edu * teaching, education and corporate research & development.
144159Sgblack@eecs.umich.edu * Illustrative examples of commercial use are distributing products for
154159Sgblack@eecs.umich.edu * commercial advantage and providing services using the software for
164159Sgblack@eecs.umich.edu * commercial advantage.
174159Sgblack@eecs.umich.edu *
184159Sgblack@eecs.umich.edu * If you wish to use this software or functionality therein that may be
194159Sgblack@eecs.umich.edu * covered by patents for commercial use, please contact:
204159Sgblack@eecs.umich.edu *     Director of Intellectual Property Licensing
214159Sgblack@eecs.umich.edu *     Office of Strategy and Technology
224159Sgblack@eecs.umich.edu *     Hewlett-Packard Company
234159Sgblack@eecs.umich.edu *     1501 Page Mill Road
244159Sgblack@eecs.umich.edu *     Palo Alto, California  94304
254159Sgblack@eecs.umich.edu *
264159Sgblack@eecs.umich.edu * Redistributions of source code must retain the above copyright notice,
274159Sgblack@eecs.umich.edu * this list of conditions and the following disclaimer.  Redistributions
284159Sgblack@eecs.umich.edu * in binary form must reproduce the above copyright notice, this list of
294159Sgblack@eecs.umich.edu * conditions and the following disclaimer in the documentation and/or
304159Sgblack@eecs.umich.edu * other materials provided with the distribution.  Neither the name of
314159Sgblack@eecs.umich.edu * the COPYRIGHT HOLDER(s), HEWLETT-PACKARD COMPANY, nor the names of its
324159Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from
334159Sgblack@eecs.umich.edu * this software without specific prior written permission.  No right of
344159Sgblack@eecs.umich.edu * sublicense is granted herewith.  Derivatives of the software and
354159Sgblack@eecs.umich.edu * output created using the software may be prepared, but only for
364159Sgblack@eecs.umich.edu * Non-Commercial Uses.  Derivatives of the software may be shared with
374159Sgblack@eecs.umich.edu * others provided: (i) the others agree to abide by the list of
384159Sgblack@eecs.umich.edu * conditions herein which includes the Non-Commercial Use restrictions;
394159Sgblack@eecs.umich.edu * and (ii) such Derivatives of the software include the above copyright
404159Sgblack@eecs.umich.edu * notice to acknowledge the contribution from this software where
414159Sgblack@eecs.umich.edu * applicable, this list of conditions and the disclaimer below.
424159Sgblack@eecs.umich.edu *
434159Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
444159Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
454159Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
464159Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
474159Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
484159Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
494159Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
504159Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
514159Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
524159Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
534159Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
544159Sgblack@eecs.umich.edu *
554159Sgblack@eecs.umich.edu * Authors: Gabe Black
564159Sgblack@eecs.umich.edu */
574159Sgblack@eecs.umich.edu
584159Sgblack@eecs.umich.edu#ifndef __ARCH_X86_PAGETABLE_HH__
594159Sgblack@eecs.umich.edu#define __ARCH_X86_PAGETABLE_HH__
604159Sgblack@eecs.umich.edu
615124Sgblack@eecs.umich.edu#include <iostream>
625124Sgblack@eecs.umich.edu#include <string>
635124Sgblack@eecs.umich.edu
645237Sgblack@eecs.umich.edu#include "base/bitunion.hh"
654159Sgblack@eecs.umich.edu#include "base/misc.hh"
666216Snate@binkert.org#include "base/types.hh"
674159Sgblack@eecs.umich.edu
685124Sgblack@eecs.umich.educlass Checkpoint;
695124Sgblack@eecs.umich.edu
704159Sgblack@eecs.umich.edunamespace X86ISA
714159Sgblack@eecs.umich.edu{
725237Sgblack@eecs.umich.edu    BitUnion64(VAddr)
735237Sgblack@eecs.umich.edu        Bitfield<20, 12> longl1;
745237Sgblack@eecs.umich.edu        Bitfield<29, 21> longl2;
755237Sgblack@eecs.umich.edu        Bitfield<38, 30> longl3;
765237Sgblack@eecs.umich.edu        Bitfield<47, 39> longl4;
775237Sgblack@eecs.umich.edu
785237Sgblack@eecs.umich.edu        Bitfield<20, 12> pael1;
795237Sgblack@eecs.umich.edu        Bitfield<29, 21> pael2;
805237Sgblack@eecs.umich.edu        Bitfield<31, 30> pael3;
815237Sgblack@eecs.umich.edu
825237Sgblack@eecs.umich.edu        Bitfield<21, 12> norml1;
835237Sgblack@eecs.umich.edu        Bitfield<31, 22> norml2;
845237Sgblack@eecs.umich.edu    EndBitUnion(VAddr)
854159Sgblack@eecs.umich.edu
865124Sgblack@eecs.umich.edu    struct TlbEntry
874159Sgblack@eecs.umich.edu    {
885124Sgblack@eecs.umich.edu        // The base of the physical page.
895184Sgblack@eecs.umich.edu        Addr paddr;
905184Sgblack@eecs.umich.edu
915184Sgblack@eecs.umich.edu        // The beginning of the virtual page this entry maps.
925184Sgblack@eecs.umich.edu        Addr vaddr;
935184Sgblack@eecs.umich.edu        // The size of the page this entry represents.
945184Sgblack@eecs.umich.edu        Addr size;
955184Sgblack@eecs.umich.edu
965124Sgblack@eecs.umich.edu        // Read permission is always available, assuming it isn't blocked by
975124Sgblack@eecs.umich.edu        // other mechanisms.
985184Sgblack@eecs.umich.edu        bool writable;
995124Sgblack@eecs.umich.edu        // Whether this page is accesible without being in supervisor mode.
1005124Sgblack@eecs.umich.edu        bool user;
1015124Sgblack@eecs.umich.edu        // Whether to use write through or write back. M5 ignores this and
1025124Sgblack@eecs.umich.edu        // lets the caches handle the writeback policy.
1035124Sgblack@eecs.umich.edu        //bool pwt;
1045124Sgblack@eecs.umich.edu        // Whether the page is cacheable or not.
1055124Sgblack@eecs.umich.edu        bool uncacheable;
1065124Sgblack@eecs.umich.edu        // Whether or not to kick this page out on a write to CR3.
1075124Sgblack@eecs.umich.edu        bool global;
1085124Sgblack@eecs.umich.edu        // A bit used to form an index into the PAT table.
1095124Sgblack@eecs.umich.edu        bool patBit;
1105124Sgblack@eecs.umich.edu        // Whether or not memory on this page can be executed.
1115124Sgblack@eecs.umich.edu        bool noExec;
1125124Sgblack@eecs.umich.edu
1135184Sgblack@eecs.umich.edu        TlbEntry(Addr asn, Addr _vaddr, Addr _paddr);
1145184Sgblack@eecs.umich.edu        TlbEntry() {}
1155124Sgblack@eecs.umich.edu
1165877Shsul@eecs.umich.edu        void
1175877Shsul@eecs.umich.edu        updateVaddr(Addr new_vaddr)
1185877Shsul@eecs.umich.edu        {
1195877Shsul@eecs.umich.edu            vaddr = new_vaddr;
1205877Shsul@eecs.umich.edu        }
1215877Shsul@eecs.umich.edu
1225184Sgblack@eecs.umich.edu        Addr pageStart()
1235184Sgblack@eecs.umich.edu        {
1245184Sgblack@eecs.umich.edu            return paddr;
1255184Sgblack@eecs.umich.edu        }
1265124Sgblack@eecs.umich.edu
1275124Sgblack@eecs.umich.edu        void serialize(std::ostream &os);
1285124Sgblack@eecs.umich.edu        void unserialize(Checkpoint *cp, const std::string &section);
1294159Sgblack@eecs.umich.edu    };
1304159Sgblack@eecs.umich.edu}
1314159Sgblack@eecs.umich.edu
1324159Sgblack@eecs.umich.edu#endif
133