Go to the documentation of this file.
42 #include "debug/SCMI.hh"
51 readMessageEvent([
this]{ readMessage(); },
name()),
52 handleMessageEvent([
this]{ handleMessage(); },
name())
84 DPRINTF(
SCMI,
"SCMI Virtual channel %u, channel.status: %u\n",
110 DPRINTF(
SCMI,
"SCMI Virtual channel %u, message.length: %u\n",
123 "SCMI Virtual channel %u, message.header: %#x\n",
135 notifyAgentEvent([
this]{ notifyAgent(); },
name()),
136 completeEvent([
this]{ complete(); },
name()),
138 platformDoorbellVal(0)
145 "SCMI Virtual channel %u, writing back message %u"
146 " with status code: %d\n",
164 "SCMI Virtual channel %u, clearing doorbell\n",
182 "SCMI Virtual channel %u, notifying agent\n",
206 for (
auto comm :
comms) {
207 comm->agentChan->dmaPort = &
dmaPort;
208 comm->agentChan->setPlatform(
this);
210 comm->platformChan->dmaPort = &
dmaPort;
211 comm->platformChan->setPlatform(
this);
215 "The number of instantiated protocols are not matching the"
216 " architected limit");
229 if (if_name ==
"dma") {
243 "Unimplemented SCMI protocol: %u\n", prot_id);
258 DPRINTF(
SCMI,
"Raise interrupt in SCMI platform\n");
264 for (
auto comm :
comms) {
265 auto channel = comm->agentChan;
266 if (channel->doorbell == doorbell) {
269 channel->initiateRead();
274 panic(
"No matching virtual channel\n");
280 DPRINTF(
SCMI,
"Clear interrupt in SCMI platform\n");
286 for (
auto comm :
comms) {
287 if (comm->platformChan == platform) {
288 return comm->agentChan;
298 for (
auto comm :
comms) {
299 if (comm->agentChan == agent) {
300 return comm->platformChan;
Generic doorbell interface.
This is a Agent to Platform channel (The agent is the initiator)
int16_t PortID
Port index/ID type, and a symbolic name for an invalid port id.
EventFunctionWrapper handleMessageEvent
Generic communication channel between the Agent and the Platform.
virtual Port & getPort(const std::string &if_name, PortID idx=InvalidPortID)
Get a port with a given name and index.
Ports are used to interface objects to each other.
EventFunctionWrapper readMessageEvent
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
const std::string & name()
void dmaAction(Packet::Command cmd, Addr addr, int size, Event *event, uint8_t *data, Tick delay, Request::Flags flag=0)
Addr clearAddress() const
#define panic_if(cond,...)
Conditional panic macro that checks the supplied condition and only panics if the condition is true a...
EventFunctionWrapper readLengthEvent
This protocol describes the properties of the implementation and provides generic error management.
virtual void handleMessage(Message &msg)=0
Addr start() const
Get the start address of the range.
static const uint8_t PROTOCOL_MAX
@ UNCACHEABLE
The request is to an uncacheable address.
#define fatal_if(cond,...)
Conditional fatal macro that checks the supplied condition and only causes a fatal error if the condi...
AgentChannel(const ScmiChannelParams &p)
#define panic(...)
This implements a cprintf based panic() function.
Generated on Tue Jun 22 2021 15:28:27 for gem5 by doxygen 1.8.17