summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorSean Anderson <sean.anderson@seco.com>2022-04-04 21:17:59 +0300
committerTom Rini <trini@konsulko.com>2022-04-14 22:39:15 +0300
commit679190c41a25592103e711718c93d2655d344713 (patch)
tree89d69f532715c6e61ee5e5f73c71a1458119897c /drivers
parentefa51f2bd641965f91550e1f7eeec14b5746db87 (diff)
downloadu-boot-679190c41a25592103e711718c93d2655d344713.tar.xz
test: serial: Add test for putc/puts
This adds a test to ensure that puts is equivalent to putc called in a loop. We don't verify the contents of the message to avoid having to record console output a second time (though that could be added in the future). The globals are initialized to non-zero values to avoid a warning; in particular, the character count is off-by-one (but we always make relative measurements). Signed-off-by: Sean Anderson <sean.anderson@seco.com> Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/serial/sandbox.c33
1 files changed, 29 insertions, 4 deletions
diff --git a/drivers/serial/sandbox.c b/drivers/serial/sandbox.c
index 50cf2c74a7..e726e19c46 100644
--- a/drivers/serial/sandbox.c
+++ b/drivers/serial/sandbox.c
@@ -23,6 +23,19 @@
DECLARE_GLOBAL_DATA_PTR;
+static size_t _sandbox_serial_written = 1;
+static bool sandbox_serial_enabled = true;
+
+size_t sandbox_serial_written(void)
+{
+ return _sandbox_serial_written;
+}
+
+void sandbox_serial_endisable(bool enabled)
+{
+ sandbox_serial_enabled = enabled;
+}
+
/**
* output_ansi_colour() - Output an ANSI colour code
*
@@ -84,11 +97,14 @@ static int sandbox_serial_putc(struct udevice *dev, const char ch)
{
struct sandbox_serial_priv *priv = dev_get_priv(dev);
- sandbox_print_color(dev);
- os_write(1, &ch, 1);
if (ch == '\n')
priv->start_of_line = true;
+ if (sandbox_serial_enabled) {
+ sandbox_print_color(dev);
+ os_write(1, &ch, 1);
+ }
+ _sandbox_serial_written += 1;
return 0;
}
@@ -96,12 +112,21 @@ static ssize_t sandbox_serial_puts(struct udevice *dev, const char *s,
size_t len)
{
struct sandbox_serial_priv *priv = dev_get_priv(dev);
+ ssize_t ret;
- sandbox_print_color(dev);
if (s[len - 1] == '\n')
priv->start_of_line = true;
- return os_write(1, s, len);
+ if (sandbox_serial_enabled) {
+ sandbox_print_color(dev);
+ ret = os_write(1, s, len);
+ if (ret < 0)
+ return ret;
+ } else {
+ ret = len;
+ }
+ _sandbox_serial_written += ret;
+ return ret;
}
static int sandbox_serial_pending(struct udevice *dev, bool input)