diff --git a/src/mem/request.hh b/src/mem/request.hh --- a/src/mem/request.hh +++ b/src/mem/request.hh @@ -320,6 +320,24 @@ } /** + * Generate two requests as if this request had been split into two + * pieces. The original request should have already been translated + * to a physical address. + */ + void splitOnPaddr(Addr split_addr, RequestPtr &req1, RequestPtr &req2) + { + assert(privateFlags.isSet(VALID_PADDR)); + assert(split_addr > _paddr && split_addr < _paddr + _size); + req1 = new Request; + *req1 = *this; + req2 = new Request; + *req2 = *this; + req1->_size = split_addr - _paddr; + req2->_paddr = split_addr; + req2->_size = _size - req1->_size; + } + + /** * Accessor for paddr. */ bool