page_table.hh (8601:af28085882dc) page_table.hh (8763:509e9bb84dfa)
1/*
2 * Copyright (c) 2003 The Regents of The University of Michigan
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met: redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer;

--- 28 unchanged lines hidden (view full) ---

37#define __MEM_PAGE_TABLE_HH__
38
39#include <string>
40
41#include "arch/isa_traits.hh"
42#include "arch/tlb.hh"
43#include "base/hashmap.hh"
44#include "base/types.hh"
1/*
2 * Copyright (c) 2003 The Regents of The University of Michigan
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met: redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer;

--- 28 unchanged lines hidden (view full) ---

37#define __MEM_PAGE_TABLE_HH__
38
39#include <string>
40
41#include "arch/isa_traits.hh"
42#include "arch/tlb.hh"
43#include "base/hashmap.hh"
44#include "base/types.hh"
45#include "config/full_system.hh"
45#include "config/the_isa.hh"
46#include "mem/request.hh"
47#include "sim/serialize.hh"
48
46#include "config/the_isa.hh"
47#include "mem/request.hh"
48#include "sim/serialize.hh"
49
50#if !FULL_SYSTEM
51class Process;
52#endif
53
49/**
50 * Page Table Declaration.
51 */
52class PageTable
53{
54 protected:
55 typedef m5::hash_map<Addr, TheISA::TlbEntry> PTable;
56 typedef PTable::iterator PTableItr;

--- 4 unchanged lines hidden (view full) ---

61 TheISA::TlbEntry entry;
62 };
63
64 struct cacheElement pTableCache[3];
65
66 const Addr pageSize;
67 const Addr offsetMask;
68
54/**
55 * Page Table Declaration.
56 */
57class PageTable
58{
59 protected:
60 typedef m5::hash_map<Addr, TheISA::TlbEntry> PTable;
61 typedef PTable::iterator PTableItr;

--- 4 unchanged lines hidden (view full) ---

66 TheISA::TlbEntry entry;
67 };
68
69 struct cacheElement pTableCache[3];
70
71 const Addr pageSize;
72 const Addr offsetMask;
73
69 const uint64_t pid;
70 const std::string _name;
74#if !FULL_SYSTEM
75 Process *process;
76#endif
71
72 public:
73
77
78 public:
79
74 PageTable(const std::string &__name, uint64_t _pid,
75 Addr _pageSize = TheISA::VMPageSize);
80 PageTable(
81#if !FULL_SYSTEM
82 Process *_process,
83#endif
84 Addr _pageSize = TheISA::VMPageSize);
76
77 ~PageTable();
78
85
86 ~PageTable();
87
79 // for DPRINTF compatibility
80 const std::string name() const { return _name; }
81
82 Addr pageAlign(Addr a) { return (a & ~offsetMask); }
83 Addr pageOffset(Addr a) { return (a & offsetMask); }
84
88 Addr pageAlign(Addr a) { return (a & ~offsetMask); }
89 Addr pageOffset(Addr a) { return (a & offsetMask); }
90
85 void map(Addr vaddr, Addr paddr, int64_t size, bool clobber = false);
91 void allocate(Addr vaddr, int64_t size);
86 void remap(Addr vaddr, int64_t size, Addr new_vaddr);
92 void remap(Addr vaddr, int64_t size, Addr new_vaddr);
87 void unmap(Addr vaddr, int64_t size);
93 void deallocate(Addr vaddr, int64_t size);
88
89 /**
94
95 /**
90 * Check if any pages in a region are already allocated
91 * @param vaddr The starting virtual address of the region.
92 * @param size The length of the region.
93 * @return True if no pages in the region are mapped.
94 */
95 bool isUnmapped(Addr vaddr, int64_t size);
96
97 /**
98 * Lookup function
99 * @param vaddr The virtual address.
100 * @return entry The page table entry corresponding to vaddr.
101 */
102 bool lookup(Addr vaddr, TheISA::TlbEntry &entry);
103
104 /**
105 * Translate function

--- 42 unchanged lines hidden ---
96 * Lookup function
97 * @param vaddr The virtual address.
98 * @return entry The page table entry corresponding to vaddr.
99 */
100 bool lookup(Addr vaddr, TheISA::TlbEntry &entry);
101
102 /**
103 * Translate function

--- 42 unchanged lines hidden ---