diff options
Diffstat (limited to 'src/arch/arm')
-rw-r--r-- | src/arch/arm/table_walker.cc | 8 | ||||
-rw-r--r-- | src/arch/arm/table_walker.hh | 3 | ||||
-rw-r--r-- | src/arch/arm/tlb.cc | 6 | ||||
-rw-r--r-- | src/arch/arm/tlb.hh | 13 |
4 files changed, 20 insertions, 10 deletions
diff --git a/src/arch/arm/table_walker.cc b/src/arch/arm/table_walker.cc index 8bffe68f8..73a691cff 100644 --- a/src/arch/arm/table_walker.cc +++ b/src/arch/arm/table_walker.cc @@ -91,13 +91,13 @@ TableWalker::resume() } } -Port* -TableWalker::getPort(const std::string &if_name, int idx) +MasterPort& +TableWalker::getMasterPort(const std::string &if_name, int idx) { if (if_name == "port") { - return &port; + return port; } - return NULL; + return MemObject::getMasterPort(if_name, idx); } Fault diff --git a/src/arch/arm/table_walker.hh b/src/arch/arm/table_walker.hh index b5099bb27..a6ff2585b 100644 --- a/src/arch/arm/table_walker.hh +++ b/src/arch/arm/table_walker.hh @@ -358,7 +358,8 @@ class TableWalker : public MemObject virtual unsigned int drain(Event *de); virtual void resume(); - virtual Port *getPort(const std::string &if_name, int idx = -1); + virtual MasterPort& getMasterPort(const std::string &if_name, + int idx = -1); Fault walk(RequestPtr req, ThreadContext *tc, uint8_t cid, TLB::Mode mode, TLB::Translation *_trans, bool timing, bool functional = false); diff --git a/src/arch/arm/tlb.cc b/src/arch/arm/tlb.cc index 0b003e9fb..f9b2e6fe7 100644 --- a/src/arch/arm/tlb.cc +++ b/src/arch/arm/tlb.cc @@ -722,10 +722,10 @@ TLB::translateTiming(RequestPtr req, ThreadContext *tc, return fault; } -Port* -TLB::getPort() +MasterPort* +TLB::getMasterPort() { - return tableWalker->getPort("port"); + return &tableWalker->getMasterPort("port"); } diff --git a/src/arch/arm/tlb.hh b/src/arch/arm/tlb.hh index daf59f01d..a20957f6a 100644 --- a/src/arch/arm/tlb.hh +++ b/src/arch/arm/tlb.hh @@ -214,8 +214,17 @@ class TLB : public BaseTLB void regStats(); - // Get the port from the table walker and return it - virtual Port *getPort(); + /** + * Get the table walker master port. This is used for migrating + * port connections during a CPU takeOverFrom() call. For + * architectures that do not have a table walker, NULL is + * returned, hence the use of a pointer rather than a + * reference. For ARM this method will always return a valid port + * pointer. + * + * @return A pointer to the walker master port + */ + virtual MasterPort* getMasterPort(); // Caching misc register values here. // Writing to misc registers needs to invalidate them. |