Commit 701869fc authored by Tomasz Bursztyka's avatar Tomasz Bursztyka Committed by Carles Cufi
Browse files

uart: Fix uart_irq_callback_user_data_set usage



Now providing the struct device * to the callback.

Fixes #26923

Signed-off-by: default avatarTomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
parent 04d6d0b1
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -243,16 +243,16 @@ static int uart_mux_init(struct device *dev)
 * data from it in uart_mux_rx_work(), we push the data to GSM mux API which
 * will call proper callbacks to pass data to correct recipient.
 */
static void uart_mux_isr(void *user_data)
static void uart_mux_isr(struct device *uart, void *user_data)
{
	struct uart_mux *real_uart = user_data;
	int rx = 0;
	size_t wrote = 0;

	/* Read all data off UART, and send to RX worker for unmuxing */
	while (uart_irq_update(real_uart->uart) &&
	       uart_irq_rx_ready(real_uart->uart)) {
		rx = uart_fifo_read(real_uart->uart, real_uart->rx_buf,
	while (uart_irq_update(uart) &&
	       uart_irq_rx_ready(uart)) {
		rx = uart_fifo_read(uart, real_uart->rx_buf,
				    sizeof(real_uart->rx_buf));
		if (rx <= 0) {
			continue;
+1 −2
Original line number Diff line number Diff line
@@ -784,10 +784,9 @@ static void ppp_uart_flush(struct device *dev)
	}
}

static void ppp_uart_isr(void *user_data)
static void ppp_uart_isr(struct device *uart, void *user_data)
{
	struct ppp_driver_context *context = user_data;
	struct device *uart = context->dev;
	int rx = 0, ret;

	/* get all of the data off UART as fast as we can */
+1 −6
Original line number Diff line number Diff line
@@ -29,17 +29,14 @@ uint8_t buffer0[RING_BUF_SIZE];
uint8_t buffer1[RING_BUF_SIZE];

static struct serial_data {
	struct device *dev;
	struct device *peer;
	struct serial_data *peer_data;
	struct ring_buf ringbuf;
} peers[2];

static void interrupt_handler(void *user_data)
static void interrupt_handler(struct device *dev, void *user_data)
{
	struct serial_data *dev_data = user_data;
	struct device *dev = dev_data->dev;


	while (uart_irq_update(dev) && uart_irq_is_pending(dev)) {
		struct device *peer = dev_data->peer;
@@ -162,12 +159,10 @@ void main(void)
	uart_line_set(dev0);
	uart_line_set(dev1);

	dev_data0->dev = dev0;
	dev_data0->peer = dev1;
	dev_data0->peer_data = dev_data1;
	ring_buf_init(&dev_data0->ringbuf, sizeof(buffer0), buffer0);

	dev_data1->dev = dev1;
	dev_data1->peer = dev0;
	dev_data1->peer_data = dev_data0;
	ring_buf_init(&dev_data1->ringbuf, sizeof(buffer1), buffer1);
+1 −2
Original line number Diff line number Diff line
@@ -12,10 +12,9 @@
static int tty_irq_input_hook(struct tty_serial *tty, uint8_t c);
static int tty_putchar(struct tty_serial *tty, uint8_t c);

static void tty_uart_isr(void *user_data)
static void tty_uart_isr(struct device *dev, void *user_data)
{
	struct tty_serial *tty = user_data;
	struct device *dev = tty->uart_dev;

	uart_irq_update(dev);

+15 −21
Original line number Diff line number Diff line
@@ -49,7 +49,7 @@ static bool is_panic_mode;
static const uint8_t *write_buffer;
static uint16_t write_length;

static void uart_rx_handle(void)
static void uart_rx_handle(struct device *dev)
{
	uint8_t *data;
	uint32_t len;
@@ -61,9 +61,7 @@ static void uart_rx_handle(void)
			ot_uart.rx_ringbuf, &data,
			ot_uart.rx_ringbuf->size);
		if (len > 0) {
			rd_len = uart_fifo_read(
				ot_uart.dev, data, len);

			rd_len = uart_fifo_read(dev, data, len);
			if (rd_len > 0) {
				new_data = true;
			}
@@ -78,8 +76,7 @@ static void uart_rx_handle(void)
			/* No space in the ring buffer - consume byte. */
			LOG_WRN("RX ring buffer full.");

			rd_len = uart_fifo_read(
				ot_uart.dev, &dummy, 1);
			rd_len = uart_fifo_read(dev, &dummy, 1);
		}
	} while (rd_len && (rd_len == len));

@@ -88,36 +85,34 @@ static void uart_rx_handle(void)
	}
}

static void uart_tx_handle(void)
static void uart_tx_handle(struct device *dev)
{
	uint32_t len;

	if (write_length) {
		len = uart_fifo_fill(ot_uart.dev, write_buffer,
				     write_length);
		len = uart_fifo_fill(dev, write_buffer, write_length);
		write_buffer += len;
		write_length -= len;
	} else {
		uart_irq_tx_disable(ot_uart.dev);
		uart_irq_tx_disable(dev);
		ot_uart.tx_busy = 0;
		atomic_set(&(ot_uart.tx_finished), 1);
		otSysEventSignalPending();
	}
}

static void uart_callback(void *user_data)
static void uart_callback(struct device *dev, void *user_data)
{
	ARG_UNUSED(user_data);

	while (uart_irq_update(ot_uart.dev) &&
	       uart_irq_is_pending(ot_uart.dev)) {
	while (uart_irq_update(dev) && uart_irq_is_pending(dev)) {

		if (uart_irq_rx_ready(ot_uart.dev)) {
			uart_rx_handle();
		if (uart_irq_rx_ready(dev)) {
			uart_rx_handle(dev);
		}

		if (uart_irq_tx_ready(ot_uart.dev)) {
			uart_tx_handle();
		if (uart_irq_tx_ready(dev)) {
			uart_tx_handle(dev);
		}
	}
}
@@ -182,8 +177,7 @@ otError otPlatUartEnable(void)
	}
#endif

	uart_irq_callback_user_data_set(
		ot_uart.dev,
	uart_irq_callback_user_data_set(ot_uart.dev,
					uart_callback,
					(void *)&ot_uart);
	uart_irq_rx_enable(ot_uart.dev);
Loading