|
gem5
v21.1.0.2
|
This proxy attempts to translate virtual addresses using the TLBs. More...
#include <translating_port_proxy.hh>
Public Member Functions | |
| TranslatingPortProxy (ThreadContext *tc, Request::Flags _flags=0) | |
| bool | tryReadBlob (Addr addr, void *p, int size) const override |
| Version of tryReadblob that translates virt->phys and deals with page boundries. More... | |
| bool | tryWriteBlob (Addr addr, const void *p, int size) const override |
| Version of tryWriteBlob that translates virt->phys and deals with page boundries. More... | |
| bool | tryMemsetBlob (Addr address, uint8_t v, int size) const override |
| Fill size bytes starting at addr with byte value val. More... | |
Public Member Functions inherited from gem5::PortProxy | |
| PortProxy (SendFunctionalFunc func, unsigned int cache_line_size) | |
| PortProxy (ThreadContext *tc, unsigned int cache_line_size) | |
| PortProxy (const RequestPort &port, unsigned int cache_line_size) | |
| virtual | ~PortProxy () |
| void | readBlobPhys (Addr addr, Request::Flags flags, void *p, int size) const |
| Fixed functionality for use in base classes. More... | |
| void | writeBlobPhys (Addr addr, Request::Flags flags, const void *p, int size) const |
| Write size bytes from p to physical address. More... | |
| void | memsetBlobPhys (Addr addr, Request::Flags flags, uint8_t v, int size) const |
| Fill size bytes starting at physical addr with byte value val. More... | |
| void | readBlob (Addr addr, void *p, int size) const |
| Higher level interfaces based on the above. More... | |
| void | writeBlob (Addr addr, const void *p, int size) const |
| Same as tryWriteBlob, but insists on success. More... | |
| void | memsetBlob (Addr addr, uint8_t v, int size) const |
| Same as tryMemsetBlob, but insists on success. More... | |
| template<typename T > | |
| T | read (Addr address) const |
| Read sizeof(T) bytes from address and return as object T. More... | |
| template<typename T > | |
| void | write (Addr address, const T &data) const |
| Write object T to address. More... | |
| template<typename T > | |
| T | read (Addr address, ByteOrder guest_byte_order) const |
| Read sizeof(T) bytes from address and return as object T. More... | |
| template<typename T > | |
| void | write (Addr address, T data, ByteOrder guest_byte_order) const |
| Write object T to address. More... | |
| bool | tryWriteString (Addr addr, const char *str) const |
| Write the string str into guest memory at address addr. More... | |
| void | writeString (Addr addr, const char *str) const |
| Same as tryWriteString, but insists on success. More... | |
| bool | tryReadString (std::string &str, Addr addr) const |
| Reads the string at guest address addr into the std::string str. More... | |
| void | readString (std::string &str, Addr addr) const |
| Same as tryReadString, but insists on success. More... | |
| bool | tryReadString (char *str, Addr addr, size_t maxlen) const |
| Reads the string at guest address addr into the char * str, reading up to maxlen characters. More... | |
| void | readString (char *str, Addr addr, size_t maxlen) const |
| Same as tryReadString, but insists on success. More... | |
Protected Member Functions | |
| virtual bool | fixupAddr (Addr addr, BaseMMU::Mode mode) const |
Protected Attributes | |
| ThreadContext * | _tc |
| const Addr | pageBytes |
| Request::Flags | flags |
Private Member Functions | |
| bool | tryTLBsOnce (RequestPtr req, BaseMMU::Mode) const |
| bool | tryTLBs (RequestPtr req, BaseMMU::Mode) const |
Additional Inherited Members | |
Public Types inherited from gem5::PortProxy | |
| typedef std::function< void(PacketPtr pkt)> | SendFunctionalFunc |
This proxy attempts to translate virtual addresses using the TLBs.
If it fails, subclasses can override the fixupAddr virtual method to try to recover, and then attempt the translation again. If it still fails then the access as a whole fails.
Definition at line 58 of file translating_port_proxy.hh.
| gem5::TranslatingPortProxy::TranslatingPortProxy | ( | ThreadContext * | tc, |
| Request::Flags | _flags = 0 |
||
| ) |
Definition at line 57 of file translating_port_proxy.cc.
|
inlineprotectedvirtual |
Reimplemented in gem5::SETranslatingPortProxy.
Definition at line 71 of file translating_port_proxy.hh.
Referenced by tryTLBs().
|
overridevirtual |
Fill size bytes starting at addr with byte value val.
Reimplemented from gem5::PortProxy.
Definition at line 124 of file translating_port_proxy.cc.
References _tc, gem5::ThreadContext::contextId(), gem5::ChunkGenerator::done(), flags, gem5::Request::funcRequestorId, gem5::PortProxy::memsetBlobPhys(), pageBytes, tryTLBs(), gem5::ArmISA::v, and gem5::BaseMMU::Write.
|
overridevirtual |
Version of tryReadblob that translates virt->phys and deals with page boundries.
Reimplemented from gem5::PortProxy.
Definition at line 82 of file translating_port_proxy.cc.
References _tc, gem5::X86ISA::addr, gem5::ThreadContext::contextId(), gem5::ChunkGenerator::done(), flags, gem5::Request::funcRequestorId, gem5::MipsISA::p, pageBytes, gem5::BaseMMU::Read, gem5::PortProxy::readBlobPhys(), and tryTLBs().
|
private |
Definition at line 73 of file translating_port_proxy.cc.
References fixupAddr(), gem5::ArmISA::mode, and tryTLBsOnce().
Referenced by tryMemsetBlob(), tryReadBlob(), and tryWriteBlob().
|
private |
Definition at line 65 of file translating_port_proxy.cc.
References _tc, gem5::BaseMMU::Execute, gem5::ThreadContext::getMMUPtr(), gem5::ArmISA::mode, gem5::NoFault, and gem5::BaseMMU::translateFunctional().
Referenced by tryTLBs().
|
overridevirtual |
Version of tryWriteBlob that translates virt->phys and deals with page boundries.
Reimplemented from gem5::PortProxy.
Definition at line 103 of file translating_port_proxy.cc.
References _tc, gem5::X86ISA::addr, gem5::ThreadContext::contextId(), gem5::ChunkGenerator::done(), flags, gem5::Request::funcRequestorId, gem5::MipsISA::p, pageBytes, tryTLBs(), gem5::BaseMMU::Write, and gem5::PortProxy::writeBlobPhys().
|
protected |
Definition at line 65 of file translating_port_proxy.hh.
Referenced by gem5::SETranslatingPortProxy::fixupAddr(), tryMemsetBlob(), tryReadBlob(), tryTLBsOnce(), and tryWriteBlob().
|
protected |
Definition at line 68 of file translating_port_proxy.hh.
Referenced by tryMemsetBlob(), tryReadBlob(), and tryWriteBlob().
|
protected |
Definition at line 66 of file translating_port_proxy.hh.
Referenced by gem5::SETranslatingPortProxy::fixupAddr(), tryMemsetBlob(), tryReadBlob(), and tryWriteBlob().