gem5
v19.0.0.0
Main Page
Related Pages
Modules
+
Namespaces
Namespace List
+
Namespace Members
+
All
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
+
Functions
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
+
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
+
Typedefs
a
b
c
d
e
f
g
h
i
m
n
o
p
r
s
t
u
v
w
x
+
Enumerations
a
b
c
d
e
f
i
l
m
o
p
r
s
t
v
x
+
Enumerator
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
+
Classes
Class List
Class Index
Class Hierarchy
+
Class Members
+
All
:
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
+
Functions
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
+
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
+
Typedefs
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
y
+
Enumerations
a
b
c
d
e
f
g
h
i
l
m
o
p
r
s
t
u
w
+
Enumerator
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
+
Related Functions
:
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
+
Files
File List
+
File Members
+
All
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
+
Functions
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
z
+
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
v
z
+
Typedefs
a
b
c
d
e
f
g
h
i
l
m
n
o
p
r
s
t
u
v
w
+
Enumerations
a
b
c
d
e
f
g
i
l
m
o
p
r
s
t
v
w
+
Enumerator
a
b
c
d
e
f
g
h
i
l
m
n
o
p
q
r
s
t
u
v
w
x
+
Macros
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
•
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Modules
Pages
arch
arm
vtophys.cc
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2010, 2012-2013 ARM Limited
3
* All rights reserved
4
*
5
* The license below extends only to copyright in the software and shall
6
* not be construed as granting a license to any other intellectual
7
* property including but not limited to intellectual property relating
8
* to a hardware implementation of the functionality of the software
9
* licensed hereunder. You may use the software subject to the license
10
* terms below provided that you ensure that this notice is replicated
11
* unmodified and in its entirety in all distributions of the software,
12
* modified or unmodified, in source code or in binary form.
13
*
14
* Copyright (c) 2002-2005 The Regents of The University of Michigan
15
* Copyright (c) 2007-2008 The Florida State University
16
* All rights reserved.
17
*
18
* Redistribution and use in source and binary forms, with or without
19
* modification, are permitted provided that the following conditions are
20
* met: redistributions of source code must retain the above copyright
21
* notice, this list of conditions and the following disclaimer;
22
* redistributions in binary form must reproduce the above copyright
23
* notice, this list of conditions and the following disclaimer in the
24
* documentation and/or other materials provided with the distribution;
25
* neither the name of the copyright holders nor the names of its
26
* contributors may be used to endorse or promote products derived from
27
* this software without specific prior written permission.
28
*
29
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
30
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
31
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
32
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
33
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
34
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
35
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
36
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
37
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
38
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
39
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
40
*
41
* Authors: Ali Saidi
42
* Nathan Binkert
43
* Stephen Hines
44
*/
45
46
#include "
arch/arm/vtophys.hh
"
47
48
#include <string>
49
50
#include "
arch/arm/faults.hh
"
51
#include "
arch/arm/table_walker.hh
"
52
#include "
arch/arm/tlb.hh
"
53
#include "
base/chunk_generator.hh
"
54
#include "
base/trace.hh
"
55
#include "
cpu/thread_context.hh
"
56
#include "
mem/fs_translating_port_proxy.hh
"
57
58
using namespace
std
;
59
using namespace
ArmISA
;
60
61
Addr
62
ArmISA::vtophys
(
Addr
vaddr
)
63
{
64
fatal
(
"VTOPHYS: Can't convert vaddr to paddr on ARM without a thread context"
);
65
}
66
67
static
std::pair<bool, Addr>
68
try_translate
(
ThreadContext
*tc,
Addr
addr
)
69
{
70
Fault
fault;
71
// Set up a functional memory Request to pass to the TLB
72
// to get it to translate the vaddr to a paddr
73
auto
req = std::make_shared<Request>(0,
addr
, 64, 0x40, -1, 0, 0);
74
BaseTLB
*
tlb
;
75
76
// Check the TLBs for a translation
77
// It's possible that there is a valid translation in the tlb
78
// that is no loger valid in the page table in memory
79
// so we need to check here first
80
//
81
// Calling translateFunctional invokes a table-walk if required
82
// so we should always succeed
83
tlb = tc->
getDTBPtr
();
84
fault = tlb->
translateFunctional
(req, tc,
BaseTLB::Read
);
85
if
(fault ==
NoFault
)
86
return
std::make_pair(
true
, req->getPaddr());
87
88
tlb = tc->
getITBPtr
();
89
fault = tlb->
translateFunctional
(req, tc,
BaseTLB::Read
);
90
if
(fault ==
NoFault
)
91
return
std::make_pair(
true
, req->getPaddr());
92
93
return
std::make_pair(
false
, 0);
94
}
95
96
Addr
97
ArmISA::vtophys
(
ThreadContext
*tc,
Addr
addr
)
98
{
99
const
std::pair<bool, Addr>
translation(
try_translate
(tc, addr));
100
101
if
(translation.first)
102
return
translation.second;
103
else
104
panic
(
"Table walkers support functional accesses. We should never get here\n"
);
105
}
106
107
bool
108
ArmISA::virtvalid
(
ThreadContext
*tc,
Addr
vaddr
)
109
{
110
const
std::pair<bool, Addr>
translation(
try_translate
(tc, vaddr));
111
112
return
translation.first;
113
}
114
115
panic
#define panic(...)
This implements a cprintf based panic() function.
Definition:
logging.hh:167
NoFault
decltype(nullptr) constexpr NoFault
Definition:
types.hh:245
fatal
#define fatal(...)
This implements a cprintf based fatal() function.
Definition:
logging.hh:175
std::pair
STL pair class.
Definition:
stl.hh:61
ThreadContext::getDTBPtr
virtual BaseTLB * getDTBPtr()=0
addr
ip6_addr_t addr
Definition:
inet.hh:335
tlb.hh
ArmISA::virtvalid
bool virtvalid(ThreadContext *tc, Addr vaddr)
Definition:
vtophys.cc:108
std
Overload hash function for BasicBlockRange type.
Definition:
vec_reg.hh:586
ArmISA
Definition:
ccregs.hh:42
ThreadContext
ThreadContext is the external interface to all thread state for anything outside of the CPU...
Definition:
thread_context.hh:93
trace.hh
BaseTLB
Definition:
tlb.hh:52
faults.hh
BaseTLB::Read
Definition:
tlb.hh:59
try_translate
static std::pair< bool, Addr > try_translate(ThreadContext *tc, Addr addr)
Definition:
vtophys.cc:68
ArmISA::vtophys
Addr vtophys(Addr vaddr)
Definition:
vtophys.cc:62
MipsISA::vaddr
vaddr
Definition:
pra_constants.hh:277
ThreadContext::getITBPtr
virtual BaseTLB * getITBPtr()=0
vtophys.hh
ArmISA::tlb
Bitfield< 59, 56 > tlb
Definition:
miscregs_types.hh:91
Addr
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition:
types.hh:142
thread_context.hh
fs_translating_port_proxy.hh
TranslatingPortProxy Object Declaration for FS.
chunk_generator.hh
Declaration and inline definition of ChunkGenerator object.
Fault
std::shared_ptr< FaultBase > Fault
Definition:
types.hh:240
table_walker.hh
BaseTLB::translateFunctional
virtual Fault translateFunctional(const RequestPtr &req, ThreadContext *tc, Mode mode)
Definition:
tlb.hh:98
Generated on Fri Feb 28 2020 16:26:56 for gem5 by
doxygen
1.8.13