gem5  v20.1.0.0
Public Member Functions | Public Attributes | Protected Attributes | List of all members
WholeTranslationState Class Reference

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]
 

Detailed Description

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.

Constructor & Destructor Documentation

◆ WholeTranslationState() [1/2]

WholeTranslationState::WholeTranslationState ( const RequestPtr _req,
uint8_t *  _data,
uint64_t *  _res,
BaseTLB::Mode  _mode 
)
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.

◆ WholeTranslationState() [2/2]

WholeTranslationState::WholeTranslationState ( const RequestPtr _req,
const RequestPtr _sreqLow,
const RequestPtr _sreqHigh,
uint8_t *  _data,
uint64_t *  _res,
BaseTLB::Mode  _mode 
)
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.

Member Function Documentation

◆ deleteReqs()

void WholeTranslationState::deleteReqs ( )
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().

◆ finish()

bool WholeTranslationState::finish ( const Fault fault,
int  index 
)
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().

◆ getFault()

Fault WholeTranslationState::getFault ( ) const
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().

◆ getFlags()

unsigned WholeTranslationState::getFlags ( )
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.

◆ getPaddr()

Addr WholeTranslationState::getPaddr ( ) const
inline

Get the physical address of this request.

Definition at line 176 of file translation.hh.

References mainReq.

◆ isPrefetch()

bool WholeTranslationState::isPrefetch ( ) const
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().

◆ isStrictlyOrdered()

bool WholeTranslationState::isStrictlyOrdered ( ) const
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.

◆ setNoFault()

void WholeTranslationState::setNoFault ( )
inline

Remove all faults from the translation.

Definition at line 147 of file translation.hh.

References faults, and NoFault.

Referenced by TimingSimpleCPU::finishTranslation().

Member Data Documentation

◆ data

uint8_t* WholeTranslationState::data

Definition at line 70 of file translation.hh.

Referenced by TimingSimpleCPU::finishTranslation().

◆ delay

bool WholeTranslationState::delay

Definition at line 65 of file translation.hh.

Referenced by DataTranslation< ExecContextPtr >::markDelayed().

◆ faults

Fault WholeTranslationState::faults[2]
protected

Definition at line 62 of file translation.hh.

Referenced by finish(), getFault(), setNoFault(), and WholeTranslationState().

◆ isSplit

bool WholeTranslationState::isSplit

Definition at line 66 of file translation.hh.

Referenced by deleteReqs(), finish(), TimingSimpleCPU::finishTranslation(), and getFault().

◆ mainReq

RequestPtr WholeTranslationState::mainReq

◆ mode

BaseTLB::Mode WholeTranslationState::mode

◆ outstanding

int WholeTranslationState::outstanding
protected

Definition at line 61 of file translation.hh.

Referenced by finish().

◆ res

uint64_t* WholeTranslationState::res

Definition at line 71 of file translation.hh.

Referenced by TimingSimpleCPU::finishTranslation().

◆ sreqHigh

RequestPtr WholeTranslationState::sreqHigh

Definition at line 69 of file translation.hh.

Referenced by deleteReqs(), finish(), and TimingSimpleCPU::finishTranslation().

◆ sreqLow

RequestPtr WholeTranslationState::sreqLow

Definition at line 68 of file translation.hh.

Referenced by deleteReqs(), finish(), and TimingSimpleCPU::finishTranslation().


The documentation for this class was generated from the following file:

Generated on Wed Sep 30 2020 14:02:34 for gem5 by doxygen 1.8.17