Go to the documentation of this file.
41 #include "debug/SMMUv3.hh"
49 const SMMUv3DeviceInterfaceParams &
p) :
60 microTLBEnable(
p.utlb_enable),
61 mainTLBEnable(
p.tlb_enable),
63 microTLBSem(
p.utlb_slots),
64 mainTLBSem(
p.tlb_slots),
65 microTLBLat(
p.utlb_lat),
66 mainTLBLat(
p.tlb_lat),
69 atsDevicePort(
name() +
".atsDevicePort", *this),
70 atsMemPort(
name() +
".atsMemPort", *this),
71 portWidth(
p.port_width),
72 wrBufSlotsRemaining(
p.wrbuf_slots),
73 xlateSlotsRemaining(
p.xlate_slots),
74 pendingMemAccesses(0),
75 prefetchEnable(
p.prefetch_enable),
76 prefetchReserveLastWay(
77 p.prefetch_reserve_last_way),
78 deviceNeedsRetry(false),
79 atsDeviceNeedsRetry(false),
80 sendDeviceRetryEvent(*this),
81 atsSendDeviceRetryEvent(*this)
92 fatal(
"Device port is not connected.\n");
99 if (
name ==
"ats_mem_side_port") {
101 }
else if (
name ==
"device_port") {
103 }
else if (
name ==
"ats_dev_side_port") {
182 const bool ats_request =
true;
184 proc_name, *
smmu, *
this);
208 const bool ats_request =
true;
221 DPRINTF(
SMMUv3,
"[t] ATS requestor resp addr=%#x size=%#x\n",
bool recvTimingReq(PacketPtr pkt)
#define fatal(...)
This implements a cprintf based fatal() function.
int16_t PortID
Port index/ID type, and a symbolic name for an invalid port id.
Port & getPeer()
Return a reference to this port's peer.
virtual Port & getPort(const std::string &if_name, PortID idx=InvalidPortID)
Get a port with a given name and index.
void sendRetryReq()
Send a retry to the request port that previously attempted a sendTimingReq to this response port and ...
SMMUAction runProcessTiming(SMMUProcess *proc, PacketPtr pkt)
void schedTimingResp(PacketPtr pkt)
SMMUATSMemoryPort atsMemPort
void schedule(Event &event, Tick when)
std::string csprintf(const char *format, const Args &...args)
uint32_t headerDelay
The extra delay from seeing the packet until the header is transmitted.
SMMUDeviceRetryEvent sendDeviceRetryEvent
SMMUAction runProcessAtomic(SMMUProcess *proc, PacketPtr pkt)
static SMMUTranslRequest fromPacket(PacketPtr pkt, bool ats=false)
Tick atsRecvAtomic(PacketPtr pkt)
uint32_t payloadDelay
The extra pipelining delay from seeing the packet until the end of payload is transmitted by the comp...
bool atsRecvTimingReq(PacketPtr pkt)
void schedAtsTimingResp(PacketPtr pkt)
DrainState
Object drain/handover states.
SMMUDevicePort * devicePort
void atsSendDeviceRetry()
virtual std::string name() const
const Params & params() const
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
SMMUv3DeviceInterface(const Params &p)
uint64_t Tick
Tick count type.
SMMUATSDevicePort atsDevicePort
void beginTransaction(const SMMUTranslRequest &req)
bool isConnected() const
Is this port currently connected to a peer?
@ Drained
Buffers drained, ready for serialization/handover.
const std::string & name()
The ClockedObject class extends the SimObject with a clock and accessor functions to relate ticks to ...
friend class SMMUTranslationProcess
void sendRangeChange() const
Called by the owner to send a range change.
SenderState * popSenderState()
Pop the top of the state stack and return a pointer to it.
DrainState drain() override
Draining is the process of clearing out the states of SimObjects.These are the SimObjects that are pa...
Tick nextCycle() const
Based on the clock of the object, determine the start tick of the first cycle that is at least one cy...
void scheduleDeviceRetry()
unsigned xlateSlotsRemaining
Tick recvAtomic(PacketPtr pkt)
Ports are used to interface objects to each other.
unsigned wrBufSlotsRemaining
void schedTimingResp(PacketPtr pkt, Tick when)
Schedule the sending of a timing response.
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
MemberEventWrapper<&SMMUv3DeviceInterface::atsSendDeviceRetry > atsSendDeviceRetryEvent
bool atsRecvTimingResp(PacketPtr pkt)
Port & getPort(const std::string &name, PortID id) override
Get a port with a given name and index.
@ Draining
Draining buffers pending serialization/handover.
bool scheduled() const
Determine if the current event is scheduled.
Generated on Sun Jul 30 2023 01:56:55 for gem5 by doxygen 1.8.17