summaryrefslogtreecommitdiff
path: root/src/dev/virtio
diff options
context:
space:
mode:
authorAndreas Sandberg <andreas.sandberg@arm.com>2017-07-20 11:20:17 +0100
committerAndreas Sandberg <andreas.sandberg@arm.com>2017-11-08 10:32:54 +0000
commitd6c204c67d42a3cea9d603888ec52a8d8dacf1a3 (patch)
tree3c5c0f263d122a4d13901e432ff408bfa905f1f3 /src/dev/virtio
parent344911b885114b8401482679202aaee89fa8b29b (diff)
downloadgem5-d6c204c67d42a3cea9d603888ec52a8d8dacf1a3.tar.xz
dev: Refactor UART->Terminal interface
The UART models currently assume that they are always wired to a terminal. While true at the moment, this isn't necessarily a valid assumption. This change introduces the SerialDevice class that defines the interface for serial devices. Currently, Terminal is the only class that implements this interface. Change-Id: I74fefafbbaf5ac1ec0d4ec0b5a0f4b246fdad305 Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Curtis Dunham <curtis.dunham@arm.com> Reviewed-on: https://gem5-review.googlesource.com/4289 Reviewed-by: Gabe Black <gabeblack@google.com>
Diffstat (limited to 'src/dev/virtio')
-rw-r--r--src/dev/virtio/VirtIOConsole.py3
-rw-r--r--src/dev/virtio/console.cc12
-rw-r--r--src/dev/virtio/console.hh4
3 files changed, 10 insertions, 9 deletions
diff --git a/src/dev/virtio/VirtIOConsole.py b/src/dev/virtio/VirtIOConsole.py
index cd73d6509..bce5e1de2 100644
--- a/src/dev/virtio/VirtIOConsole.py
+++ b/src/dev/virtio/VirtIOConsole.py
@@ -40,6 +40,7 @@
from m5.params import *
from m5.proxy import *
from VirtIO import VirtIODeviceBase
+from Serial import SerialDevice
class VirtIOConsole(VirtIODeviceBase):
type = 'VirtIOConsole'
@@ -48,4 +49,4 @@ class VirtIOConsole(VirtIODeviceBase):
qRecvSize = Param.Unsigned(16, "Receive queue size (descriptors)")
qTransSize = Param.Unsigned(16, "Transmit queue size (descriptors)")
- terminal = Param.Terminal(Parent.any, "The terminal")
+ device = Param.SerialDevice("Serial device attached to this device")
diff --git a/src/dev/virtio/console.cc b/src/dev/virtio/console.cc
index e3428e951..1027925bb 100644
--- a/src/dev/virtio/console.cc
+++ b/src/dev/virtio/console.cc
@@ -47,7 +47,7 @@ VirtIOConsole::VirtIOConsole(Params *params)
: VirtIODeviceBase(params, ID_CONSOLE, sizeof(Config), F_SIZE),
qRecv(params->system->physProxy, params->qRecvSize, *this),
qTrans(params->system->physProxy, params->qTransSize, *this),
- term(*params->terminal), callbackDataAvail(qRecv)
+ device(*params->device), callbackDataAvail(qRecv)
{
registerQueue(qRecv);
registerQueue(qTrans);
@@ -55,7 +55,7 @@ VirtIOConsole::VirtIOConsole(Params *params)
config.cols = 80;
config.rows = 24;
- term.regDataAvailCallback(&callbackDataAvail);
+ device.regInterfaceCallback(&callbackDataAvail);
}
@@ -81,11 +81,11 @@ VirtIOConsole::TermRecvQueue::trySend()
// get free descriptors (i.e., there are buffers available to
// send) from the guest.
VirtDescriptor *d;
- while (parent.term.dataAvailable() && (d = consumeDescriptor())) {
+ while (parent.device.dataAvailable() && (d = consumeDescriptor())) {
DPRINTF(VIOConsole, "Got descriptor (len: %i)\n", d->size());
size_t len(0);
- while (parent.term.dataAvailable() && len < d->size()) {
- uint8_t in(parent.term.in());
+ while (parent.device.dataAvailable() && len < d->size()) {
+ uint8_t in(parent.device.readData());
d->chainWrite(len, &in, sizeof(uint8_t));
++len;
}
@@ -108,7 +108,7 @@ VirtIOConsole::TermTransQueue::onNotifyDescriptor(VirtDescriptor *desc)
uint8_t data[size];
desc->chainRead(0, data, size);
for (int i = 0; i < desc->size(); ++i)
- parent.term.out(data[i]);
+ parent.device.writeData(data[i]);
// Tell the guest that we are done with this descriptor.
produceDescriptor(desc, 0);
diff --git a/src/dev/virtio/console.hh b/src/dev/virtio/console.hh
index e41ff9a65..720b60044 100644
--- a/src/dev/virtio/console.hh
+++ b/src/dev/virtio/console.hh
@@ -40,8 +40,8 @@
#ifndef __DEV_VIRTIO_CONSOLE_HH__
#define __DEV_VIRTIO_CONSOLE_HH__
+#include "dev/serial.hh"
#include "dev/virtio/base.hh"
-#include "dev/terminal.hh"
struct VirtIOConsoleParams;
@@ -147,7 +147,7 @@ class VirtIOConsole : public VirtIODeviceBase
TermTransQueue qTrans;
protected:
- Terminal &term;
+ SerialDevice &device;
MakeCallback<VirtIOConsole::TermRecvQueue,
&VirtIOConsole::TermRecvQueue::trySend> callbackDataAvail;
};