Lines Matching refs:dev_data

138 	struct uart_sam0_dev_data *const dev_data =  in uart_sam0_dma_tx_done()  local
140 const struct uart_sam0_dev_cfg *const cfg = dev_data->cfg; in uart_sam0_dma_tx_done()
147 static int uart_sam0_tx_halt(struct uart_sam0_dev_data *dev_data) in uart_sam0_tx_halt() argument
149 const struct uart_sam0_dev_cfg *const cfg = dev_data->cfg; in uart_sam0_tx_halt()
151 size_t tx_active = dev_data->tx_len; in uart_sam0_tx_halt()
157 .buf = dev_data->tx_buf, in uart_sam0_tx_halt()
162 dev_data->tx_buf = NULL; in uart_sam0_tx_halt()
163 dev_data->tx_len = 0U; in uart_sam0_tx_halt()
174 if (dev_data->async_cb) { in uart_sam0_tx_halt()
175 dev_data->async_cb(dev_data->dev, in uart_sam0_tx_halt()
176 &evt, dev_data->async_cb_data); in uart_sam0_tx_halt()
188 struct uart_sam0_dev_data *dev_data = CONTAINER_OF(dwork, in uart_sam0_tx_timeout() local
191 uart_sam0_tx_halt(dev_data); in uart_sam0_tx_timeout()
194 static void uart_sam0_notify_rx_processed(struct uart_sam0_dev_data *dev_data, in uart_sam0_notify_rx_processed() argument
197 if (!dev_data->async_cb) { in uart_sam0_notify_rx_processed()
201 if (dev_data->rx_processed_len == processed) { in uart_sam0_notify_rx_processed()
208 .buf = dev_data->rx_buf, in uart_sam0_notify_rx_processed()
209 .offset = dev_data->rx_processed_len, in uart_sam0_notify_rx_processed()
210 .len = processed - dev_data->rx_processed_len, in uart_sam0_notify_rx_processed()
214 dev_data->rx_processed_len = processed; in uart_sam0_notify_rx_processed()
216 dev_data->async_cb(dev_data->dev, in uart_sam0_notify_rx_processed()
217 &evt, dev_data->async_cb_data); in uart_sam0_notify_rx_processed()
227 struct uart_sam0_dev_data *const dev_data = in uart_sam0_dma_rx_done() local
229 const struct device *dev = dev_data->dev; in uart_sam0_dma_rx_done()
230 const struct uart_sam0_dev_cfg *const cfg = dev_data->cfg; in uart_sam0_dma_rx_done()
234 if (dev_data->rx_len == 0U) { in uart_sam0_dma_rx_done()
239 uart_sam0_notify_rx_processed(dev_data, dev_data->rx_len); in uart_sam0_dma_rx_done()
241 if (dev_data->async_cb) { in uart_sam0_dma_rx_done()
245 .buf = dev_data->rx_buf, in uart_sam0_dma_rx_done()
249 dev_data->async_cb(dev, &evt, dev_data->async_cb_data); in uart_sam0_dma_rx_done()
253 if (!dev_data->rx_next_len) { in uart_sam0_dma_rx_done()
254 dev_data->rx_buf = NULL; in uart_sam0_dma_rx_done()
255 dev_data->rx_len = 0U; in uart_sam0_dma_rx_done()
257 if (dev_data->async_cb) { in uart_sam0_dma_rx_done()
262 dev_data->async_cb(dev, &evt, dev_data->async_cb_data); in uart_sam0_dma_rx_done()
269 dev_data->rx_buf = dev_data->rx_next_buf; in uart_sam0_dma_rx_done()
270 dev_data->rx_len = dev_data->rx_next_len; in uart_sam0_dma_rx_done()
271 dev_data->rx_next_buf = NULL; in uart_sam0_dma_rx_done()
272 dev_data->rx_next_len = 0U; in uart_sam0_dma_rx_done()
273 dev_data->rx_processed_len = 0U; in uart_sam0_dma_rx_done()
277 (uint32_t)dev_data->rx_buf, dev_data->rx_len); in uart_sam0_dma_rx_done()
285 if (dev_data->rx_timeout_time != SYS_FOREVER_US) { in uart_sam0_dma_rx_done()
286 dev_data->rx_waiting_for_irq = true; in uart_sam0_dma_rx_done()
299 dev_data->async_cb(dev, &evt, dev_data->async_cb_data); in uart_sam0_dma_rx_done()
307 struct uart_sam0_dev_data *dev_data = CONTAINER_OF(dwork, in uart_sam0_rx_timeout() local
309 const struct uart_sam0_dev_cfg *const cfg = dev_data->cfg; in uart_sam0_rx_timeout()
314 if (dev_data->rx_len == 0U) { in uart_sam0_rx_timeout()
333 uint8_t *rx_dma_start = dev_data->rx_buf + dev_data->rx_len - in uart_sam0_rx_timeout()
335 size_t rx_processed = rx_dma_start - dev_data->rx_buf; in uart_sam0_rx_timeout()
344 dev_data->rx_len - rx_processed); in uart_sam0_rx_timeout()
346 dev_data->rx_waiting_for_irq = true; in uart_sam0_rx_timeout()
356 if (dev_data->rx_timeout_from_isr) { in uart_sam0_rx_timeout()
357 dev_data->rx_timeout_from_isr = false; in uart_sam0_rx_timeout()
358 k_work_reschedule(&dev_data->rx_timeout_work, in uart_sam0_rx_timeout()
359 K_USEC(dev_data->rx_timeout_chunk)); in uart_sam0_rx_timeout()
365 uint32_t elapsed = now - dev_data->rx_timeout_start; in uart_sam0_rx_timeout()
367 if (elapsed >= dev_data->rx_timeout_time) { in uart_sam0_rx_timeout()
372 uart_sam0_notify_rx_processed(dev_data, rx_processed); in uart_sam0_rx_timeout()
377 uint32_t remaining = MIN(dev_data->rx_timeout_time - elapsed, in uart_sam0_rx_timeout()
378 dev_data->rx_timeout_chunk); in uart_sam0_rx_timeout()
380 k_work_reschedule(&dev_data->rx_timeout_work, in uart_sam0_rx_timeout()
396 struct uart_sam0_dev_data *const dev_data = dev->data; in uart_sam0_configure() local
411 dev_data->config_cache.flow_ctrl = new_cfg->flow_ctrl; in uart_sam0_configure()
432 dev_data->config_cache.parity = new_cfg->parity; in uart_sam0_configure()
445 dev_data->config_cache.stop_bits = new_cfg->stop_bits; in uart_sam0_configure()
467 dev_data->config_cache.data_bits = new_cfg->data_bits; in uart_sam0_configure()
485 dev_data->config_cache.baudrate = new_cfg->baudrate; in uart_sam0_configure()
496 struct uart_sam0_dev_data *const dev_data = dev->data; in uart_sam0_config_get() local
498 memcpy(out_cfg, &(dev_data->config_cache), in uart_sam0_config_get()
499 sizeof(dev_data->config_cache)); in uart_sam0_config_get()
509 struct uart_sam0_dev_data *const dev_data = dev->data; in uart_sam0_init() local
547 dev_data->config_cache.flow_ctrl = UART_CFG_FLOW_CTRL_NONE; in uart_sam0_init()
548 dev_data->config_cache.parity = UART_CFG_PARITY_NONE; in uart_sam0_init()
549 dev_data->config_cache.stop_bits = UART_CFG_STOP_BITS_1; in uart_sam0_init()
550 dev_data->config_cache.data_bits = UART_CFG_DATA_BITS_8; in uart_sam0_init()
562 dev_data->config_cache.baudrate = cfg->baudrate; in uart_sam0_init()
569 dev_data->dev = dev; in uart_sam0_init()
570 dev_data->cfg = cfg; in uart_sam0_init()
575 k_work_init_delayable(&dev_data->tx_timeout_work, uart_sam0_tx_timeout); in uart_sam0_init()
576 k_work_init_delayable(&dev_data->rx_timeout_work, uart_sam0_rx_timeout); in uart_sam0_init()
585 dma_cfg.user_data = dev_data; in uart_sam0_init()
609 dma_cfg.user_data = dev_data; in uart_sam0_init()
708 struct uart_sam0_dev_data *const dev_data = dev->data; in uart_sam0_isr() local
711 if (dev_data->cb) { in uart_sam0_isr()
712 dev_data->cb(dev, dev_data->cb_data); in uart_sam0_isr()
720 if (dev_data->tx_len && regs->INTFLAG.bit.TXC) { in uart_sam0_isr()
723 k_work_cancel_delayable(&dev_data->tx_timeout_work); in uart_sam0_isr()
730 .buf = dev_data->tx_buf, in uart_sam0_isr()
731 .len = dev_data->tx_len, in uart_sam0_isr()
735 dev_data->tx_buf = NULL; in uart_sam0_isr()
736 dev_data->tx_len = 0U; in uart_sam0_isr()
738 if (evt.data.tx.len != 0U && dev_data->async_cb) { in uart_sam0_isr()
739 dev_data->async_cb(dev, &evt, dev_data->async_cb_data); in uart_sam0_isr()
745 if (dev_data->rx_len && regs->INTFLAG.bit.RXC && in uart_sam0_isr()
746 dev_data->rx_waiting_for_irq) { in uart_sam0_isr()
747 dev_data->rx_waiting_for_irq = false; in uart_sam0_isr()
751 if (dev_data->rx_next_len == 0U && dev_data->async_cb) { in uart_sam0_isr()
756 dev_data->async_cb(dev, &evt, dev_data->async_cb_data); in uart_sam0_isr()
763 if (dev_data->rx_timeout_time != SYS_FOREVER_US) { in uart_sam0_isr()
764 dev_data->rx_timeout_from_isr = true; in uart_sam0_isr()
765 dev_data->rx_timeout_start = USEC_PER_MSEC * k_uptime_get_32(); in uart_sam0_isr()
766 k_work_reschedule(&dev_data->rx_timeout_work, in uart_sam0_isr()
767 K_USEC(dev_data->rx_timeout_chunk)); in uart_sam0_isr()
823 struct uart_sam0_dev_data *const dev_data = dev->data; in uart_sam0_irq_tx_complete() local
826 return (dev_data->txc_cache != 0) && (regs->INTENSET.bit.TXC != 0); in uart_sam0_irq_tx_complete()
912 struct uart_sam0_dev_data *const dev_data = dev->data; in uart_sam0_irq_update() local
914 dev_data->txc_cache = regs->INTFLAG.bit.TXC; in uart_sam0_irq_update()
919 | (dev_data->txc_cache << SERCOM_USART_INTENCLR_TXC_Pos); in uart_sam0_irq_update()
930 struct uart_sam0_dev_data *const dev_data = dev->data; in uart_sam0_irq_callback_set() local
932 dev_data->cb = cb; in uart_sam0_irq_callback_set()
933 dev_data->cb_data = cb_data; in uart_sam0_irq_callback_set()
936 dev_data->async_cb = NULL; in uart_sam0_irq_callback_set()
937 dev_data->async_cb_data = NULL; in uart_sam0_irq_callback_set()
948 struct uart_sam0_dev_data *const dev_data = dev->data; in uart_sam0_callback_set() local
950 dev_data->async_cb = callback; in uart_sam0_callback_set()
951 dev_data->async_cb_data = user_data; in uart_sam0_callback_set()
954 dev_data->cb = NULL; in uart_sam0_callback_set()
955 dev_data->cb_data = NULL; in uart_sam0_callback_set()
965 struct uart_sam0_dev_data *const dev_data = dev->data; in uart_sam0_tx() local
980 if (dev_data->tx_len != 0U) { in uart_sam0_tx()
985 dev_data->tx_buf = buf; in uart_sam0_tx()
986 dev_data->tx_len = len; in uart_sam0_tx()
997 k_work_reschedule(&dev_data->tx_timeout_work, in uart_sam0_tx()
1009 struct uart_sam0_dev_data *const dev_data = dev->data; in uart_sam0_tx_abort() local
1016 k_work_cancel_delayable(&dev_data->tx_timeout_work); in uart_sam0_tx_abort()
1018 return uart_sam0_tx_halt(dev_data); in uart_sam0_tx_abort()
1025 struct uart_sam0_dev_data *const dev_data = dev->data; in uart_sam0_rx_enable() local
1040 if (dev_data->rx_len != 0U) { in uart_sam0_rx_enable()
1059 dev_data->rx_buf = buf; in uart_sam0_rx_enable()
1060 dev_data->rx_len = len; in uart_sam0_rx_enable()
1061 dev_data->rx_processed_len = 0U; in uart_sam0_rx_enable()
1062 dev_data->rx_waiting_for_irq = true; in uart_sam0_rx_enable()
1063 dev_data->rx_timeout_from_isr = true; in uart_sam0_rx_enable()
1064 dev_data->rx_timeout_time = timeout; in uart_sam0_rx_enable()
1065 dev_data->rx_timeout_chunk = MAX(timeout / 4U, 1); in uart_sam0_rx_enable()
1084 struct uart_sam0_dev_data *const dev_data = dev->data; in uart_sam0_rx_buf_rsp() local
1088 if (dev_data->rx_len == 0U) { in uart_sam0_rx_buf_rsp()
1093 if (dev_data->rx_next_len != 0U) { in uart_sam0_rx_buf_rsp()
1098 dev_data->rx_next_buf = buf; in uart_sam0_rx_buf_rsp()
1099 dev_data->rx_next_len = len; in uart_sam0_rx_buf_rsp()
1111 struct uart_sam0_dev_data *const dev_data = dev->data; in uart_sam0_rx_disable() local
1116 k_work_cancel_delayable(&dev_data->rx_timeout_work); in uart_sam0_rx_disable()
1120 if (dev_data->rx_len == 0U) { in uart_sam0_rx_disable()
1131 size_t rx_processed = dev_data->rx_len - st.pending_length; in uart_sam0_rx_disable()
1133 uart_sam0_notify_rx_processed(dev_data, rx_processed); in uart_sam0_rx_disable()
1139 .buf = dev_data->rx_buf, in uart_sam0_rx_disable()
1143 dev_data->rx_buf = NULL; in uart_sam0_rx_disable()
1144 dev_data->rx_len = 0U; in uart_sam0_rx_disable()
1146 if (dev_data->async_cb) { in uart_sam0_rx_disable()
1147 dev_data->async_cb(dev, &evt, dev_data->async_cb_data); in uart_sam0_rx_disable()
1150 if (dev_data->rx_next_len) { in uart_sam0_rx_disable()
1154 .buf = dev_data->rx_next_buf, in uart_sam0_rx_disable()
1158 dev_data->rx_next_buf = NULL; in uart_sam0_rx_disable()
1159 dev_data->rx_next_len = 0U; in uart_sam0_rx_disable()
1161 if (dev_data->async_cb) { in uart_sam0_rx_disable()
1162 dev_data->async_cb(dev, &next_evt, dev_data->async_cb_data); in uart_sam0_rx_disable()
1167 if (dev_data->async_cb) { in uart_sam0_rx_disable()
1168 dev_data->async_cb(dev, &evt, dev_data->async_cb_data); in uart_sam0_rx_disable()