Go to the documentation of this file.
41 #include "debug/SMMUv3.hh"
46 const SMMUv3DeviceInterfaceParams *
p) :
49 microTLB(new
SMMUTLB(
p->utlb_entries,
55 microTLBEnable(
p->utlb_enable),
56 mainTLBEnable(
p->tlb_enable),
58 microTLBSem(
p->utlb_slots),
59 mainTLBSem(
p->tlb_slots),
60 microTLBLat(
p->utlb_lat),
61 mainTLBLat(
p->tlb_lat),
64 atsDevicePort(
name() +
".atsDevicePort", *this),
65 atsMemPort(
name() +
".atsMemPort", *this),
66 portWidth(
p->port_width),
67 wrBufSlotsRemaining(
p->wrbuf_slots),
68 xlateSlotsRemaining(
p->xlate_slots),
69 pendingMemAccesses(0),
70 prefetchEnable(
p->prefetch_enable),
71 prefetchReserveLastWay(
72 p->prefetch_reserve_last_way),
73 deviceNeedsRetry(false),
74 atsDeviceNeedsRetry(false),
75 sendDeviceRetryEvent(*this),
76 atsSendDeviceRetryEvent(this)
87 fatal(
"Device port is not connected.\n");
94 if (
name ==
"ats_mem_side_port") {
96 }
else if (
name ==
"device_port") {
98 }
else if (
name ==
"ats_dev_side_port") {
177 const bool ats_request =
true;
179 proc_name, *
smmu, *
this);
203 const bool ats_request =
true;
216 DPRINTF(
SMMUv3,
"[t] ATS requestor resp addr=%#x size=%#x\n",
264 SMMUv3DeviceInterfaceParams::create()
#define fatal(...)
This implements a cprintf based fatal() function.
SMMUATSDevicePort atsDevicePort
bool scheduled() const
Determine if the current event is scheduled.
void schedTimingResp(PacketPtr pkt)
DrainState drain() override
Draining is the process of clearing out the states of SimObjects.These are the SimObjects that are pa...
uint32_t payloadDelay
The extra pipelining delay from seeing the packet until the end of payload is transmitted by the comp...
SMMUDevicePort * devicePort
unsigned wrBufSlotsRemaining
bool atsRecvTimingResp(PacketPtr pkt)
bool recvTimingReq(PacketPtr pkt)
uint64_t Tick
Tick count type.
int16_t PortID
Port index/ID type, and a symbolic name for an invalid port id.
SMMUDeviceRetryEvent sendDeviceRetryEvent
SMMUv3DeviceInterface(const SMMUv3DeviceInterfaceParams *p)
SMMUAction runProcessTiming(SMMUProcess *proc, PacketPtr pkt)
SMMUATSMemoryPort atsMemPort
void schedTimingResp(PacketPtr pkt, Tick when)
Schedule the sending of a timing response.
uint32_t headerDelay
The extra delay from seeing the packet until the header is transmitted.
The ClockedObject class extends the SimObject with a clock and accessor functions to relate ticks to ...
@ Drained
Buffers drained, ready for serialization/handover.
DrainState
Object drain/handover states.
SMMUAction runProcessAtomic(SMMUProcess *proc, PacketPtr pkt)
friend class SMMUTranslationProcess
void schedule(Event &event, Tick when)
virtual Port & getPort(const std::string &if_name, PortID idx=InvalidPortID)
Get a port with a given name and index.
static SMMUTranslRequest fromPacket(PacketPtr pkt, bool ats=false)
Ports are used to interface objects to each other.
const std::string & name()
Port & getPort(const std::string &name, PortID id) override
Get a port with a given name and index.
virtual const std::string name() const
Tick atsRecvAtomic(PacketPtr pkt)
void schedAtsTimingResp(PacketPtr pkt)
unsigned xlateSlotsRemaining
Tick recvAtomic(PacketPtr pkt)
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
const SMMUv3DeviceInterfaceParams * params() const
bool atsRecvTimingReq(PacketPtr pkt)
SenderState * popSenderState()
Pop the top of the state stack and return a pointer to it.
EventWrapper< SMMUv3DeviceInterface, &SMMUv3DeviceInterface::atsSendDeviceRetry > atsSendDeviceRetryEvent
Port & getPeer()
Return a reference to this port's peer.
bool isConnected() const
Is this port currently connected to a peer?
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 sendRetryReq()
Send a retry to the request port that previously attempted a sendTimingReq to this response port and ...
void beginTransaction(const SMMUTranslRequest &req)
void atsSendDeviceRetry()
void sendRangeChange() const
Called by the owner to send a range change.
std::string csprintf(const char *format, const Args &...args)
void scheduleDeviceRetry()
@ Draining
Draining buffers pending serialization/handover.
Generated on Wed Sep 30 2020 14:02:10 for gem5 by doxygen 1.8.17