63 smmu.runProcess(
this, NULL);
90 a.pkt->dataStatic(ptr);
106 unsigned nbeats = (size + (
smmu.requestPortWidth-1))
107 /
smmu.requestPortWidth;
123 a.pkt->dataStatic(ptr);
133 if (
smmu.system.isTimingMode())
138 a.delay = cycles *
smmu.clockPeriod();
153 while (sem.
count == 0) {
154 sem.
queue.push(
this);
166 if (!sem.
queue.empty()) {
Cycles is a wrapper class for representing cycle counts, i.e.
Wrap a member function inside MemberEventWrapper to use it as an event callback.
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
gem5::Coroutine< PacketPtr, SMMUAction > Coroutine
SMMUAction run(PacketPtr pkt)
virtual void main(Yield &yield)=0
void doSleep(Yield &yield)
const std::string name() const
void doWrite(Yield &yield, Addr addr, const void *ptr, size_t size)
Coroutine::CallerType Yield
void doDelay(Yield &yield, Cycles cycles)
void doSemaphoreUp(SMMUSemaphore &sem)
SMMUProcess(const std::string &name, SMMUv3 &_smmu)
void scheduleWakeup(Tick when)
void doBroadcastSignal(SMMUSignal &sig)
void doSemaphoreDown(Yield &yield, SMMUSemaphore &sem)
void doWaitForSignal(Yield &yield, SMMUSignal &sig)
void doRead(Yield &yield, Addr addr, void *ptr, size_t size)
Copyright (c) 2024 Arm Limited All rights reserved.
std::shared_ptr< Request > RequestPtr
Tick curTick()
The universal simulation clock.
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
uint64_t Tick
Tick count type.
This is an implementation of the SMMUv3 architecture.
std::queue< SMMUProcess * > queue
std::list< SMMUProcess * > waiting