diff options
author | Andreas Sandberg <andreas.sandberg@arm.com> | 2017-07-20 11:36:55 +0100 |
---|---|---|
committer | Andreas Sandberg <andreas.sandberg@arm.com> | 2017-11-08 10:47:25 +0000 |
commit | 74d3f8a1765869765b542fd91114628a62947ba9 (patch) | |
tree | 201e1094159c565b1ae8f1b1f7b2a6f32abad4f4 | |
parent | d6c204c67d42a3cea9d603888ec52a8d8dacf1a3 (diff) | |
download | gem5-74d3f8a1765869765b542fd91114628a62947ba9.tar.xz |
dev: Add a dummy serial device
Add a dummy serial device that discards any output and doesn't provide
any input. This device can be used to terminate UARTs that don't have
a default device (e.g., a terminal) attached.
Change-Id: I4a6b0b5037ce360f59bfb5c566e1698d113a1d26
Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-by: Curtis Dunham <curtis.dunham@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/4290
Reviewed-by: Gabe Black <gabeblack@google.com>
-rw-r--r-- | src/dev/Serial.py | 4 | ||||
-rw-r--r-- | src/dev/serial.cc | 22 | ||||
-rw-r--r-- | src/dev/serial.hh | 15 |
3 files changed, 41 insertions, 0 deletions
diff --git a/src/dev/Serial.py b/src/dev/Serial.py index bbc792b67..7871b487b 100644 --- a/src/dev/Serial.py +++ b/src/dev/Serial.py @@ -42,3 +42,7 @@ class SerialDevice(SimObject): type = 'SerialDevice' abstract = True cxx_header = "dev/serial.hh" + +class SerialNullDevice(SerialDevice): + type = 'SerialNullDevice' + cxx_header = "dev/serial.hh" diff --git a/src/dev/serial.cc b/src/dev/serial.cc index 63e8a382b..68fc94c57 100644 --- a/src/dev/serial.cc +++ b/src/dev/serial.cc @@ -41,6 +41,7 @@ #include "base/misc.hh" #include "params/SerialDevice.hh" +#include "params/SerialNullDevice.hh" SerialDevice::SerialDevice(const SerialDeviceParams *p) : SimObject(p), interfaceCallback(nullptr) @@ -71,3 +72,24 @@ SerialDevice::notifyInterface() interfaceCallback->process(); } + + + +SerialNullDevice::SerialNullDevice(const SerialNullDeviceParams *p) + : SerialDevice(p) +{ +} + +uint8_t +SerialNullDevice::readData() +{ + panic("SerialNullDevice does not have pending data.\n"); +} + + + +SerialNullDevice * +SerialNullDeviceParams::create() +{ + return new SerialNullDevice(this); +} diff --git a/src/dev/serial.hh b/src/dev/serial.hh index 4ea2f5ea8..230ecaa74 100644 --- a/src/dev/serial.hh +++ b/src/dev/serial.hh @@ -44,6 +44,7 @@ #include "sim/sim_object.hh" struct SerialDeviceParams; +struct SerialNullDeviceParams; /** * Base class for serial devices such as terminals. @@ -140,4 +141,18 @@ class SerialDevice : public SimObject Callback *interfaceCallback; }; +/** + * Dummy serial device that discards all data sent to it. + */ +class SerialNullDevice : public SerialDevice +{ + public: + SerialNullDevice(const SerialNullDeviceParams *p); + + public: + bool dataAvailable() const override { return false; } + void writeData(uint8_t c) override {}; + uint8_t readData() override; +}; + #endif // __DEV_SERIAL_HH__ |