diff options
Diffstat (limited to 'src/mem/request.hh')
-rw-r--r-- | src/mem/request.hh | 133 |
1 files changed, 63 insertions, 70 deletions
diff --git a/src/mem/request.hh b/src/mem/request.hh index 870930317..c8c31ffcd 100644 --- a/src/mem/request.hh +++ b/src/mem/request.hh @@ -132,17 +132,17 @@ class Request : public FastAlloc * The physical address of the request. Valid only if validPaddr * is set. */ - Addr paddr; + Addr _paddr; /** * The size of the request. This field must be set when vaddr or * paddr is written via setVirt() or setPhys(), so it is always * valid as long as one of the address fields is valid. */ - int size; + int _size; /** Flag structure for the request. */ - Flags flags; + Flags _flags; /** Private flags for field validity checking. */ PrivateFlags privateFlags; @@ -155,15 +155,15 @@ class Request : public FastAlloc Tick _time; /** The address space ID. */ - int asid; + int _asid; /** The virtual address of the request. */ - Addr vaddr; + Addr _vaddr; /** * Extra data for the request, such as the return value of * store conditional or the compare value for a CAS. */ - uint64_t extraData; + uint64_t _extraData; /** The context ID (for statistics, typically). */ int _contextId; @@ -171,10 +171,13 @@ class Request : public FastAlloc int _threadId; /** program counter of initiating access; for tracing/debugging */ - Addr pc; + Addr _pc; public: - /** Minimal constructor. No fields are initialized. */ + /** Minimal constructor. No fields are initialized. + * (Note that _flags and privateFlags are cleared by Flags + * default constructor.) + */ Request() {} @@ -218,23 +221,23 @@ class Request : public FastAlloc * allocated Request object. */ void - setPhys(Addr _paddr, int _size, Flags _flags, Tick time) + setPhys(Addr paddr, int size, Flags flags, Tick time) { - assert(_size >= 0); - paddr = _paddr; - size = _size; + assert(size >= 0); + _paddr = paddr; + _size = size; _time = time; - flags.clear(~STICKY_FLAGS); - flags.set(_flags); + _flags.clear(~STICKY_FLAGS); + _flags.set(flags); privateFlags.clear(~STICKY_PRIVATE_FLAGS); privateFlags.set(VALID_PADDR|VALID_SIZE); } void - setPhys(Addr _paddr, int _size, Flags _flags) + setPhys(Addr paddr, int size, Flags flags) { - setPhys(_paddr, _size, _flags, curTick); + setPhys(paddr, size, flags, curTick); } /** @@ -242,18 +245,17 @@ class Request : public FastAlloc * allocated Request object. */ void - setVirt(int _asid, Addr _vaddr, int _size, Flags _flags, Addr _pc) + setVirt(int asid, Addr vaddr, int size, Flags flags, Addr pc) { - assert(_size >= 0); - asid = _asid; - vaddr = _vaddr; - size = _size; - flags = _flags; - pc = _pc; + assert(size >= 0); + _asid = asid; + _vaddr = vaddr; + _size = size; + _pc = pc; _time = curTick; - flags.clear(~STICKY_FLAGS); - flags.set(_flags); + _flags.clear(~STICKY_FLAGS); + _flags.set(flags); privateFlags.clear(~STICKY_PRIVATE_FLAGS); privateFlags.set(VALID_VADDR|VALID_SIZE|VALID_PC); } @@ -265,10 +267,10 @@ class Request : public FastAlloc * to guarantee that the size and flags are also set. */ void - setPaddr(Addr _paddr) + setPaddr(Addr paddr) { assert(privateFlags.isSet(VALID_VADDR)); - paddr = _paddr; + _paddr = paddr; privateFlags.set(VALID_PADDR); } @@ -280,14 +282,14 @@ class Request : public FastAlloc { assert(privateFlags.isSet(VALID_VADDR)); assert(privateFlags.noneSet(VALID_PADDR)); - assert(split_addr > vaddr && split_addr < vaddr + size); + assert(split_addr > _vaddr && split_addr < _vaddr + _size); req1 = new Request; *req1 = *this; req2 = new Request; *req2 = *this; - req1->size = split_addr - vaddr; - req2->vaddr = split_addr; - req2->size = size - req1->size; + req1->_size = split_addr - _vaddr; + req2->_vaddr = split_addr; + req2->_size = _size - req1->_size; } /** @@ -303,7 +305,7 @@ class Request : public FastAlloc getPaddr() { assert(privateFlags.isSet(VALID_PADDR)); - return paddr; + return _paddr; } /** @@ -319,7 +321,7 @@ class Request : public FastAlloc getSize() { assert(privateFlags.isSet(VALID_SIZE)); - return size; + return _size; } /** Accessor for time. */ @@ -342,14 +344,18 @@ class Request : public FastAlloc getFlags() { assert(privateFlags.isSet(VALID_PADDR|VALID_VADDR)); - return flags; + return _flags; } + /** Note that unlike other accessors, this function sets *specific + flags* (ORs them in); it does not assign its argument to the + _flags field. Thus this method should rightly be called + setFlags() and not just flags(). */ void - setFlags(Flags _flags) + setFlags(Flags flags) { assert(privateFlags.isSet(VALID_PADDR|VALID_VADDR)); - flags.set(_flags); + _flags.set(flags); } /** Accessor function for vaddr.*/ @@ -357,7 +363,7 @@ class Request : public FastAlloc getVaddr() { assert(privateFlags.isSet(VALID_VADDR)); - return vaddr; + return _vaddr; } /** Accessor function for asid.*/ @@ -365,7 +371,7 @@ class Request : public FastAlloc getAsid() { assert(privateFlags.isSet(VALID_VADDR)); - return asid; + return _asid; } /** Accessor function for asi.*/ @@ -373,22 +379,7 @@ class Request : public FastAlloc getAsi() { assert(privateFlags.isSet(VALID_VADDR)); - return flags & ASI_BITS; - } - - /** Accessor function for MMAPED_IPR flag. */ - bool - isMmapedIpr() - { - assert(privateFlags.isSet(VALID_PADDR)); - return flags.isSet(MMAPED_IPR); - } - - void - setMmapedIpr(bool r) - { - assert(VALID_VADDR); - flags.set(MMAPED_IPR); + return _flags & ASI_BITS; } /** Accessor function to check if sc result is valid. */ @@ -403,14 +394,14 @@ class Request : public FastAlloc getExtraData() const { assert(privateFlags.isSet(VALID_EXTRA_DATA)); - return extraData; + return _extraData; } /** Accessor function for store conditional return value.*/ void - setExtraData(uint64_t _extraData) + setExtraData(uint64_t extraData) { - extraData = _extraData; + _extraData = extraData; privateFlags.set(VALID_EXTRA_DATA); } @@ -447,31 +438,33 @@ class Request : public FastAlloc getPC() const { assert(privateFlags.isSet(VALID_PC)); - return pc; + return _pc; } - /** Accessor Function to Check Cacheability. */ - bool isUncacheable() const { return flags.isSet(UNCACHEABLE); } - bool isInstFetch() const { return flags.isSet(INST_FETCH); } - bool isPrefetch() const { return flags.isSet(PREFETCH); } - bool isLLSC() const { return flags.isSet(LLSC); } - bool isLocked() const { return flags.isSet(LOCKED); } - bool isSwap() const { return flags.isSet(MEM_SWAP|MEM_SWAP_COND); } - bool isCondSwap() const { return flags.isSet(MEM_SWAP_COND); } + /** Accessor functions for flags. Note that these are for testing + only; setting flags should be done via setFlags(). */ + bool isUncacheable() const { return _flags.isSet(UNCACHEABLE); } + bool isInstFetch() const { return _flags.isSet(INST_FETCH); } + bool isPrefetch() const { return _flags.isSet(PREFETCH); } + bool isLLSC() const { return _flags.isSet(LLSC); } + bool isLocked() const { return _flags.isSet(LOCKED); } + bool isSwap() const { return _flags.isSet(MEM_SWAP|MEM_SWAP_COND); } + bool isCondSwap() const { return _flags.isSet(MEM_SWAP_COND); } + bool isMmapedIpr() const { return _flags.isSet(MMAPED_IPR); } bool isMisaligned() const { - if (flags.isSet(NO_ALIGN_FAULT)) + if (_flags.isSet(NO_ALIGN_FAULT)) return false; - if ((vaddr & 0x1)) + if ((_vaddr & 0x1)) return true; - if (flags.isSet(NO_HALF_WORD_ALIGN_FAULT)) + if (_flags.isSet(NO_HALF_WORD_ALIGN_FAULT)) return false; - if ((vaddr & 0x2)) + if ((_vaddr & 0x2)) return true; return false; |