gem5  v21.1.0.2
Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | List of all members
gem5::o3::LSQ::SingleDataRequest Class Reference

#include <lsq.hh>

Inheritance diagram for gem5::o3::LSQ::SingleDataRequest:
gem5::o3::LSQ::LSQRequest gem5::BaseMMU::Translation gem5::o3::LSQ::HtmCmdRequest

Public Member Functions

 SingleDataRequest (LSQUnit *port, const DynInstPtr &inst, bool isLoad, const Addr &addr, const uint32_t &size, const Request::Flags &flags_, PacketDataPtr data=nullptr, uint64_t *res=nullptr, AtomicOpFunctorPtr amo_op=nullptr)
 
virtual ~SingleDataRequest ()
 
virtual void initiateTranslation ()
 
virtual void finish (const Fault &fault, const RequestPtr &req, gem5::ThreadContext *tc, BaseMMU::Mode mode)
 
virtual bool recvTimingResp (PacketPtr pkt)
 
virtual void sendPacketToCache ()
 
virtual void buildPackets ()
 
virtual Cycles handleLocalAccess (gem5::ThreadContext *thread, PacketPtr pkt)
 Memory mapped IPR accesses. More...
 
virtual bool isCacheBlockHit (Addr blockAddr, Addr cacheBlockMask)
 Test if the request accesses a particular cache line. More...
 
virtual std::string name () const
 
- Public Member Functions inherited from gem5::o3::LSQ::LSQRequest
void packetSent ()
 Update the status to reflect that a packet was sent. More...
 
void packetNotSent ()
 Update the status to reflect that a packet was not sent. More...
 
void sendFragmentToTranslation (int i)
 
bool isComplete ()
 
bool isInTranslation ()
 
bool isTranslationComplete ()
 
bool isTranslationBlocked ()
 
bool isSent ()
 
bool isPartialFault ()
 
bool isMemAccessRequired ()
 
void setStateToFault ()
 
void freeLSQEntry ()
 The LSQ entry is cleared. More...
 
void discard ()
 The request is discarded (e.g. More...
 
void packetReplied ()
 
void writebackScheduled ()
 
void writebackDone ()
 
void squashTranslation ()
 
void complete ()
 
void setContext (const ContextID &context_id)
 Convenience getters/setters. More...
 
const DynInstPtrinstruction ()
 
void setVirt (Addr vaddr, unsigned size, Request::Flags flags_, RequestorID requestor_id, Addr pc)
 Set up virtual request. More...
 
void taskId (const uint32_t &v)
 
uint32_t taskId () const
 
RequestPtr request (int idx=0)
 
const RequestPtr request (int idx=0) const
 
Addr getVaddr (int idx=0) const
 
PacketPtr packet (int idx=0)
 
virtual PacketPtr mainPacket ()
 
virtual RequestPtr mainRequest ()
 
void senderState (LSQSenderState *st)
 
const LSQSenderStatesenderState () const
 
void discardSenderState ()
 Mark senderState as discarded. More...
 
bool isAnyOutstandingRequest ()
 Test if there is any in-flight translation or mem access request. More...
 
bool isSplit () const
 
- Public Member Functions inherited from gem5::BaseMMU::Translation
virtual ~Translation ()
 

Protected Types

using Flag = LSQRequest::Flag
 
using State = LSQRequest::State
 
- Protected Types inherited from gem5::o3::LSQ::LSQRequest
enum  Flag : FlagsStorage {
  IsLoad = 0x00000001, WbStore = 0x00000002, Delayed = 0x00000004, IsSplit = 0x00000008,
  TranslationStarted = 0x00000010, TranslationFinished = 0x00000020, Sent = 0x00000040, Retry = 0x00000080,
  Complete = 0x00000100, TranslationSquashed = 0x00000200, Discarded = 0x00000400, LSQEntryFreed = 0x00000800,
  WritebackScheduled = 0x00001000, WritebackDone = 0x00002000, IsAtomic = 0x00004000
}
 
enum  State {
  State::NotIssued, State::Translation, State::Request, State::Fault,
  State::PartialFault
}
 
typedef uint32_t FlagsStorage
 
typedef Flags< FlagsStorageFlagsType
 

Protected Member Functions

bool isLoad () const
 
bool isTranslationComplete ()
 
LSQUnitlsqUnit ()
 
RequestPtr request (int idx=0)
 
const RequestPtr request (int idx=0) const
 
void sendFragmentToTranslation (int i)
 
void setState (const State &newState)
 
- Protected Member Functions inherited from gem5::o3::LSQ::LSQRequest
void setState (const State &newState)
 
void markDelayed () override
 Signal that the translation has been delayed due to a hw page table walk. More...
 
bool isDelayed ()
 
LSQUnitlsqUnit ()
 
 LSQRequest (LSQUnit *port, const DynInstPtr &inst, bool isLoad)
 
 LSQRequest (LSQUnit *port, const DynInstPtr &inst, bool isLoad, const Addr &addr, const uint32_t &size, const Request::Flags &flags_, PacketDataPtr data=nullptr, uint64_t *res=nullptr, AtomicOpFunctorPtr amo_op=nullptr)
 
bool isLoad () const
 
bool isAtomic () const
 
void install ()
 Install the request in the LQ/SQ. More...
 
bool squashed () const override
 This function is used by the page table walker to determine if it should translate the a pending request or if the underlying request has been squashed. More...
 
bool isReleased ()
 Test if the LSQRequest has been released, i.e. More...
 
void release (Flag reason)
 Release the LSQRequest. More...
 
void addRequest (Addr addr, unsigned size, const std::vector< bool > &byte_enable)
 Helper function used to add a (sub)request, given its address addr, size size and byte-enable mask byteEnable. More...
 
virtual ~LSQRequest ()
 Destructor. More...
 

Protected Attributes

const Addr _addr
 
std::vector< Fault_fault
 
const Request::Flags _flags
 
const uint32_t _size
 
std::vector< bool > _byteEnable
 
std::vector< RequestPtr_requests
 
const DynInstPtr _inst
 
std::vector< PacketPtr_packets
 
LSQUnit_port
 
uint64_t * _res
 
uint32_t _taskId
 
LSQSenderState_senderState
 
State _state
 
FlagsType flags
 
uint32_t numInTranslationFragments
 
uint32_t numTranslatedFragments
 
uint32_t _numOutstandingPackets
 
AtomicOpFunctorPtr _amo_op
 
- Protected Attributes inherited from gem5::o3::LSQ::LSQRequest
FlagsType flags
 
State _state
 
LSQSenderState_senderState
 
uint32_t numTranslatedFragments
 
uint32_t numInTranslationFragments
 
uint32_t _entryIdx
 LQ/SQ entry idx. More...
 

Additional Inherited Members

- Public Attributes inherited from gem5::o3::LSQ::LSQRequest
LSQUnit_port
 
const DynInstPtr _inst
 
uint32_t _taskId
 
PacketDataPtr _data
 
std::vector< PacketPtr_packets
 
std::vector< RequestPtr_requests
 
std::vector< Fault_fault
 
uint64_t * _res
 
const Addr _addr
 
const uint32_t _size
 
const Request::Flags _flags
 
std::vector< bool > _byteEnable
 
uint32_t _numOutstandingPackets
 
AtomicOpFunctorPtr _amo_op
 

Detailed Description

Definition at line 629 of file lsq.hh.

Member Typedef Documentation

◆ Flag

Definition at line 634 of file lsq.hh.

◆ State

Definition at line 635 of file lsq.hh.

Constructor & Destructor Documentation

◆ SingleDataRequest()

gem5::o3::LSQ::SingleDataRequest::SingleDataRequest ( LSQUnit port,
const DynInstPtr inst,
bool  isLoad,
const Addr addr,
const uint32_t &  size,
const Request::Flags flags_,
PacketDataPtr  data = nullptr,
uint64_t *  res = nullptr,
AtomicOpFunctorPtr  amo_op = nullptr 
)
inline

Definition at line 661 of file lsq.hh.

◆ ~SingleDataRequest()

virtual gem5::o3::LSQ::SingleDataRequest::~SingleDataRequest ( )
inlinevirtual

Definition at line 668 of file lsq.hh.

Member Function Documentation

◆ buildPackets()

void gem5::o3::LSQ::SingleDataRequest::buildPackets ( )
virtual

Implements gem5::o3::LSQ::LSQRequest.

Definition at line 1163 of file lsq.cc.

References gem5::Packet::createRead(), gem5::Packet::createWrite(), and DPRINTF.

◆ finish()

void gem5::o3::LSQ::SingleDataRequest::finish ( const Fault fault,
const RequestPtr req,
gem5::ThreadContext tc,
BaseMMU::Mode  mode 
)
virtual

◆ handleLocalAccess()

Cycles gem5::o3::LSQ::SingleDataRequest::handleLocalAccess ( gem5::ThreadContext thread,
PacketPtr  pkt 
)
virtual

Memory mapped IPR accesses.

Implements gem5::o3::LSQ::LSQRequest.

Definition at line 1280 of file lsq.cc.

References gem5::Packet::req, and gem5::o3::LSQ::thread.

◆ initiateTranslation()

void gem5::o3::LSQ::SingleDataRequest::initiateTranslation ( )
virtual

Implements gem5::o3::LSQ::LSQRequest.

Reimplemented in gem5::o3::LSQ::HtmCmdRequest.

Definition at line 941 of file lsq.cc.

◆ isCacheBlockHit()

bool gem5::o3::LSQ::SingleDataRequest::isCacheBlockHit ( Addr  blockAddr,
Addr  cacheBlockMask 
)
virtual

Test if the request accesses a particular cache line.

Implements gem5::o3::LSQ::LSQRequest.

Definition at line 1307 of file lsq.cc.

References gem5::o3::LSQ::LSQRequest::_requests.

◆ isLoad()

bool gem5::o3::LSQ::LSQRequest::isLoad
inlineprotected

Definition at line 311 of file lsq.hh.

◆ isTranslationComplete()

bool gem5::o3::LSQ::LSQRequest::isTranslationComplete
inlineprotected

Definition at line 526 of file lsq.hh.

◆ lsqUnit()

LSQUnit* gem5::o3::LSQ::LSQRequest::lsqUnit
inlineprotected

Definition at line 303 of file lsq.hh.

◆ name()

virtual std::string gem5::o3::LSQ::SingleDataRequest::name ( ) const
inlinevirtual

Reimplemented from gem5::o3::LSQ::LSQRequest.

Reimplemented in gem5::o3::LSQ::HtmCmdRequest.

Definition at line 678 of file lsq.hh.

◆ recvTimingResp()

bool gem5::o3::LSQ::SingleDataRequest::recvTimingResp ( PacketPtr  pkt)
virtual

◆ request() [1/2]

RequestPtr gem5::o3::LSQ::LSQRequest::request
inlineprotected

Definition at line 408 of file lsq.hh.

◆ request() [2/2]

const RequestPtr gem5::o3::LSQ::LSQRequest::request
inlineprotected

Definition at line 411 of file lsq.hh.

◆ sendFragmentToTranslation()

void gem5::o3::LSQ::LSQRequest::sendFragmentToTranslation
protected

Definition at line 1116 of file lsq.cc.

◆ sendPacketToCache()

void gem5::o3::LSQ::SingleDataRequest::sendPacketToCache ( )
virtual

Implements gem5::o3::LSQ::LSQRequest.

Definition at line 1261 of file lsq.cc.

◆ setState()

void gem5::o3::LSQ::LSQRequest::setState
inlineprotected

Definition at line 276 of file lsq.hh.

Member Data Documentation

◆ _addr

const Addr gem5::o3::LSQ::LSQRequest::_addr
protected

Definition at line 296 of file lsq.hh.

◆ _amo_op

AtomicOpFunctorPtr gem5::o3::LSQ::LSQRequest::_amo_op
protected

Definition at line 301 of file lsq.hh.

◆ _byteEnable

std::vector<bool> gem5::o3::LSQ::LSQRequest::_byteEnable
protected

Definition at line 299 of file lsq.hh.

◆ _fault

std::vector<Fault> gem5::o3::LSQ::LSQRequest::_fault
protected

Definition at line 294 of file lsq.hh.

◆ _flags

const Request::Flags gem5::o3::LSQ::LSQRequest::_flags
protected

Definition at line 298 of file lsq.hh.

◆ _inst

const DynInstPtr gem5::o3::LSQ::LSQRequest::_inst
protected

Definition at line 289 of file lsq.hh.

◆ _numOutstandingPackets

uint32_t gem5::o3::LSQ::LSQRequest::_numOutstandingPackets
protected

Definition at line 300 of file lsq.hh.

◆ _packets

std::vector<PacketPtr> gem5::o3::LSQ::LSQRequest::_packets
protected

Definition at line 292 of file lsq.hh.

◆ _port

LSQUnit& gem5::o3::LSQ::LSQRequest::_port
protected

Definition at line 288 of file lsq.hh.

◆ _requests

std::vector<RequestPtr> gem5::o3::LSQ::LSQRequest::_requests
protected

Definition at line 293 of file lsq.hh.

◆ _res

uint64_t* gem5::o3::LSQ::LSQRequest::_res
protected

Definition at line 295 of file lsq.hh.

◆ _senderState

LSQSenderState* gem5::o3::LSQ::LSQRequest::_senderState
protected

Definition at line 275 of file lsq.hh.

◆ _size

const uint32_t gem5::o3::LSQ::LSQRequest::_size
protected

Definition at line 297 of file lsq.hh.

◆ _state

State gem5::o3::LSQ::LSQRequest::_state
protected

Definition at line 274 of file lsq.hh.

◆ _taskId

uint32_t gem5::o3::LSQ::LSQRequest::_taskId
protected

Definition at line 290 of file lsq.hh.

◆ flags

FlagsType gem5::o3::LSQ::LSQRequest::flags
protected

Definition at line 264 of file lsq.hh.

◆ numInTranslationFragments

uint32_t gem5::o3::LSQ::LSQRequest::numInTranslationFragments
protected

Definition at line 279 of file lsq.hh.

◆ numTranslatedFragments

uint32_t gem5::o3::LSQ::LSQRequest::numTranslatedFragments
protected

Definition at line 278 of file lsq.hh.


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

Generated on Tue Sep 21 2021 12:31:46 for gem5 by doxygen 1.8.17