Go to the documentation of this file.
40 #include "debug/VIOIface.hh"
43 #include "params/MmioVirtIO.hh"
47 hostFeaturesSelect(0), guestFeaturesSelect(0), pageSize(0),
48 interruptStatus(0), vio(*params->vio),
49 interrupt(params->interrupt->get())
64 const unsigned size(pkt->
getSize());
66 DPRINTF(VIOIface,
"Reading %u bytes @ 0x%x:\n", size,
offset);
74 panic_if(size != 4,
"Unexpected read size: %u\n", size);
77 DPRINTF(VIOIface,
" value: 0x%x\n", value);
79 pkt->
setLE<uint32_t>(value);
149 warn(
"Guest is trying to read to write-only register 0x%\n",
162 const unsigned size(pkt->
getSize());
164 DPRINTF(VIOIface,
"Writing %u bytes @ 0x%x:\n", size,
offset);
172 panic_if(size != 4,
"Unexpected write size @ 0x%x: %u\n",
offset, size);
173 DPRINTF(VIOIface,
" value: 0x%x\n", pkt->
getLE<uint32_t>());
190 }
else if (value != 0) {
191 warn(
"Setting unimplemented guest features register %u: %u\n",
203 "Unhandled VirtIO page size: %u", value);
213 warn_once(
"Ignoring queue resize hint. Requested size: %u\n", value);
220 "Unhandled VirtIO alignment size: %u", value);
236 panic_if(value > 0xff,
"Unexpected status: 0x%x\n", value);
248 warn(
"Guest is trying to write to read-only register 0x%\n",
260 DPRINTF(VIOIface,
"kick(): Sending interrupt...\n");
279 MmioVirtIOParams::create()
void onNotify(QueueID index)
Driver is requesting service.
uint32_t guestFeaturesSelect
Addr pioAddr
Address that the device listens to.
MmioVirtIO(const MmioVirtIOParams *params)
Tick read(PacketPtr pkt) override
Pure virtual function that the device must implement.
virtual void readConfig(PacketPtr pkt, Addr cfgOffset)
Read from the configuration space of a device.
virtual void clear()=0
Clear a signalled interrupt.
DeviceStatus getDeviceStatus() const
Retrieve the device status.
void setInterrupts(uint32_t value)
virtual void raise()=0
Signal an interrupt.
uint64_t Tick
Tick count type.
uint32_t getQueueAddress() const
Get the host physical address of the currently active queue.
FeatureBits getGuestFeatures() const
Get features accepted by the guest driver.
const FeatureBits deviceFeatures
Feature set offered by the device.
void setQueueAddress(uint32_t address)
Change the host physical address of the currently active queue.
QueueID getQueueSelect() const
Get the currently active queue.
static const Addr ALIGN_SIZE
static const uint32_t VENDOR_ID
uint16_t getQueueSize() const
Get the size (descriptors) of the currently active queue.
static const uint32_t MAGIC
Tick write(PacketPtr pkt) override
Pure virtual function that the device must implement.
static const uint32_t VERSION
@ OFF_GUEST_FEATURES_SELECT
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
void makeResponse()
Take a request packet and modify it in place to be suitable for returning as a response to that reque...
void setGuestFeatures(FeatureBits features)
Set feature bits accepted by the guest driver.
void setQueueSelect(QueueID idx)
Change currently active queue.
#define panic_if(cond,...)
Conditional panic macro that checks the supplied condition and only panics if the condition is true a...
const DeviceId deviceId
Device ID (sometimes known as subsystem ID)
T getLE() const
Get the data in the packet byte swapped from little endian to host endian.
ArmInterruptPin *const interrupt
void setDeviceStatus(DeviceStatus status)
Update device status and optionally reset device.
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
@ OFF_HOST_FEATURES_SELECT
void setLE(T v)
Set the value in the data pointer to v as little endian.
#define fatal_if(cond,...)
Conditional fatal macro that checks the supplied condition and only causes a fatal error if the condi...
uint32_t hostFeaturesSelect
void registerKickCallback(const std::function< void()> &callback)
Register a callback to kick the guest through the transport interface.
#define panic(...)
This implements a cprintf based panic() function.
virtual void writeConfig(PacketPtr pkt, Addr cfgOffset)
Write to the configuration space of a device.
Generated on Wed Sep 30 2020 14:02:10 for gem5 by doxygen 1.8.17