Lines Matching refs:backend
23 static bool modem_backend_uart_async_is_uart_stopped(struct modem_backend_uart *backend) in modem_backend_uart_async_is_uart_stopped() argument
25 if (!atomic_test_bit(&backend->async.common.state, in modem_backend_uart_async_is_uart_stopped()
27 !atomic_test_bit(&backend->async.common.state, in modem_backend_uart_async_is_uart_stopped()
29 !atomic_test_bit(&backend->async.common.state, in modem_backend_uart_async_is_uart_stopped()
31 !atomic_test_bit(&backend->async.common.state, in modem_backend_uart_async_is_uart_stopped()
39 static bool modem_backend_uart_async_is_open(struct modem_backend_uart *backend) in modem_backend_uart_async_is_open() argument
41 return atomic_test_bit(&backend->async.common.state, in modem_backend_uart_async_is_open()
45 static uint32_t get_receive_buf_length(struct modem_backend_uart *backend) in get_receive_buf_length() argument
47 return ring_buf_size_get(&backend->async.receive_rb); in get_receive_buf_length()
53 struct modem_backend_uart *backend = (struct modem_backend_uart *) user_data; in modem_backend_uart_async_event_handler() local
59 atomic_clear_bit(&backend->async.common.state, in modem_backend_uart_async_event_handler()
61 k_work_submit(&backend->transmit_idle_work); in modem_backend_uart_async_event_handler()
65 if (modem_backend_uart_async_is_open(backend)) { in modem_backend_uart_async_event_handler()
68 atomic_clear_bit(&backend->async.common.state, in modem_backend_uart_async_event_handler()
70 k_work_submit(&backend->transmit_idle_work); in modem_backend_uart_async_event_handler()
75 if (!atomic_test_and_set_bit(&backend->async.common.state, in modem_backend_uart_async_event_handler()
77 uart_rx_buf_rsp(backend->uart, backend->async.receive_bufs[0], in modem_backend_uart_async_event_handler()
78 backend->async.receive_buf_size); in modem_backend_uart_async_event_handler()
83 if (!atomic_test_and_set_bit(&backend->async.common.state, in modem_backend_uart_async_event_handler()
85 uart_rx_buf_rsp(backend->uart, backend->async.receive_bufs[1], in modem_backend_uart_async_event_handler()
86 backend->async.receive_buf_size); in modem_backend_uart_async_event_handler()
95 if (evt->data.rx_buf.buf == backend->async.receive_bufs[0]) { in modem_backend_uart_async_event_handler()
96 atomic_clear_bit(&backend->async.common.state, in modem_backend_uart_async_event_handler()
102 if (evt->data.rx_buf.buf == backend->async.receive_bufs[1]) { in modem_backend_uart_async_event_handler()
103 atomic_clear_bit(&backend->async.common.state, in modem_backend_uart_async_event_handler()
113 key = k_spin_lock(&backend->async.receive_rb_lock); in modem_backend_uart_async_event_handler()
114 received = ring_buf_put(&backend->async.receive_rb, in modem_backend_uart_async_event_handler()
119 const unsigned int buf_size = get_receive_buf_length(backend); in modem_backend_uart_async_event_handler()
121 ring_buf_reset(&backend->async.receive_rb); in modem_backend_uart_async_event_handler()
122 k_spin_unlock(&backend->async.receive_rb_lock, key); in modem_backend_uart_async_event_handler()
129 k_spin_unlock(&backend->async.receive_rb_lock, key); in modem_backend_uart_async_event_handler()
130 k_work_schedule(&backend->receive_ready_work, K_NO_WAIT); in modem_backend_uart_async_event_handler()
134 atomic_clear_bit(&backend->async.common.state, in modem_backend_uart_async_event_handler()
146 if (modem_backend_uart_async_is_uart_stopped(backend)) { in modem_backend_uart_async_event_handler()
147 k_work_submit(&backend->async.common.rx_disabled_work); in modem_backend_uart_async_event_handler()
153 struct modem_backend_uart *backend = (struct modem_backend_uart *)data; in modem_backend_uart_async_open() local
156 atomic_clear(&backend->async.common.state); in modem_backend_uart_async_open()
157 ring_buf_reset(&backend->async.receive_rb); in modem_backend_uart_async_open()
159 atomic_set_bit(&backend->async.common.state, in modem_backend_uart_async_open()
161 atomic_set_bit(&backend->async.common.state, MODEM_BACKEND_UART_ASYNC_STATE_RECEIVING_BIT); in modem_backend_uart_async_open()
162 atomic_set_bit(&backend->async.common.state, MODEM_BACKEND_UART_ASYNC_STATE_OPEN_BIT); in modem_backend_uart_async_open()
167 ret = uart_rx_enable(backend->uart, backend->async.receive_bufs[0], in modem_backend_uart_async_open()
168 backend->async.receive_buf_size, in modem_backend_uart_async_open()
171 atomic_clear(&backend->async.common.state); in modem_backend_uart_async_open()
175 modem_pipe_notify_opened(&backend->pipe); in modem_backend_uart_async_open()
180 static uint32_t get_receive_buf_size(struct modem_backend_uart *backend) in get_receive_buf_size() argument
182 return ring_buf_capacity_get(&backend->async.receive_rb); in get_receive_buf_size()
185 static void advertise_transmit_buf_stats(struct modem_backend_uart *backend, uint32_t length) in advertise_transmit_buf_stats() argument
187 modem_stats_buffer_advertise_length(&backend->transmit_buf_stats, length); in advertise_transmit_buf_stats()
190 static void advertise_receive_buf_stats(struct modem_backend_uart *backend) in advertise_receive_buf_stats() argument
194 length = get_receive_buf_length(backend); in advertise_receive_buf_stats()
195 modem_stats_buffer_advertise_length(&backend->receive_buf_stats, length); in advertise_receive_buf_stats()
199 static uint32_t get_transmit_buf_size(struct modem_backend_uart *backend) in get_transmit_buf_size() argument
201 return backend->async.common.transmit_buf_size; in get_transmit_buf_size()
206 struct modem_backend_uart *backend = (struct modem_backend_uart *)data; in modem_backend_uart_async_transmit() local
211 transmitting = atomic_test_and_set_bit(&backend->async.common.state, in modem_backend_uart_async_transmit()
218 bytes_to_transmit = MIN(size, get_transmit_buf_size(backend)); in modem_backend_uart_async_transmit()
221 memcpy(backend->async.common.transmit_buf, buf, bytes_to_transmit); in modem_backend_uart_async_transmit()
223 ret = uart_tx(backend->uart, backend->async.common.transmit_buf, bytes_to_transmit, in modem_backend_uart_async_transmit()
227 advertise_transmit_buf_stats(backend, bytes_to_transmit); in modem_backend_uart_async_transmit()
241 struct modem_backend_uart *backend = (struct modem_backend_uart *)data; in modem_backend_uart_async_receive() local
246 key = k_spin_lock(&backend->async.receive_rb_lock); in modem_backend_uart_async_receive()
249 advertise_receive_buf_stats(backend); in modem_backend_uart_async_receive()
252 received = ring_buf_get(&backend->async.receive_rb, buf, size); in modem_backend_uart_async_receive()
253 empty = ring_buf_is_empty(&backend->async.receive_rb); in modem_backend_uart_async_receive()
254 k_spin_unlock(&backend->async.receive_rb_lock, key); in modem_backend_uart_async_receive()
257 k_work_schedule(&backend->receive_ready_work, K_NO_WAIT); in modem_backend_uart_async_receive()
265 struct modem_backend_uart *backend = (struct modem_backend_uart *)data; in modem_backend_uart_async_close() local
267 atomic_clear_bit(&backend->async.common.state, MODEM_BACKEND_UART_ASYNC_STATE_OPEN_BIT); in modem_backend_uart_async_close()
268 uart_tx_abort(backend->uart); in modem_backend_uart_async_close()
269 uart_rx_disable(backend->uart); in modem_backend_uart_async_close()
280 bool modem_backend_uart_async_is_supported(struct modem_backend_uart *backend) in modem_backend_uart_async_is_supported() argument
282 return uart_callback_set(backend->uart, modem_backend_uart_async_event_handler, in modem_backend_uart_async_is_supported()
283 backend) == 0; in modem_backend_uart_async_is_supported()
294 struct modem_backend_uart *backend = in modem_backend_uart_async_notify_closed() local
297 modem_pipe_notify_closed(&backend->pipe); in modem_backend_uart_async_notify_closed()
301 static void init_stats(struct modem_backend_uart *backend) in init_stats() argument
307 receive_buf_size = get_receive_buf_size(backend); in init_stats()
308 transmit_buf_size = get_transmit_buf_size(backend); in init_stats()
310 snprintk(name, sizeof(name), "%s_%s", backend->uart->name, "rx"); in init_stats()
311 modem_stats_buffer_init(&backend->receive_buf_stats, name, receive_buf_size); in init_stats()
312 snprintk(name, sizeof(name), "%s_%s", backend->uart->name, "tx"); in init_stats()
313 modem_stats_buffer_init(&backend->transmit_buf_stats, name, transmit_buf_size); in init_stats()
317 int modem_backend_uart_async_init(struct modem_backend_uart *backend, in modem_backend_uart_async_init() argument
323 backend->async.receive_buf_size = receive_buf_size_quarter; in modem_backend_uart_async_init()
324 backend->async.receive_bufs[0] = &config->receive_buf[0]; in modem_backend_uart_async_init()
325 backend->async.receive_bufs[1] = &config->receive_buf[receive_buf_size_quarter]; in modem_backend_uart_async_init()
328 ring_buf_init(&backend->async.receive_rb, (receive_buf_size_quarter * 2), in modem_backend_uart_async_init()
331 backend->async.common.transmit_buf = config->transmit_buf; in modem_backend_uart_async_init()
332 backend->async.common.transmit_buf_size = config->transmit_buf_size; in modem_backend_uart_async_init()
333 k_work_init(&backend->async.common.rx_disabled_work, in modem_backend_uart_async_init()
335 modem_pipe_init(&backend->pipe, backend, &modem_backend_uart_async_api); in modem_backend_uart_async_init()
338 init_stats(backend); in modem_backend_uart_async_init()