gem5
|
This class captures the state of an address translation. More...
#include <translation.hh>
Public Member Functions | |
WholeTranslationState (RequestPtr _req, uint8_t *_data, uint64_t *_res, BaseTLB::Mode _mode) | |
Single translation state. More... | |
WholeTranslationState (RequestPtr _req, RequestPtr _sreqLow, 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 61 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 81 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 95 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 197 of file translation.hh.
References isSplit, mainReq, sreqHigh, and sreqLow.
Referenced by TimingSimpleCPU::finishTranslation(), and BaseDynInst< Impl >::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 114 of file translation.hh.
References faults, Request::getFlags(), Request::getPaddr(), MipsISA::index, isSplit, mainReq, NoFault, outstanding, Request::setFlags(), Request::setPaddr(), 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 136 of file translation.hh.
References faults, isSplit, and NoFault.
Referenced by DataTranslation< ExecContextPtr >::finish(), TimingSimpleCPU::finishTranslation(), and BaseDynInst< Impl >::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 190 of file translation.hh.
References Request::getFlags(), and mainReq.
Referenced by BaseDynInst< Impl >::finishTranslation().
|
inline |
Get the physical address of this request.
Definition at line 179 of file translation.hh.
References Request::getPaddr(), and mainReq.
Referenced by BaseDynInst< Impl >::finishTranslation().
|
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 172 of file translation.hh.
References Request::isPrefetch(), and 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 161 of file translation.hh.
References Request::isStrictlyOrdered(), and mainReq.
Referenced by BaseDynInst< Impl >::finishTranslation().
|
inline |
Remove all faults from the translation.
Definition at line 150 of file translation.hh.
References faults, and NoFault.
Referenced by TimingSimpleCPU::finishTranslation().
uint8_t* WholeTranslationState::data |
Definition at line 73 of file translation.hh.
Referenced by TimingSimpleCPU::finishTranslation().
bool WholeTranslationState::delay |
Definition at line 68 of file translation.hh.
Referenced by DataTranslation< ExecContextPtr >::markDelayed().
|
protected |
Definition at line 65 of file translation.hh.
Referenced by finish(), getFault(), setNoFault(), and WholeTranslationState().
bool WholeTranslationState::isSplit |
Definition at line 69 of file translation.hh.
Referenced by deleteReqs(), finish(), TimingSimpleCPU::finishTranslation(), BaseDynInst< Impl >::finishTranslation(), and getFault().
RequestPtr WholeTranslationState::mainReq |
Definition at line 70 of file translation.hh.
Referenced by deleteReqs(), finish(), TimingSimpleCPU::finishTranslation(), BaseDynInst< Impl >::finishTranslation(), getFlags(), getPaddr(), BaseDynInst< Impl >::initiateTranslation(), isPrefetch(), and isStrictlyOrdered().
BaseTLB::Mode WholeTranslationState::mode |
Definition at line 75 of file translation.hh.
Referenced by DataTranslation< ExecContextPtr >::finish(), TimingSimpleCPU::finishTranslation(), and WholeTranslationState().
|
protected |
Definition at line 64 of file translation.hh.
Referenced by finish().
uint64_t* WholeTranslationState::res |
Definition at line 74 of file translation.hh.
Referenced by TimingSimpleCPU::finishTranslation(), and BaseDynInst< Impl >::finishTranslation().
RequestPtr WholeTranslationState::sreqHigh |
Definition at line 72 of file translation.hh.
Referenced by deleteReqs(), finish(), TimingSimpleCPU::finishTranslation(), BaseDynInst< Impl >::finishTranslation(), and BaseDynInst< Impl >::initiateTranslation().
RequestPtr WholeTranslationState::sreqLow |
Definition at line 71 of file translation.hh.
Referenced by deleteReqs(), finish(), TimingSimpleCPU::finishTranslation(), BaseDynInst< Impl >::finishTranslation(), and BaseDynInst< Impl >::initiateTranslation().