Go to the documentation of this file.
46 #ifndef __MEM_CACHE_CACHE_HH__
47 #define __MEM_CACHE_CACHE_HH__
50 #include <unordered_set>
88 Tick request_time)
override;
92 Tick request_time)
override;
115 bool deferred_response =
false,
116 bool pending_downgrade =
false)
override;
119 bool already_copied,
bool pending_inval);
134 bool is_timing,
bool is_deferred,
bool pending_inval);
148 bool is_whole_line_write)
const override;
171 #endif // __MEM_CACHE_CACHE_HH__
std::unordered_set< RequestPtr > outstandingSnoop
Store the outstanding requests that we are expecting snoop responses from so we can determine which s...
void doWritebacksAtomic(PacketList &writebacks) override
Send writebacks down the memory hierarchy in atomic mode.
M5_NODISCARD PacketPtr evictBlock(CacheBlk *blk) override
Evict a cache block.
void recvTimingSnoopReq(PacketPtr pkt) override
Snoops bus transactions to maintain coherence.
uint64_t Tick
Tick count type.
Tick recvAtomic(PacketPtr pkt) override
Performs the access specified by the request.
void handleTimingReqHit(PacketPtr pkt, CacheBlk *blk, Tick request_time) override
bool isCachedAbove(PacketPtr pkt, bool is_timing=true)
Send up a snoop request and find cached copies.
Tick recvAtomicSnoop(PacketPtr pkt) override
Snoop for the provided request in the cache and return the estimated time taken.
void recvTimingSnoopResp(PacketPtr pkt) override
Handle a snoop response.
void recvTimingReq(PacketPtr pkt) override
Performs the access specified by the request.
void handleTimingReqMiss(PacketPtr pkt, CacheBlk *blk, Tick forward_time, Tick request_time) override
PacketPtr cleanEvictBlk(CacheBlk *blk)
Create a CleanEvict request for the given block.
bool access(PacketPtr pkt, CacheBlk *&blk, Cycles &lat, PacketList &writebacks) override
Does all the processing necessary to perform the provided request.
void satisfyRequest(PacketPtr pkt, CacheBlk *blk, bool deferred_response=false, bool pending_downgrade=false) override
Perform any necessary updates to the block and perform any data exchange between the packet and the b...
bool sendMSHRQueuePacket(MSHR *mshr) override
Take an MSHR, turn it into a suitable downstream packet, and send it out.
void promoteWholeLineWrites(PacketPtr pkt)
Turn line-sized writes into WriteInvalidate transactions.
Cycles handleAtomicReqMiss(PacketPtr pkt, CacheBlk *&blk, PacketList &writebacks) override
Handle a request in atomic mode that missed in this cache.
uint32_t handleSnoop(PacketPtr pkt, CacheBlk *blk, bool is_timing, bool is_deferred, bool pending_inval)
Perform an upward snoop if needed, and update the block state (possibly invalidating the block).
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
Cycles is a wrapper class for representing cycle counts, i.e.
const bool doFastWrites
This cache should allocate a block on a line-sized write miss.
PacketPtr createMissPacket(PacketPtr cpu_pkt, CacheBlk *blk, bool needs_writable, bool is_whole_line_write) const override
Create an appropriate downstream bus request packet.
void doWritebacks(PacketList &writebacks, Tick forward_time) override
Insert writebacks into the write buffer.
A coherent cache that can be arranged in flexible topologies.
Cache(const CacheParams *p)
Instantiates a basic cache object.
void doTimingSupplyResponse(PacketPtr req_pkt, const uint8_t *blk_data, bool already_copied, bool pending_inval)
void serviceMSHRTargets(MSHR *mshr, const PacketPtr pkt, CacheBlk *blk) override
Service non-deferred MSHR targets using the received response.
Miss Status and handling Register.
Generated on Wed Sep 30 2020 14:02:12 for gem5 by doxygen 1.8.17