base.hh (11191:9eabb2bf349b) | base.hh (11197:f8fdd931e674) |
---|---|
1/* 2 * Copyright (c) 2012-2013, 2015 ARM Limited 3 * All rights reserved. 4 * 5 * The license below extends only to copyright in the software and shall 6 * not be construed as granting a license to any other intellectual 7 * property including but not limited to intellectual property relating 8 * to a hardware implementation of the functionality of the software --- 196 unchanged lines hidden (view full) --- 205 PacketPtr pkt, Tick time, 206 bool sched_send) 207 { 208 // check that the address is block aligned since we rely on 209 // this in a number of places when checking for matches and 210 // overlap 211 assert(addr == blockAlign(addr)); 212 | 1/* 2 * Copyright (c) 2012-2013, 2015 ARM Limited 3 * All rights reserved. 4 * 5 * The license below extends only to copyright in the software and shall 6 * not be construed as granting a license to any other intellectual 7 * property including but not limited to intellectual property relating 8 * to a hardware implementation of the functionality of the software --- 196 unchanged lines hidden (view full) --- 205 PacketPtr pkt, Tick time, 206 bool sched_send) 207 { 208 // check that the address is block aligned since we rely on 209 // this in a number of places when checking for matches and 210 // overlap 211 assert(addr == blockAlign(addr)); 212 |
213 MSHR *mshr = mq->allocate(addr, size, pkt, time, order++); | 213 MSHR *mshr = mq->allocate(addr, size, pkt, time, order++, 214 allocOnFill(pkt->cmd)); |
214 215 if (mq->isFull()) { 216 setBlocked((BlockedCause)mq->index); 217 } 218 219 if (sched_send) 220 // schedule the send 221 schedMemSideSendEvent(time); --- 7 unchanged lines hidden (view full) --- 229 bool wasFull = mq->isFull(); 230 mq->markInService(mshr, pending_dirty_resp); 231 if (wasFull && !mq->isFull()) { 232 clearBlocked((BlockedCause)mq->index); 233 } 234 } 235 236 /** | 215 216 if (mq->isFull()) { 217 setBlocked((BlockedCause)mq->index); 218 } 219 220 if (sched_send) 221 // schedule the send 222 schedMemSideSendEvent(time); --- 7 unchanged lines hidden (view full) --- 230 bool wasFull = mq->isFull(); 231 mq->markInService(mshr, pending_dirty_resp); 232 if (wasFull && !mq->isFull()) { 233 clearBlocked((BlockedCause)mq->index); 234 } 235 } 236 237 /** |
238 * Determine if we should allocate on a fill or not. 239 * 240 * @param cmd Packet command being added as an MSHR target 241 * 242 * @return Whether we should allocate on a fill or not 243 */ 244 virtual bool allocOnFill(MemCmd cmd) const = 0; 245 246 /** |
|
237 * Write back dirty blocks in the cache using functional accesses. 238 */ 239 virtual void memWriteback() = 0; 240 /** 241 * Invalidates all blocks in the cache. 242 * 243 * @warn Dirty cache lines will not be written back to 244 * memory. Make sure to call functionalWriteback() first if you --- 358 unchanged lines hidden --- | 247 * Write back dirty blocks in the cache using functional accesses. 248 */ 249 virtual void memWriteback() = 0; 250 /** 251 * Invalidates all blocks in the cache. 252 * 253 * @warn Dirty cache lines will not be written back to 254 * memory. Make sure to call functionalWriteback() first if you --- 358 unchanged lines hidden --- |