Lines Matching +full:rx +full:- +full:buffer +full:- +full:config
5 * SPDX-License-Identifier: Apache-2.0
27 struct modem_iface_uart_data *data = iface->iface_data; in iface_uart_async_callback()
32 switch (evt->type) { in iface_uart_async_callback()
34 k_sem_give(&data->tx_sem); in iface_uart_async_callback()
37 /* Allocate next RX buffer for UART driver */ in iface_uart_async_callback()
43 LOG_ERR("RX buffer starvation"); in iface_uart_async_callback()
46 /* Provide the buffer to the UART driver */ in iface_uart_async_callback()
51 k_mem_slab_free(&uart_modem_async_rx_slab, (void *)evt->data.rx_buf.buf); in iface_uart_async_callback()
54 /* Place received data on the ring buffer */ in iface_uart_async_callback()
55 written = ring_buf_put(&data->rx_rb, in iface_uart_async_callback()
56 evt->data.rx.buf + evt->data.rx.offset, in iface_uart_async_callback()
57 evt->data.rx.len); in iface_uart_async_callback()
58 if (written != evt->data.rx.len) { in iface_uart_async_callback()
62 k_sem_give(&data->rx_sem); in iface_uart_async_callback()
67 /* RX stopped (likely due to line error), re-enable it */ in iface_uart_async_callback()
70 LOG_ERR("RX disabled and buffer starvation"); in iface_uart_async_callback()
76 LOG_ERR("Failed to re-enable UART"); in iface_uart_async_callback()
89 if (!iface || !iface->iface_data) { in modem_iface_uart_async_read()
90 return -EINVAL; in modem_iface_uart_async_read()
98 /* Pull data off the ring buffer */ in modem_iface_uart_async_read()
99 data = iface->iface_data; in modem_iface_uart_async_read()
100 *bytes_read = ring_buf_get(&data->rx_rb, buf, size); in modem_iface_uart_async_read()
110 if (!iface || !iface->iface_data) { in modem_iface_uart_async_write()
111 return -EINVAL; in modem_iface_uart_async_write()
119 rc = uart_tx(iface->dev, buf, size, SYS_FOREVER_MS); in modem_iface_uart_async_write()
122 data = iface->iface_data; in modem_iface_uart_async_write()
123 k_sem_take(&data->tx_sem, K_FOREVER); in modem_iface_uart_async_write()
136 return -ENODEV; in modem_iface_uart_init_dev()
143 if (iface->dev) { in modem_iface_uart_init_dev()
144 LOG_WRN("Device %s already inited", iface->dev->name); in modem_iface_uart_init_dev()
145 uart_rx_disable(iface->dev); in modem_iface_uart_init_dev()
148 iface->dev = dev; in modem_iface_uart_init_dev()
149 data = iface->iface_data; in modem_iface_uart_init_dev()
161 LOG_ERR("Failed to enable UART RX"); in modem_iface_uart_init_dev()
167 const struct modem_iface_uart_config *config) in modem_iface_uart_init() argument
171 if (iface == NULL || data == NULL || config == NULL) { in modem_iface_uart_init()
172 return -EINVAL; in modem_iface_uart_init()
175 iface->iface_data = data; in modem_iface_uart_init()
176 iface->read = modem_iface_uart_async_read; in modem_iface_uart_init()
177 iface->write = modem_iface_uart_async_write; in modem_iface_uart_init()
179 ring_buf_init(&data->rx_rb, config->rx_rb_buf_len, config->rx_rb_buf); in modem_iface_uart_init()
180 k_sem_init(&data->rx_sem, 0, 1); in modem_iface_uart_init()
181 k_sem_init(&data->tx_sem, 0, 1); in modem_iface_uart_init()
184 data->hw_flow_control = config->hw_flow_control; in modem_iface_uart_init()
187 ret = modem_iface_uart_init_dev(iface, config->dev); in modem_iface_uart_init()
189 iface->iface_data = NULL; in modem_iface_uart_init()
190 iface->read = NULL; in modem_iface_uart_init()
191 iface->write = NULL; in modem_iface_uart_init()