gem5
v20.1.0.0
|
This class captures the state of an address translation. More...
#include <translation.hh>
Public Member Functions | |
WholeTranslationState (const RequestPtr &_req, uint8_t *_data, uint64_t *_res, BaseTLB::Mode _mode) | |
Single translation state. More... | |
WholeTranslationState (const RequestPtr &_req, const RequestPtr &_sreqLow, const RequestPtr &_sreqHigh, uint8_t *_data, uint64_t *_res, BaseTLB::Mode _mode) | |
Split translation state. More... | |
bool | finish (const Fault &fault, int index) |
Finish part of a translation. More... | |
Fault | getFault () const |
Determine whether this translation produced a fault. More... | |
void | setNoFault () |
Remove all faults from the translation. More... | |
bool | isStrictlyOrdered () const |
Check if this request is strictly ordered device access. More... | |
bool | isPrefetch () const |
Check if this request is a prefetch. More... | |
Addr | getPaddr () const |
Get the physical address of this request. More... | |
unsigned | getFlags () |
Get the flags associated with this request. More... | |
void | deleteReqs () |
Delete all requests that make up this translation. More... | |
Public Attributes | |
bool | delay |
bool | isSplit |
RequestPtr | mainReq |
RequestPtr | sreqLow |
RequestPtr | sreqHigh |
uint8_t * | data |
uint64_t * | res |
BaseTLB::Mode | mode |
Protected Attributes | |
int | outstanding |
Fault | faults [2] |
This class captures the state of an address translation.
A translation can be split in two if the ISA supports it and the memory access crosses a page boundary. In this case, this class is shared by two data translations (below). Otherwise it is used by a single data translation class. When each part of the translation is finished, the finish function is called which will indicate whether the whole translation is completed or not. There are also functions for accessing parts of the translation state which deal with the possible split correctly.
Definition at line 58 of file translation.hh.
|
inline |
Single translation state.
We set the number of outstanding translations to one and indicate that it is not split.
Definition at line 78 of file translation.hh.
References faults, mode, NoFault, BaseTLB::Read, and BaseTLB::Write.
|
inline |
Split translation state.
We copy all state into this class, set the number of outstanding translations to two and then mark this as a split translation.
Definition at line 92 of file translation.hh.
References faults, mode, NoFault, BaseTLB::Read, and BaseTLB::Write.
|
inline |
Delete all requests that make up this translation.
Definition at line 194 of file translation.hh.
References isSplit, mainReq, sreqHigh, and sreqLow.
Referenced by TimingSimpleCPU::finishTranslation().
|
inline |
Finish part of a translation.
If there is only one request then this translation is completed. If the request has been split in two then the outstanding count determines whether the translation is complete. In this case, flags from the split request are copied to the main request to make it easier to access them later on.
Definition at line 111 of file translation.hh.
References faults, MipsISA::index, isSplit, mainReq, NoFault, outstanding, sreqHigh, and sreqLow.
Referenced by DataTranslation< ExecContextPtr >::finish().
|
inline |
Determine whether this translation produced a fault.
Both parts of the translation must be checked if this is a split translation.
Definition at line 133 of file translation.hh.
References faults, isSplit, and NoFault.
Referenced by DataTranslation< ExecContextPtr >::finish(), and TimingSimpleCPU::finishTranslation().
|
inline |
Get the flags associated with this request.
We only need to access the main request because the flags will have been copied here on a split translation.
Definition at line 187 of file translation.hh.
References mainReq.
|
inline |
Get the physical address of this request.
Definition at line 176 of file translation.hh.
References mainReq.
|
inline |
Check if this request is a prefetch.
We only need to check the main request because the flags will have been copied here on a split translation.
Definition at line 169 of file translation.hh.
References mainReq.
Referenced by TimingSimpleCPU::finishTranslation().
|
inline |
Check if this request is strictly ordered device access.
We only need to check the main request because the flags will have been copied here on a split translation.
Definition at line 158 of file translation.hh.
References mainReq.
|
inline |
Remove all faults from the translation.
Definition at line 147 of file translation.hh.
References faults, and NoFault.
Referenced by TimingSimpleCPU::finishTranslation().
uint8_t* WholeTranslationState::data |
Definition at line 70 of file translation.hh.
Referenced by TimingSimpleCPU::finishTranslation().
bool WholeTranslationState::delay |
Definition at line 65 of file translation.hh.
Referenced by DataTranslation< ExecContextPtr >::markDelayed().
|
protected |
Definition at line 62 of file translation.hh.
Referenced by finish(), getFault(), setNoFault(), and WholeTranslationState().
bool WholeTranslationState::isSplit |
Definition at line 66 of file translation.hh.
Referenced by deleteReqs(), finish(), TimingSimpleCPU::finishTranslation(), and getFault().
RequestPtr WholeTranslationState::mainReq |
Definition at line 67 of file translation.hh.
Referenced by deleteReqs(), finish(), TimingSimpleCPU::finishTranslation(), getFlags(), getPaddr(), isPrefetch(), and isStrictlyOrdered().
BaseTLB::Mode WholeTranslationState::mode |
Definition at line 72 of file translation.hh.
Referenced by DataTranslation< ExecContextPtr >::finish(), TimingSimpleCPU::finishTranslation(), and WholeTranslationState().
|
protected |
Definition at line 61 of file translation.hh.
Referenced by finish().
uint64_t* WholeTranslationState::res |
Definition at line 71 of file translation.hh.
Referenced by TimingSimpleCPU::finishTranslation().
RequestPtr WholeTranslationState::sreqHigh |
Definition at line 69 of file translation.hh.
Referenced by deleteReqs(), finish(), and TimingSimpleCPU::finishTranslation().
RequestPtr WholeTranslationState::sreqLow |
Definition at line 68 of file translation.hh.
Referenced by deleteReqs(), finish(), and TimingSimpleCPU::finishTranslation().