Fixed ALPHA_FS by moving the remnants of isa_fullsys_traits.hh into arch/alpha/pageta...
authorGabe Black <gblack@eecs.umich.edu>
Tue, 15 Aug 2006 08:46:51 +0000 (04:46 -0400)
committerGabe Black <gblack@eecs.umich.edu>
Tue, 15 Aug 2006 08:46:51 +0000 (04:46 -0400)
--HG--
extra : convert_revision : 02a47fa62b17245763314890beb68339c789d18f

src/arch/SConscript
src/arch/alpha/ev5.cc
src/arch/alpha/faults.hh
src/arch/alpha/isa_traits.hh
src/arch/alpha/pagetable.hh [new file with mode: 0644]
src/arch/alpha/tlb.cc
src/arch/alpha/tlb.hh
src/arch/alpha/vtophys.hh
src/cpu/simple/base.cc
src/cpu/static_inst.hh
src/dev/platform.cc

index d77060d620802b1a9a95596ea83b831cfab60575..59cea6211b328f2b1d15bbcc38bf6558b0b6cc0f 100644 (file)
@@ -47,6 +47,7 @@ sources = []
 
 # List of headers to generate
 isa_switch_hdrs = Split('''
+       arguments.hh
        faults.hh
        isa_traits.hh
        process.hh
index ae3b668eaf792ada1b01527cdc5b223793d0bea9..796ed07de424b4dcb079f99aaa05d9953e739221 100644 (file)
  *          Nathan Binkert
  */
 
-#include "arch/alpha/tlb.hh"
+#include "arch/alpha/faults.hh"
 #include "arch/alpha/isa_traits.hh"
 #include "arch/alpha/osfpal.hh"
+#include "arch/alpha/tlb.hh"
 #include "base/kgdb.h"
 #include "base/remote_gdb.hh"
 #include "base/stats/events.hh"
index 11a56817424f19d4ab415a908d8c4024331da768..3ef4d55219d093230b6e2a975489bfa5485636a9 100644 (file)
@@ -32,7 +32,7 @@
 #ifndef __ALPHA_FAULTS_HH__
 #define __ALPHA_FAULTS_HH__
 
-#include "arch/alpha/isa_traits.hh"
+#include "arch/alpha/pagetable.hh"
 #include "sim/faults.hh"
 
 // The design of the "name" and "vect" functions is in sim/faults.hh
index ae4397c4c32903b7e47209b1d32c426f66a9ddd1..72e38ae3e34d526ca128f85d1f48c6a2c7c41999 100644 (file)
 namespace LittleEndianGuest {}
 
 #include "arch/alpha/types.hh"
-#include "arch/alpha/isa_traits.hh"
 #include "config/full_system.hh"
 #include "sim/host.hh"
 
 class StaticInstPtr;
 
-#if FULL_SYSTEM
-#include "arch/alpha/isa_fullsys_traits.hh"
-#endif
-
-
 namespace AlphaISA
 {
 
diff --git a/src/arch/alpha/pagetable.hh b/src/arch/alpha/pagetable.hh
new file mode 100644 (file)
index 0000000..3108c0a
--- /dev/null
@@ -0,0 +1,112 @@
+/*
+ * Copyright (c) 2002-2005 The Regents of The University of Michigan
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Nathan Binkert
+ *          Steve Reinhardt
+ */
+
+#ifndef __ARCH_ALPHA_PAGETABLE_H__
+#define __ARCH_ALPHA_PAGETABLE_H__
+
+#include "arch/alpha/isa_traits.hh"
+#include "arch/alpha/utility.hh"
+#include "config/full_system.hh"
+
+namespace AlphaISA {
+
+#if FULL_SYSTEM
+    struct VAddr
+    {
+        static const int ImplBits = 43;
+        static const Addr ImplMask = (ULL(1) << ImplBits) - 1;
+        static const Addr UnImplMask = ~ImplMask;
+
+        VAddr(Addr a) : addr(a) {}
+        Addr addr;
+        operator Addr() const { return addr; }
+        const VAddr &operator=(Addr a) { addr = a; return *this; }
+
+        Addr vpn() const { return (addr & ImplMask) >> PageShift; }
+        Addr page() const { return addr & PageMask; }
+        Addr offset() const { return addr & PageOffset; }
+
+        Addr level3() const
+        { return AlphaISA::PteAddr(addr >> PageShift); }
+        Addr level2() const
+        { return AlphaISA::PteAddr(addr >> NPtePageShift + PageShift); }
+        Addr level1() const
+        { return AlphaISA::PteAddr(addr >> 2 * NPtePageShift + PageShift); }
+    };
+
+    struct PageTableEntry
+    {
+        PageTableEntry(uint64_t e) : entry(e) {}
+        uint64_t entry;
+        operator uint64_t() const { return entry; }
+        const PageTableEntry &operator=(uint64_t e) { entry = e; return *this; }
+        const PageTableEntry &operator=(const PageTableEntry &e)
+        { entry = e.entry; return *this; }
+
+        Addr _pfn()  const { return (entry >> 32) & 0xffffffff; }
+        Addr _sw()   const { return (entry >> 16) & 0xffff; }
+        int  _rsv0() const { return (entry >> 14) & 0x3; }
+        bool _uwe()  const { return (entry >> 13) & 0x1; }
+        bool _kwe()  const { return (entry >> 12) & 0x1; }
+        int  _rsv1() const { return (entry >> 10) & 0x3; }
+        bool _ure()  const { return (entry >>  9) & 0x1; }
+        bool _kre()  const { return (entry >>  8) & 0x1; }
+        bool _nomb() const { return (entry >>  7) & 0x1; }
+        int  _gh()   const { return (entry >>  5) & 0x3; }
+        bool _asm()  const { return (entry >>  4) & 0x1; }
+        bool _foe()  const { return (entry >>  3) & 0x1; }
+        bool _fow()  const { return (entry >>  2) & 0x1; }
+        bool _for()  const { return (entry >>  1) & 0x1; }
+        bool valid() const { return (entry >>  0) & 0x1; }
+
+        Addr paddr() const { return _pfn() << PageShift; }
+    };
+
+    // ITB/DTB page table entry
+    struct PTE
+    {
+        Addr tag;                      // virtual page number tag
+        Addr ppn;                      // physical page number
+        uint8_t xre;           // read permissions - VMEM_PERM_* mask
+        uint8_t xwe;           // write permissions - VMEM_PERM_* mask
+        uint8_t asn;           // address space number
+        bool asma;                     // address space match
+        bool fonr;                     // fault on read
+        bool fonw;                     // fault on write
+        bool valid;                    // valid page table entry
+
+        void serialize(std::ostream &os);
+        void unserialize(Checkpoint *cp, const std::string &section);
+    };
+#endif
+};
+#endif // __ARCH_ALPHA_PAGETABLE_H__
+
index c6684274b19f0d6b21db2cec9e52d53a0796adc6..bab44c434ac8eafa9ccc9a49f247653d0cdceca9 100644 (file)
@@ -33,7 +33,9 @@
 #include <string>
 #include <vector>
 
+#include "arch/alpha/pagetable.hh"
 #include "arch/alpha/tlb.hh"
+#include "arch/alpha/faults.hh"
 #include "base/inifile.hh"
 #include "base/str.hh"
 #include "base/trace.hh"
index 07d01fa5cacd08bd3bbcb379225263db9be305d8..955460649098771b3f85e993255af8dea00caafb 100644 (file)
 
 #include "arch/alpha/ev5.hh"
 #include "arch/alpha/isa_traits.hh"
-#include "arch/alpha/faults.hh"
+#include "arch/alpha/utility.hh"
+#include "arch/alpha/vtophys.hh"
 #include "base/statistics.hh"
 #include "mem/request.hh"
+#include "sim/faults.hh"
 #include "sim/sim_object.hh"
 
 class ThreadContext;
index 472c694ff38586e6046c6f08682c10bf34ddbc0c..32b999c37c3e7ef379cbb51992b45975b79bf0b6 100644 (file)
 #define __ARCH_ALPHA_VTOPHYS_H__
 
 #include "arch/alpha/isa_traits.hh"
+#include "arch/alpha/pagetable.hh"
+#include "arch/alpha/utility.hh"
 
 class ThreadContext;
 class FunctionalPort;
 
 namespace AlphaISA {
 
-PageTableEntry
-kernel_pte_lookup(FunctionalPort *mem, Addr ptbr, AlphaISA::VAddr vaddr);
+    PageTableEntry
+    kernel_pte_lookup(FunctionalPort *mem, Addr ptbr, AlphaISA::VAddr vaddr);
 
-Addr vtophys(Addr vaddr);
-Addr vtophys(ThreadContext *tc, Addr vaddr);
+    Addr vtophys(Addr vaddr);
+    Addr vtophys(ThreadContext *tc, Addr vaddr);
 
-void CopyOut(ThreadContext *tc, void *dst, Addr src, size_t len);
-void CopyIn(ThreadContext *tc, Addr dst, void *src, size_t len);
-void CopyStringOut(ThreadContext *tc, char *dst, Addr vaddr, size_t maxlen);
-void CopyStringIn(ThreadContext *tc, char *src, Addr vaddr);
+    void CopyOut(ThreadContext *tc, void *dst, Addr src, size_t len);
+    void CopyIn(ThreadContext *tc, Addr dst, void *src, size_t len);
+    void CopyStringOut(ThreadContext *tc, char *dst, Addr vaddr, size_t maxlen);
+    void CopyStringIn(ThreadContext *tc, char *src, Addr vaddr);
 
 };
 #endif // __ARCH_ALPHA_VTOPHYS_H__
index 6224557458330f77cb5aeea901c2bc993a307d59..801c96c880753c666b13348341bd44b7fa617610 100644 (file)
@@ -29,6 +29,7 @@
  */
 
 #include "arch/utility.hh"
+#include "arch/faults.hh"
 #include "base/cprintf.hh"
 #include "base/inifile.hh"
 #include "base/loader/symtab.hh"
index 4322e80922cb3bb315f3f790b649af3e1a421590..4d8771ddd06c18b85d4186cda3d0b2efd331962a 100644 (file)
@@ -35,7 +35,7 @@
 #include <string>
 
 #include "arch/isa_traits.hh"
-#include "arch/faults.hh"
+#include "sim/faults.hh"
 #include "base/bitfield.hh"
 #include "base/hashmap.hh"
 #include "base/misc.hh"
index 8546b7805f58b89824ca2ab950cd41fc2e61a2a6..07288249ce01dd299ec8aedccae716e9b088cbbe 100644 (file)
@@ -29,6 +29,7 @@
  *          Nathan Binkert
  */
 
+#include "base/misc.hh"
 #include "dev/platform.hh"
 #include "sim/builder.hh"
 #include "sim/sim_exit.hh"