52 #ifndef __MEM_REQUEST_HH__
53 #define __MEM_REQUEST_HH__
72 namespace ContextSwitchTaskId {
92 typedef ::Flags<FlagsType>
Flags;
403 setPhys(paddr, size, flags, mid, time);
414 setPhys(paddr, size, flags, mid, time);
426 setVirt(asid, vaddr, size, flags, mid, pc);
434 setVirt(asid, vaddr, size, flags, mid, pc);
505 req2->
_vaddr = split_addr;
874 #endif // __MEM_REQUEST_HH__
This master id is used for functional requests that don't come from a particular device.
ContextID _contextId
The context ID (for statistics, locks, and wakeups).
bool isUncacheable() const
Accessor functions for flags.
::Flags< PrivateFlagsType > PrivateFlags
Architecture specific flags.
void setMemSpaceConfigFlags(MemSpaceConfigFlags extraFlags)
This request is made in privileged mode.
PrivateFlags privateFlags
Private flags for field validity checking.
The request is an atomic that returns data.
int depth
Level of the cache hierachy where this request was responded to (e.g.
ContextID contextId() const
Accessor function for context ID.
bool isAtomicReturn() const
Tick _time
The time this request was started.
Flags _flags
Flag structure for the request.
uint64_t _extraData
Extra data for the request, such as the return value of store conditional or the compare value for a ...
unsigned _size
The size of the request.
Whether or not the pc is valid.
int _asid
The address space ID.
void setAsid(int asid)
Accessor function for asid.
bool isStrictlyOrdered() const
void setExtraData(uint64_t extraData)
Accessor function for store conditional return value.
::Flags< FlagsType > Flags
bool hasAtomicOpFunctor()
Accessor for atomic-op functor.
bool hasVaddr() const
Accessor function for vaddr.
InstSeqNum _reqInstSeqNum
Sequence number of the instruction that creates the request.
bool hasSize() const
Accessor for size.
uint64_t getExtraData() const
Accessor function for store conditional return value.
bool isPrivateSegment() const
This request will lock or unlock the accessed memory.
MasterID _masterId
The requestor ID which is unique in the system for all ports that are capable of issuing a transactio...
bool isMmappedIpr() const
This request is for a memory swap.
Access has Device (e.g., GPU) scope visibility.
Whether or not the vaddr & asid are valid.
The request should be marked with ACQUIRE.
void setContext(ContextID context_id)
Set up Context numbers.
This is a write that is targeted and zeroing an entire cache block.
These flags are not cleared when a Request object is reused (assigned a new address).
Addr getPC() const
Accessor function for pc.
AtomicOpFunctor * atomicOpFunctor
A pointer to an atomic operation.
This master id is used for writeback requests by the caches.
bool isDeviceScope() const
Addr _paddr
The physical address of the request.
bool isSpillSegment() const
void setAccessLatency()
Set/Get the time taken to complete this request's access, not including the time to successfully tran...
uint32_t _taskId
The task id associated with this request.
The virtual address is also the physical address.
Access has Workgroup scope visibility.
bool hasContextId() const
int getAccessDepth() const
The request should be prefetched into the exclusive state.
Request(Addr paddr, unsigned size, Flags flags, MasterID mid, Tick time, Addr pc)
::Flags< MemSpaceConfigFlagsType > MemSpaceConfigFlags
Tick curTick()
The current simulated tick.
bool isWorkgroupScope() const
AtomicOpFunctor * getAtomicOpFunctor()
Addr _vaddr
The virtual address of the request.
Request(Addr paddr, unsigned size, Flags flags, MasterID mid)
Constructor for physical (e.g.
The request is a page table walk.
Tick accessDelta
Access latency to complete this memory transaction not including translation time.
Request()
Minimal constructor.
uint64_t Tick
Tick count type.
bool isKernargSegment() const
Whether or not the context ID is valid.
The request is to an uncacheable address.
The request should be marked as LRU.
Whether or not paddr is valid (has been written yet).
bool isArgSegment() const
void splitOnVaddr(Addr split_addr, RequestPtr &req1, RequestPtr &req2)
Generate two requests as if this request had been split into two pieces.
The request is an atomic that does not return data.
int getAsid() const
Accessor function for asid.
Has a synchronization scope been set?
Whether or not the size is valid.
void setPhys(Addr paddr, unsigned size, Flags flags, MasterID mid, Tick time)
Set up a physical (e.g.
bool isWavefrontScope() const
Request(int asid, Addr vaddr, unsigned size, Flags flags, MasterID mid, Addr pc, ContextID cid)
void setReqInstSeqNum(const InstSeqNum seq_num)
Defines global host-dependent types: Counter, Tick, and (indirectly) {int,uint}{8,16,32,64}_t.
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
bool extraDataValid() const
Accessor function to check if sc result is valid.
InstSeqNum getReqInstSeqNum() const
ArchFlagsType getArchFlags() const
Accessor function for architecture-specific flags.
Flags getFlags()
Accessor for flags.
MasterID masterId() const
Accesssor for the requestor id.
bool isReadonlySegment() const
bool hasInstSeqNum() const
Accessor for the sequence number of instruction that creates the request.
Tick translateDelta
Time for the TLB/table walker to successfully translate this request.
Tick getTranslateLatency() const
The request should not cause a memory access.
The request should be marked with RELEASE.
The request was an instruction fetch.
bool isGroupSegment() const
Request(Addr paddr, unsigned size, Flags flags, MasterID mid, Tick time)
Tick time() const
Accessor for time.
bool isScoped() const
Accessor functions for the memory space configuration flags and used by GPU ISAs such as the Heteroge...
Addr _pc
program counter of initiating access; for tracing/debugging
void setVirt(int asid, Addr vaddr, unsigned size, Flags flags, MasterID mid, Addr pc)
Set up a virtual (e.g., CPU) request in a previously allocated Request object.
Whether or not the sc result is valid.
The request is required to be strictly ordered by CPU models and is non-speculative.
Tick getAccessLatency() const
The request targets the secure memory space.
Access has System (e.g., CPU + GPU) scope visibility.
The request should be marked with KERNEL.
Request(int asid, Addr vaddr, unsigned size, Flags flags, MasterID mid, Addr pc, ContextID cid, AtomicOpFunctor *atomic_op)
Whether or not the instruction sequence number is valid.
bool isAtomicNoReturn() const
The request is a prefetch.
This request is to a memory mapped register.
The request should be handled by the generic IPR code (only valid together with MMAPPED_IPR) ...
The request is a Load locked/store conditional.
Access has Wavefront scope visibility.
void setPaddr(Addr paddr)
Set just the physical address.
void setFlags(Flags flags)
Note that unlike other accessors, this function sets specific flags (ORs them in); it does not assign...
MemSpaceConfigFlags _memSpaceConfigFlags
Memory space configuraiton flag structure for the request.
These flags are not cleared when a Request object is reused (assigned a new address).
void incAccessDepth() const
Increment/Get the depth at which this request is responded to.
bool isGlobalSegment() const
int ContextID
Globally unique thread context ID.
Request(Addr paddr, unsigned size, Flags flags, MasterID mid, InstSeqNum seq_num, ContextID cid)
bool isSystemScope() const
uint32_t MemSpaceConfigFlagsType
bool hasPaddr() const
Accessor for paddr.
Invalid master id for assertion checking only.
void setTranslateLatency()
Set/Get the time taken for this request to be successfully translated.
This master id is used for message signaled interrupts.