diff -r 43b6cd6d74b1 -r 6908b72f1ffa src/arch/sparc/tlb.cc --- a/src/arch/sparc/tlb.cc Mon Oct 07 13:22:33 2013 +0200 +++ b/src/arch/sparc/tlb.cc Mon Oct 07 13:23:20 2013 +0200 @@ -420,7 +420,7 @@ Addr vaddr = req->getVaddr(); TlbEntry *e; - assert(req->getAsi() == ASI_IMPLICIT); + assert(req->getArchFlags() == ASI_IMPLICIT); DPRINTF(TLB, "TLB: ITB Request to translate va=%#x size=%d\n", vaddr, req->getSize()); @@ -536,7 +536,7 @@ Addr vaddr = req->getVaddr(); Addr size = req->getSize(); ASI asi; - asi = (ASI)req->getAsi(); + asi = (ASI)req->getArchFlags(); bool implicit = false; bool hpriv = bits(tlbdata,0,0); bool unaligned = vaddr & (size - 1); @@ -858,11 +858,11 @@ TLB::doMmuRegRead(ThreadContext *tc, Packet *pkt) { Addr va = pkt->getAddr(); - ASI asi = (ASI)pkt->req->getAsi(); + ASI asi = (ASI)pkt->req->getArchFlags(); uint64_t temp; DPRINTF(IPR, "Memory Mapped IPR Read: asi=%#X a=%#x\n", - (uint32_t)pkt->req->getAsi(), pkt->getAddr()); + (uint32_t)pkt->req->getArchFlags(), pkt->getAddr()); TLB *itb = tc->getITBPtr(); @@ -1044,7 +1044,7 @@ { uint64_t data = pkt->get(); Addr va = pkt->getAddr(); - ASI asi = (ASI)pkt->req->getAsi(); + ASI asi = (ASI)pkt->req->getArchFlags(); Addr ta_insert; Addr va_insert; @@ -1286,7 +1286,7 @@ default: doMmuWriteError: panic("need to impl DTB::doMmuRegWrite() got asi=%#x, va=%#x d=%#x\n", - (uint32_t)pkt->req->getAsi(), pkt->getAddr(), data); + (uint32_t)pkt->req->getArchFlags(), pkt->getAddr(), data); } pkt->makeAtomicResponse(); return Cycles(1); diff -r 43b6cd6d74b1 -r 6908b72f1ffa src/mem/request.hh --- a/src/mem/request.hh Mon Oct 07 13:22:33 2013 +0200 +++ b/src/mem/request.hh Mon Oct 07 13:23:20 2013 +0200 @@ -86,10 +86,17 @@ { public: typedef uint32_t FlagsType; + typedef uint8_t ArchFlagsType; typedef ::Flags Flags; - /** ASI information for this request if it exists. */ - static const FlagsType ASI_BITS = 0x000000FF; + /** + * Architecture specific flags. + * + * These bits int the flag field are reserved for + * architecture-specific code. For example, SPARC uses them to + * represent ASIs. + */ + static const FlagsType ARCH_BITS = 0x000000FF; /** The request was an instruction fetch. */ static const FlagsType INST_FETCH = 0x00000100; /** The virtual address is also the physical address. */ @@ -422,6 +429,13 @@ _flags.set(flags); } + void + setArchFlags(Flags flags) + { + assert(privateFlags.isSet(VALID_PADDR|VALID_VADDR)); + _flags.set(flags & ARCH_BITS); + } + /** Accessor function for vaddr.*/ Addr getVaddr() @@ -452,12 +466,12 @@ _asid = asid; } - /** Accessor function for asi.*/ - uint8_t - getAsi() + /** Accessor function for architecture-specific flags.*/ + ArchFlagsType + getArchFlags() { - assert(privateFlags.isSet(VALID_VADDR)); - return _flags & ASI_BITS; + assert(privateFlags.isSet(VALID_PADDR|VALID_VADDR)); + return _flags & ARCH_BITS; } /** Accessor function to check if sc result is valid. */