~m-lombardi85/helenos/bbone

« back to all changes in this revision

Viewing changes to uspace/drv/char/omap_uart/omap_uart.c

  • Committer: Maurizio Lombardi
  • Date: 2013-09-11 20:06:35 UTC
  • Revision ID: m.lombardi85@gmail.com-20130911200635-4p9se11fvxgcbv7h
omap_uart: drop old data in case of buffer overflow

Show diffs side-by-side

added added

removed removed

Lines of Context:
622
622
{
623
623
        omap_uart_t *uart = dev_omap_uart(dev);
624
624
 
625
 
        uint32_t recv = (uint32_t) IPC_GET_ARG1(*icall);
 
625
        uint8_t recv = (uint8_t) IPC_GET_ARG1(*icall);
626
626
 
627
 
        omap_uart_putchar(uart, (uint8_t) recv);
 
627
        omap_uart_putchar(uart, recv);
628
628
 
629
629
        fibril_mutex_lock(&uart->mutex);
630
630
 
631
631
        bool const buf_was_empty = buf_is_empty(&uart->buffer);
632
632
 
633
 
        if (!buf_push_back(&uart->buffer, (uint8_t) recv)) {
634
 
                /* Buffer overflow */
635
 
                ddf_msg(LVL_WARN, "buffer overflow on device %s.",
636
 
                    ddf_dev_get_name(dev));
 
633
        if (!buf_push_back(&uart->buffer, recv)) {
 
634
                /* Buffer overflow, drop the oldest data */
 
635
                buf_pop_front(&uart->buffer);
 
636
                /* Must not fail */
 
637
                assert(buf_push_back(&uart->buffer, recv));
637
638
        }
638
639
 
639
640
        if (buf_was_empty)