Changeset e9bc927 in mainline for kernel/genarch/src


Ignore:
Timestamp:
2025-04-18T08:22:19Z (3 months ago)
Author:
Jiří Zárevúcky <zarevucky.jiri@…>
Branches:
master
Children:
25fdb2d
Parents:
51949d0
git-author:
Jiří Zárevúcky <zarevucky.jiri@…> (2025-04-18 07:18:03)
git-committer:
Jiří Zárevúcky <zarevucky.jiri@…> (2025-04-18 08:22:19)
Message:

Update forgotten serial implementations

Location:
kernel/genarch/src/drivers
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • kernel/genarch/src/drivers/dsrln/dsrlnout.c

    r51949d0 re9bc927  
    4949} dsrlnout_instance_t;
    5050
    51 static void dsrlnout_putuchar(outdev_t *dev, const char32_t ch)
     51static void dsrlnout_write(outdev_t *dev, const char *s, size_t n)
    5252{
    5353        dsrlnout_instance_t *instance = (dsrlnout_instance_t *) dev->data;
    5454
    55         if ((!instance->parea.mapped) || (console_override)) {
    56                 if (ascii_check(ch))
    57                         pio_write_8(instance->base, ch);
    58                 else
    59                         pio_write_8(instance->base, U_SPECIAL);
     55        if (instance->parea.mapped && !console_override)
     56                return;
     57
     58        const char *top = s + n;
     59        assert(top >= s);
     60
     61        for (; s < top; s++) {
     62                if (*s == '\n')
     63                        pio_write_8(instance->base, '\r');
     64
     65                pio_write_8(instance->base, (uint8_t) *s);
    6066        }
    6167}
    6268
    6369static outdev_operations_t dsrlndev_ops = {
    64         .write = dsrlnout_putuchar,
     70        .write = dsrlnout_write,
    6571        .redraw = NULL,
    6672        .scroll_up = NULL,
  • kernel/genarch/src/drivers/omap/uart.c

    r51949d0 re9bc927  
    4949}
    5050
    51 static void omap_uart_putuchar(outdev_t *dev, char32_t ch)
     51static void omap_uart_write(outdev_t *dev, const char *s, size_t n)
    5252{
    5353        omap_uart_t *uart = dev->data;
    54         if (!ascii_check(ch)) {
    55                 omap_uart_txb(uart, U_SPECIAL);
    56         } else {
    57                 if (ch == '\n')
     54
     55        const char *top = s + n;
     56        assert(top >= s);
     57
     58        for (; s < top; s++) {
     59                if (*s == '\n')
    5860                        omap_uart_txb(uart, '\r');
    59                 omap_uart_txb(uart, ch);
     61
     62                omap_uart_txb(uart, (uint8_t) *s);
    6063        }
    6164}
    6265
    6366static outdev_operations_t omap_uart_ops = {
    64         .write = omap_uart_putuchar,
     67        .write = omap_uart_write,
    6568        .redraw = NULL,
    6669        .scroll_up = NULL,
  • kernel/genarch/src/drivers/s3c24xx/uart.c

    r51949d0 re9bc927  
    4949#include <str.h>
    5050
    51 static void s3c24xx_uart_sendb(outdev_t *dev, uint8_t byte)
     51static void s3c24xx_uart_sendb(s3c24xx_uart_t *uart, uint8_t byte)
    5252{
    53         s3c24xx_uart_t *uart =
    54             (s3c24xx_uart_t *) dev->data;
    55 
    5653        /* Wait for space becoming available in Tx FIFO. */
    5754        while ((pio_read_32(&uart->io->ufstat) & S3C24XX_UFSTAT_TX_FULL) != 0)
     
    6158}
    6259
    63 static void s3c24xx_uart_putuchar(outdev_t *dev, char32_t ch)
     60static void s3c24xx_uart_write(outdev_t *dev, const char *s, size_t n)
    6461{
    65         s3c24xx_uart_t *uart =
    66             (s3c24xx_uart_t *) dev->data;
     62        s3c24xx_uart_t *uart = dev->data;
    6763
    68         if ((!uart->parea.mapped) || (console_override)) {
    69                 if (!ascii_check(ch)) {
    70                         s3c24xx_uart_sendb(dev, U_SPECIAL);
    71                 } else {
    72                         if (ch == '\n')
    73                                 s3c24xx_uart_sendb(dev, (uint8_t) '\r');
    74                         s3c24xx_uart_sendb(dev, (uint8_t) ch);
    75                 }
     64        /* If the userspace owns the console, do not output anything. */
     65        if (uart->parea.mapped && !console_override)
     66                return;
     67
     68        const char *top = s + n;
     69        assert(top >= s);
     70
     71        for (; s < top; s++) {
     72                if (*s == '\n')
     73                        s3c24xx_uart_sendb(uart, '\r');
     74
     75                s3c24xx_uart_sendb(uart, (uint8_t) *s);
    7676        }
    7777}
     
    9494
    9595static outdev_operations_t s3c24xx_uart_ops = {
    96         .write = s3c24xx_uart_putuchar,
     96        .write = s3c24xx_uart_write,
    9797        .redraw = NULL,
    9898        .scroll_up = NULL,
Note: See TracChangeset for help on using the changeset viewer.