gem5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
request.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2012-2013 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
9  * licensed hereunder. You may use the software subject to the license
10  * terms below provided that you ensure that this notice is replicated
11  * unmodified and in its entirety in all distributions of the software,
12  * modified or unmodified, in source code or in binary form.
13  *
14  * Copyright (c) 2002-2005 The Regents of The University of Michigan
15  * Copyright (c) 2010,2015 Advanced Micro Devices, Inc.
16  * All rights reserved.
17  *
18  * Redistribution and use in source and binary forms, with or without
19  * modification, are permitted provided that the following conditions are
20  * met: redistributions of source code must retain the above copyright
21  * notice, this list of conditions and the following disclaimer;
22  * redistributions in binary form must reproduce the above copyright
23  * notice, this list of conditions and the following disclaimer in the
24  * documentation and/or other materials provided with the distribution;
25  * neither the name of the copyright holders nor the names of its
26  * contributors may be used to endorse or promote products derived from
27  * this software without specific prior written permission.
28  *
29  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
30  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
31  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
32  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
33  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
34  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
35  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
36  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
37  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
38  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
39  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
40  *
41  * Authors: Ron Dreslinski
42  * Steve Reinhardt
43  * Ali Saidi
44  */
45 
52 #ifndef __MEM_REQUEST_HH__
53 #define __MEM_REQUEST_HH__
54 
55 #include <cassert>
56 #include <climits>
57 
58 #include "base/flags.hh"
59 #include "base/misc.hh"
60 #include "base/types.hh"
61 #include "cpu/inst_seq.hh"
62 #include "sim/core.hh"
63 
72 namespace ContextSwitchTaskId {
73  enum TaskId {
74  MaxNormalTaskId = 1021, /* Maximum number of normal tasks */
75  Prefetcher = 1022, /* For cache lines brought in by prefetcher */
76  DMA = 1023, /* Mostly Table Walker */
77  Unknown = 1024,
79  };
80 }
81 
82 class Request;
83 
84 typedef Request* RequestPtr;
85 typedef uint16_t MasterID;
86 
87 class Request
88 {
89  public:
90  typedef uint32_t FlagsType;
91  typedef uint8_t ArchFlagsType;
92  typedef ::Flags<FlagsType> Flags;
93 
94  enum : FlagsType {
102  ARCH_BITS = 0x000000FF,
104  INST_FETCH = 0x00000100,
106  PHYSICAL = 0x00000200,
114  UNCACHEABLE = 0x00000400,
124  STRICT_ORDER = 0x00000800,
126  MMAPPED_IPR = 0x00002000,
128  PRIVILEGED = 0x00008000,
129 
134  CACHE_BLOCK_ZERO = 0x00010000,
135 
137  NO_ACCESS = 0x00080000,
145  LOCKED_RMW = 0x00100000,
147  LLSC = 0x00200000,
149  MEM_SWAP = 0x00400000,
150  MEM_SWAP_COND = 0x00800000,
151 
153  PREFETCH = 0x01000000,
155  PF_EXCLUSIVE = 0x02000000,
157  EVICT_NEXT = 0x04000000,
159  ACQUIRE = 0x00020000,
161  RELEASE = 0x00040000,
162 
164  ATOMIC_RETURN_OP = 0x40000000,
166  ATOMIC_NO_RETURN_OP = 0x80000000,
167 
172  KERNEL = 0x00001000,
173 
178  GENERIC_IPR = 0x08000000,
179 
181  SECURE = 0x10000000,
183  PT_WALK = 0x20000000,
184 
190  };
191 
194  enum : MasterID {
208  invldMasterId = std::numeric_limits<MasterID>::max()
209  };
212  typedef uint32_t MemSpaceConfigFlagsType;
213  typedef ::Flags<MemSpaceConfigFlagsType> MemSpaceConfigFlags;
214 
215  enum : MemSpaceConfigFlagsType {
217  SCOPE_VALID = 0x00000001,
219  WAVEFRONT_SCOPE = 0x00000002,
221  WORKGROUP_SCOPE = 0x00000004,
223  DEVICE_SCOPE = 0x00000008,
225  SYSTEM_SCOPE = 0x00000010,
226 
228  GLOBAL_SEGMENT = 0x00000020,
230  GROUP_SEGMENT = 0x00000040,
232  PRIVATE_SEGMENT = 0x00000080,
234  KERNARG_SEGMENT = 0x00000100,
236  READONLY_SEGMENT = 0x00000200,
238  SPILL_SEGMENT = 0x00000400,
240  ARG_SEGMENT = 0x00000800,
241  };
242 
243  private:
244  typedef uint8_t PrivateFlagsType;
245  typedef ::Flags<PrivateFlagsType> PrivateFlags;
246 
247  enum : PrivateFlagsType {
249  VALID_SIZE = 0x00000001,
251  VALID_PADDR = 0x00000002,
253  VALID_VADDR = 0x00000004,
255  VALID_INST_SEQ_NUM = 0x00000008,
257  VALID_PC = 0x00000010,
259  VALID_CONTEXT_ID = 0x00000020,
261  VALID_EXTRA_DATA = 0x00000080,
267  };
268 
269  private:
270 
275  void
276  setPhys(Addr paddr, unsigned size, Flags flags, MasterID mid, Tick time)
277  {
278  _paddr = paddr;
279  _size = size;
280  _time = time;
281  _masterId = mid;
283  _flags.set(flags);
286  depth = 0;
287  accessDelta = 0;
288  //translateDelta = 0;
289  }
290 
296 
302  unsigned _size;
303 
308 
311 
314 
317 
324 
328  uint32_t _taskId;
329 
331  int _asid;
332 
335 
339  uint64_t _extraData;
340 
343 
346 
349 
352 
353  public:
354 
361  : _paddr(0), _size(0), _masterId(invldMasterId), _time(0),
362  _taskId(ContextSwitchTaskId::Unknown), _asid(0), _vaddr(0),
363  _extraData(0), _contextId(0), _pc(0),
365  accessDelta(0), depth(0)
366  {}
367 
368  Request(Addr paddr, unsigned size, Flags flags, MasterID mid,
369  InstSeqNum seq_num, ContextID cid)
370  : _paddr(0), _size(0), _masterId(invldMasterId), _time(0),
371  _taskId(ContextSwitchTaskId::Unknown), _asid(0), _vaddr(0),
372  _extraData(0), _contextId(0), _pc(0),
373  _reqInstSeqNum(seq_num), atomicOpFunctor(nullptr), translateDelta(0),
374  accessDelta(0), depth(0)
375  {
376  setPhys(paddr, size, flags, mid, curTick());
377  setContext(cid);
379  }
380 
386  Request(Addr paddr, unsigned size, Flags flags, MasterID mid)
387  : _paddr(0), _size(0), _masterId(invldMasterId), _time(0),
388  _taskId(ContextSwitchTaskId::Unknown), _asid(0), _vaddr(0),
389  _extraData(0), _contextId(0), _pc(0),
391  accessDelta(0), depth(0)
392  {
393  setPhys(paddr, size, flags, mid, curTick());
394  }
395 
396  Request(Addr paddr, unsigned size, Flags flags, MasterID mid, Tick time)
397  : _paddr(0), _size(0), _masterId(invldMasterId), _time(0),
398  _taskId(ContextSwitchTaskId::Unknown), _asid(0), _vaddr(0),
399  _extraData(0), _contextId(0), _pc(0),
401  accessDelta(0), depth(0)
402  {
403  setPhys(paddr, size, flags, mid, time);
404  }
405 
406  Request(Addr paddr, unsigned size, Flags flags, MasterID mid, Tick time,
407  Addr pc)
408  : _paddr(0), _size(0), _masterId(invldMasterId), _time(0),
409  _taskId(ContextSwitchTaskId::Unknown), _asid(0), _vaddr(0),
410  _extraData(0), _contextId(0), _pc(pc),
412  accessDelta(0), depth(0)
413  {
414  setPhys(paddr, size, flags, mid, time);
415  privateFlags.set(VALID_PC);
416  }
417 
418  Request(int asid, Addr vaddr, unsigned size, Flags flags, MasterID mid,
419  Addr pc, ContextID cid)
420  : _paddr(0), _size(0), _masterId(invldMasterId), _time(0),
421  _taskId(ContextSwitchTaskId::Unknown), _asid(0), _vaddr(0),
422  _extraData(0), _contextId(0), _pc(0),
424  accessDelta(0), depth(0)
425  {
426  setVirt(asid, vaddr, size, flags, mid, pc);
427  setContext(cid);
428  }
429 
430  Request(int asid, Addr vaddr, unsigned size, Flags flags, MasterID mid,
431  Addr pc, ContextID cid, AtomicOpFunctor *atomic_op)
432  : atomicOpFunctor(atomic_op)
433  {
434  setVirt(asid, vaddr, size, flags, mid, pc);
435  setContext(cid);
436  }
437 
439  {
440  if (hasAtomicOpFunctor()) {
441  delete atomicOpFunctor;
442  }
443  }
444 
448  void
449  setContext(ContextID context_id)
450  {
451  _contextId = context_id;
453  }
454 
459  void
460  setVirt(int asid, Addr vaddr, unsigned size, Flags flags, MasterID mid,
461  Addr pc)
462  {
463  _asid = asid;
464  _vaddr = vaddr;
465  _size = size;
466  _masterId = mid;
467  _pc = pc;
468  _time = curTick();
469 
471  _flags.set(flags);
474  depth = 0;
475  accessDelta = 0;
476  translateDelta = 0;
477  }
478 
486  void
487  setPaddr(Addr paddr)
488  {
489  _paddr = paddr;
491  }
492 
497  void splitOnVaddr(Addr split_addr, RequestPtr &req1, RequestPtr &req2)
498  {
499  assert(privateFlags.isSet(VALID_VADDR));
500  assert(privateFlags.noneSet(VALID_PADDR));
501  assert(split_addr > _vaddr && split_addr < _vaddr + _size);
502  req1 = new Request(*this);
503  req2 = new Request(*this);
504  req1->_size = split_addr - _vaddr;
505  req2->_vaddr = split_addr;
506  req2->_size = _size - req1->_size;
507  }
508 
512  bool
513  hasPaddr() const
514  {
515  return privateFlags.isSet(VALID_PADDR);
516  }
517 
518  Addr
519  getPaddr() const
520  {
521  assert(privateFlags.isSet(VALID_PADDR));
522  return _paddr;
523  }
524 
529 
535 
540  mutable int depth;
541 
545  bool
546  hasSize() const
547  {
548  return privateFlags.isSet(VALID_SIZE);
549  }
550 
551  unsigned
552  getSize() const
553  {
554  assert(privateFlags.isSet(VALID_SIZE));
555  return _size;
556  }
557 
559  Tick
560  time() const
561  {
562  assert(privateFlags.isSet(VALID_PADDR|VALID_VADDR));
563  return _time;
564  }
565 
569  bool
571  {
572  return atomicOpFunctor != NULL;
573  }
574 
577  {
578  assert(atomicOpFunctor != NULL);
579  return atomicOpFunctor;
580  }
581 
583  Flags
585  {
586  assert(privateFlags.isSet(VALID_PADDR|VALID_VADDR));
587  return _flags;
588  }
589 
594  void
596  {
597  assert(privateFlags.isSet(VALID_PADDR|VALID_VADDR));
598  _flags.set(flags);
599  }
600 
601  void
603  {
604  assert(privateFlags.isSet(VALID_PADDR | VALID_VADDR));
605  _memSpaceConfigFlags.set(extraFlags);
606  }
607 
609  bool
610  hasVaddr() const
611  {
612  return privateFlags.isSet(VALID_VADDR);
613  }
614 
615  Addr
616  getVaddr() const
617  {
618  assert(privateFlags.isSet(VALID_VADDR));
619  return _vaddr;
620  }
621 
623  MasterID
624  masterId() const
625  {
626  return _masterId;
627  }
628 
629  uint32_t
630  taskId() const
631  {
632  return _taskId;
633  }
634 
635  void
636  taskId(uint32_t id) {
637  _taskId = id;
638  }
639 
641  int
642  getAsid() const
643  {
644  assert(privateFlags.isSet(VALID_VADDR));
645  return _asid;
646  }
647 
649  void
651  {
652  _asid = asid;
653  }
654 
657  getArchFlags() const
658  {
659  assert(privateFlags.isSet(VALID_PADDR|VALID_VADDR));
660  return _flags & ARCH_BITS;
661  }
662 
664  bool
666  {
667  return privateFlags.isSet(VALID_EXTRA_DATA);
668  }
669 
671  uint64_t
672  getExtraData() const
673  {
674  assert(privateFlags.isSet(VALID_EXTRA_DATA));
675  return _extraData;
676  }
677 
679  void
680  setExtraData(uint64_t extraData)
681  {
682  _extraData = extraData;
684  }
685 
686  bool
687  hasContextId() const
688  {
689  return privateFlags.isSet(VALID_CONTEXT_ID);
690  }
691 
693  ContextID
694  contextId() const
695  {
696  assert(privateFlags.isSet(VALID_CONTEXT_ID));
697  return _contextId;
698  }
699 
700  void
702  {
703  privateFlags.set(VALID_PC);
704  _pc = pc;
705  }
706 
707  bool
708  hasPC() const
709  {
710  return privateFlags.isSet(VALID_PC);
711  }
712 
714  Addr
715  getPC() const
716  {
717  assert(privateFlags.isSet(VALID_PC));
718  return _pc;
719  }
720 
725  void incAccessDepth() const { depth++; }
726  int getAccessDepth() const { return depth; }
727 
733 
739  Tick getAccessLatency() const { return accessDelta; }
740 
745  bool
747  {
748  return privateFlags.isSet(VALID_INST_SEQ_NUM);
749  }
750 
751  InstSeqNum
753  {
754  assert(privateFlags.isSet(VALID_INST_SEQ_NUM));
755  return _reqInstSeqNum;
756  }
757 
758  void
760  {
762  _reqInstSeqNum = seq_num;
763  }
764 
767  bool isUncacheable() const { return _flags.isSet(UNCACHEABLE); }
768  bool isStrictlyOrdered() const { return _flags.isSet(STRICT_ORDER); }
769  bool isInstFetch() const { return _flags.isSet(INST_FETCH); }
770  bool isPrefetch() const { return _flags.isSet(PREFETCH); }
771  bool isLLSC() const { return _flags.isSet(LLSC); }
772  bool isPriv() const { return _flags.isSet(PRIVILEGED); }
773  bool isLockedRMW() const { return _flags.isSet(LOCKED_RMW); }
774  bool isSwap() const { return _flags.isSet(MEM_SWAP|MEM_SWAP_COND); }
775  bool isCondSwap() const { return _flags.isSet(MEM_SWAP_COND); }
776  bool isMmappedIpr() const { return _flags.isSet(MMAPPED_IPR); }
777  bool isSecure() const { return _flags.isSet(SECURE); }
778  bool isPTWalk() const { return _flags.isSet(PT_WALK); }
779  bool isAcquire() const { return _flags.isSet(ACQUIRE); }
780  bool isRelease() const { return _flags.isSet(RELEASE); }
781  bool isKernel() const { return _flags.isSet(KERNEL); }
782  bool isAtomicReturn() const { return _flags.isSet(ATOMIC_RETURN_OP); }
784 
785  bool
786  isAtomic() const
787  {
788  return _flags.isSet(ATOMIC_RETURN_OP) ||
790  }
791 
798  bool isScoped() const { return _memSpaceConfigFlags.isSet(SCOPE_VALID); }
799 
800  bool
802  {
803  assert(isScoped());
805  }
806 
807  bool
809  {
810  assert(isScoped());
812  }
813 
814  bool
816  {
817  assert(isScoped());
818  return _memSpaceConfigFlags.isSet(DEVICE_SCOPE);
819  }
820 
821  bool
823  {
824  assert(isScoped());
825  return _memSpaceConfigFlags.isSet(SYSTEM_SCOPE);
826  }
827 
828  bool
830  {
831  return _memSpaceConfigFlags.isSet(GLOBAL_SEGMENT) ||
832  (!isGroupSegment() && !isPrivateSegment() &&
834  !isSpillSegment() && !isArgSegment());
835  }
836 
837  bool
839  {
840  return _memSpaceConfigFlags.isSet(GROUP_SEGMENT);
841  }
842 
843  bool
845  {
847  }
848 
849  bool
851  {
853  }
854 
855  bool
857  {
859  }
860 
861  bool
863  {
864  return _memSpaceConfigFlags.isSet(SPILL_SEGMENT);
865  }
866 
867  bool
868  isArgSegment() const
869  {
870  return _memSpaceConfigFlags.isSet(ARG_SEGMENT);
871  }
872 };
873 
874 #endif // __MEM_REQUEST_HH__
uint8_t PrivateFlagsType
Definition: request.hh:244
This master id is used for functional requests that don't come from a particular device.
Definition: request.hh:201
ContextID _contextId
The context ID (for statistics, locks, and wakeups).
Definition: request.hh:342
bool isUncacheable() const
Accessor functions for flags.
Definition: request.hh:767
void setPC(Addr pc)
Definition: request.hh:701
::Flags< PrivateFlagsType > PrivateFlags
Definition: request.hh:245
Architecture specific flags.
Definition: request.hh:102
void setMemSpaceConfigFlags(MemSpaceConfigFlags extraFlags)
Definition: request.hh:602
This request is made in privileged mode.
Definition: request.hh:128
PrivateFlags privateFlags
Private flags for field validity checking.
Definition: request.hh:316
The request is an atomic that returns data.
Definition: request.hh:164
int depth
Level of the cache hierachy where this request was responded to (e.g.
Definition: request.hh:540
ContextID contextId() const
Accessor function for context ID.
Definition: request.hh:694
bool isAtomicReturn() const
Definition: request.hh:782
Tick _time
The time this request was started.
Definition: request.hh:323
Flags _flags
Flag structure for the request.
Definition: request.hh:310
uint64_t _extraData
Extra data for the request, such as the return value of store conditional or the compare value for a ...
Definition: request.hh:339
unsigned _size
The size of the request.
Definition: request.hh:302
Whether or not the pc is valid.
Definition: request.hh:257
int _asid
The address space ID.
Definition: request.hh:331
uint32_t FlagsType
Definition: request.hh:90
void setAsid(int asid)
Accessor function for asid.
Definition: request.hh:650
bool isStrictlyOrdered() const
Definition: request.hh:768
void setExtraData(uint64_t extraData)
Accessor function for store conditional return value.
Definition: request.hh:680
::Flags< FlagsType > Flags
Definition: request.hh:92
bool hasAtomicOpFunctor()
Accessor for atomic-op functor.
Definition: request.hh:570
bool hasVaddr() const
Accessor function for vaddr.
Definition: request.hh:610
bool isLockedRMW() const
Definition: request.hh:773
InstSeqNum _reqInstSeqNum
Sequence number of the instruction that creates the request.
Definition: request.hh:348
void clear()
Definition: flags.hh:68
bool hasSize() const
Accessor for size.
Definition: request.hh:546
uint64_t getExtraData() const
Accessor function for store conditional return value.
Definition: request.hh:672
bool isPrivateSegment() const
Definition: request.hh:844
Spill Segment.
Definition: request.hh:238
This request will lock or unlock the accessed memory.
Definition: request.hh:145
MasterID _masterId
The requestor ID which is unique in the system for all ports that are capable of issuing a transactio...
Definition: request.hh:307
bool isMmappedIpr() const
Definition: request.hh:776
This request is for a memory swap.
Definition: request.hh:149
Access has Device (e.g., GPU) scope visibility.
Definition: request.hh:223
bool isSet() const
Definition: flags.hh:62
bool isAcquire() const
Definition: request.hh:779
Whether or not the vaddr & asid are valid.
Definition: request.hh:253
bool isPriv() const
Definition: request.hh:772
The request should be marked with ACQUIRE.
Definition: request.hh:159
void setContext(ContextID context_id)
Set up Context numbers.
Definition: request.hh:449
bool hasPC() const
Definition: request.hh:708
This is a write that is targeted and zeroing an entire cache block.
Definition: request.hh:134
These flags are not cleared when a Request object is reused (assigned a new address).
Definition: request.hh:189
Addr getPC() const
Accessor function for pc.
Definition: request.hh:715
AtomicOpFunctor * atomicOpFunctor
A pointer to an atomic operation.
Definition: request.hh:351
This master id is used for writeback requests by the caches.
Definition: request.hh:196
bool isPrefetch() const
Definition: request.hh:770
bool isDeviceScope() const
Definition: request.hh:815
Addr _paddr
The physical address of the request.
Definition: request.hh:295
bool isSpillSegment() const
Definition: request.hh:862
void setAccessLatency()
Set/Get the time taken to complete this request's access, not including the time to successfully tran...
Definition: request.hh:738
bool isRelease() const
Definition: request.hh:780
uint32_t _taskId
The task id associated with this request.
Definition: request.hh:328
bool isPTWalk() const
Definition: request.hh:778
bool isCondSwap() const
Definition: request.hh:775
The virtual address is also the physical address.
Definition: request.hh:106
Access has Workgroup scope visibility.
Definition: request.hh:221
bool hasContextId() const
Definition: request.hh:687
Global Segment.
Definition: request.hh:228
int getAccessDepth() const
Definition: request.hh:726
The request should be prefetched into the exclusive state.
Definition: request.hh:155
Request(Addr paddr, unsigned size, Flags flags, MasterID mid, Tick time, Addr pc)
Definition: request.hh:406
::Flags< MemSpaceConfigFlagsType > MemSpaceConfigFlags
Definition: request.hh:213
Tick curTick()
The current simulated tick.
Definition: core.hh:47
bool isWorkgroupScope() const
Definition: request.hh:808
AtomicOpFunctor * getAtomicOpFunctor()
Definition: request.hh:576
Addr _vaddr
The virtual address of the request.
Definition: request.hh:334
Request(Addr paddr, unsigned size, Flags flags, MasterID mid)
Constructor for physical (e.g.
Definition: request.hh:386
The request is a page table walk.
Definition: request.hh:183
bool isLLSC() const
Definition: request.hh:771
Private Segment.
Definition: request.hh:232
Tick accessDelta
Access latency to complete this memory transaction not including translation time.
Definition: request.hh:534
Request()
Minimal constructor.
Definition: request.hh:360
Definition: flags.hh:35
uint64_t Tick
Tick count type.
Definition: types.hh:63
bool isKernargSegment() const
Definition: request.hh:850
Whether or not the context ID is valid.
Definition: request.hh:259
Arg Segment.
Definition: request.hh:240
The request is to an uncacheable address.
Definition: request.hh:114
The request should be marked as LRU.
Definition: request.hh:157
Kergarg Segment.
Definition: request.hh:234
Whether or not paddr is valid (has been written yet).
Definition: request.hh:251
bool isArgSegment() const
Definition: request.hh:868
Addr getPaddr() const
Definition: request.hh:519
Readonly Segment.
Definition: request.hh:236
void splitOnVaddr(Addr split_addr, RequestPtr &req1, RequestPtr &req2)
Generate two requests as if this request had been split into two pieces.
Definition: request.hh:497
The request is an atomic that does not return data.
Definition: request.hh:166
int getAsid() const
Accessor function for asid.
Definition: request.hh:642
uint64_t InstSeqNum
Definition: inst_seq.hh:40
bool isInstFetch() const
Definition: request.hh:769
Has a synchronization scope been set?
Definition: request.hh:217
uint8_t ArchFlagsType
Definition: request.hh:91
Whether or not the size is valid.
Definition: request.hh:249
void setPhys(Addr paddr, unsigned size, Flags flags, MasterID mid, Tick time)
Set up a physical (e.g.
Definition: request.hh:276
bool isWavefrontScope() const
Definition: request.hh:801
Request(int asid, Addr vaddr, unsigned size, Flags flags, MasterID mid, Addr pc, ContextID cid)
Definition: request.hh:418
void setReqInstSeqNum(const InstSeqNum seq_num)
Definition: request.hh:759
bool isSwap() const
Definition: request.hh:774
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.
Definition: types.hh:142
uint16_t MasterID
Definition: request.hh:85
bool extraDataValid() const
Accessor function to check if sc result is valid.
Definition: request.hh:665
InstSeqNum getReqInstSeqNum() const
Definition: request.hh:752
ArchFlagsType getArchFlags() const
Accessor function for architecture-specific flags.
Definition: request.hh:657
Flags getFlags()
Accessor for flags.
Definition: request.hh:584
~Request()
Definition: request.hh:438
MasterID masterId() const
Accesssor for the requestor id.
Definition: request.hh:624
Request * RequestPtr
Definition: request.hh:82
bool isReadonlySegment() const
Definition: request.hh:856
bool isKernel() const
Definition: request.hh:781
int size()
Definition: pagetable.hh:146
bool hasInstSeqNum() const
Accessor for the sequence number of instruction that creates the request.
Definition: request.hh:746
Tick translateDelta
Time for the TLB/table walker to successfully translate this request.
Definition: request.hh:528
Tick getTranslateLatency() const
Definition: request.hh:732
The request should not cause a memory access.
Definition: request.hh:137
The request should be marked with RELEASE.
Definition: request.hh:161
The request was an instruction fetch.
Definition: request.hh:104
Addr getVaddr() const
Definition: request.hh:616
bool isGroupSegment() const
Definition: request.hh:838
Request(Addr paddr, unsigned size, Flags flags, MasterID mid, Tick time)
Definition: request.hh:396
Tick time() const
Accessor for time.
Definition: request.hh:560
bool isScoped() const
Accessor functions for the memory space configuration flags and used by GPU ISAs such as the Heteroge...
Definition: request.hh:798
Addr _pc
program counter of initiating access; for tracing/debugging
Definition: request.hh:345
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.
Definition: request.hh:460
Whether or not the sc result is valid.
Definition: request.hh:261
The request is required to be strictly ordered by CPU models and is non-speculative.
Definition: request.hh:124
bool isAtomic() const
Definition: request.hh:786
Tick getAccessLatency() const
Definition: request.hh:739
The request targets the secure memory space.
Definition: request.hh:181
IntReg pc
Definition: remote_gdb.hh:91
Access has System (e.g., CPU + GPU) scope visibility.
Definition: request.hh:225
The request should be marked with KERNEL.
Definition: request.hh:172
Request(int asid, Addr vaddr, unsigned size, Flags flags, MasterID mid, Addr pc, ContextID cid, AtomicOpFunctor *atomic_op)
Definition: request.hh:430
Whether or not the instruction sequence number is valid.
Definition: request.hh:255
bool isAtomicNoReturn() const
Definition: request.hh:783
The request is a prefetch.
Definition: request.hh:153
Bitfield< 11 > id
Definition: miscregs.hh:124
This request is to a memory mapped register.
Definition: request.hh:126
unsigned getSize() const
Definition: request.hh:552
The request should be handled by the generic IPR code (only valid together with MMAPPED_IPR) ...
Definition: request.hh:178
The request is a Load locked/store conditional.
Definition: request.hh:147
Access has Wavefront scope visibility.
Definition: request.hh:219
void setPaddr(Addr paddr)
Set just the physical address.
Definition: request.hh:487
void setFlags(Flags flags)
Note that unlike other accessors, this function sets specific flags (ORs them in); it does not assign...
Definition: request.hh:595
MemSpaceConfigFlags _memSpaceConfigFlags
Memory space configuraiton flag structure for the request.
Definition: request.hh:313
void set(Type flags)
Definition: flags.hh:70
These flags are not cleared when a Request object is reused (assigned a new address).
Definition: request.hh:266
void incAccessDepth() const
Increment/Get the depth at which this request is responded to.
Definition: request.hh:725
Group Segment.
Definition: request.hh:230
bool isGlobalSegment() const
Definition: request.hh:829
int ContextID
Globally unique thread context ID.
Definition: types.hh:175
uint32_t taskId() const
Definition: request.hh:630
Request(Addr paddr, unsigned size, Flags flags, MasterID mid, InstSeqNum seq_num, ContextID cid)
Definition: request.hh:368
bool isSystemScope() const
Definition: request.hh:822
uint32_t MemSpaceConfigFlagsType
Definition: request.hh:212
void taskId(uint32_t id)
Definition: request.hh:636
bool hasPaddr() const
Accessor for paddr.
Definition: request.hh:513
Invalid master id for assertion checking only.
Definition: request.hh:208
void setTranslateLatency()
Set/Get the time taken for this request to be successfully translated.
Definition: request.hh:731
bool isSecure() const
Definition: request.hh:777
This master id is used for message signaled interrupts.
Definition: request.hh:203

Generated on Fri Jun 9 2017 13:03:49 for gem5 by doxygen 1.8.6