Lines Matching refs:data

277 	struct cdc_acm_uart_data *data = dev->data;  in usbd_cdc_acm_request()  local
291 atomic_clear_bit(&data->state, CDC_ACM_RX_FIFO_BUSY); in usbd_cdc_acm_request()
295 atomic_clear_bit(&data->state, CDC_ACM_TX_FIFO_BUSY); in usbd_cdc_acm_request()
299 k_sem_reset(&data->notif_sem); in usbd_cdc_acm_request()
309 LOG_HEXDUMP_INF(buf->data, buf->len, ""); in usbd_cdc_acm_request()
310 done = ring_buf_put(data->rx_fifo.rb, buf->data, buf->len); in usbd_cdc_acm_request()
311 if (done && data->cb) { in usbd_cdc_acm_request()
312 cdc_acm_work_submit(&data->irq_cb_work); in usbd_cdc_acm_request()
315 atomic_clear_bit(&data->state, CDC_ACM_RX_FIFO_BUSY); in usbd_cdc_acm_request()
316 cdc_acm_work_submit(&data->rx_fifo_work); in usbd_cdc_acm_request()
321 if (data->cb) { in usbd_cdc_acm_request()
322 cdc_acm_work_submit(&data->irq_cb_work); in usbd_cdc_acm_request()
325 atomic_clear_bit(&data->state, CDC_ACM_TX_FIFO_BUSY); in usbd_cdc_acm_request()
327 if (!ring_buf_is_empty(data->tx_fifo.rb)) { in usbd_cdc_acm_request()
329 cdc_acm_work_schedule(&data->tx_fifo_work, K_NO_WAIT); in usbd_cdc_acm_request()
335 k_sem_give(&data->notif_sem); in usbd_cdc_acm_request()
352 struct cdc_acm_uart_data *data = dev->data; in usbd_cdc_acm_enable() local
354 atomic_set_bit(&data->state, CDC_ACM_CLASS_ENABLED); in usbd_cdc_acm_enable()
357 if (atomic_test_bit(&data->state, CDC_ACM_IRQ_RX_ENABLED)) { in usbd_cdc_acm_enable()
361 if (atomic_test_bit(&data->state, CDC_ACM_IRQ_TX_ENABLED)) { in usbd_cdc_acm_enable()
362 if (ring_buf_space_get(data->tx_fifo.rb)) { in usbd_cdc_acm_enable()
364 cdc_acm_work_submit(&data->irq_cb_work); in usbd_cdc_acm_enable()
367 cdc_acm_work_schedule(&data->tx_fifo_work, K_NO_WAIT); in usbd_cdc_acm_enable()
375 struct cdc_acm_uart_data *data = dev->data; in usbd_cdc_acm_disable() local
377 atomic_clear_bit(&data->state, CDC_ACM_CLASS_ENABLED); in usbd_cdc_acm_disable()
378 atomic_clear_bit(&data->state, CDC_ACM_CLASS_SUSPENDED); in usbd_cdc_acm_disable()
385 struct cdc_acm_uart_data *data = dev->data; in usbd_cdc_acm_suspended() local
388 atomic_set_bit(&data->state, CDC_ACM_CLASS_SUSPENDED); in usbd_cdc_acm_suspended()
394 struct cdc_acm_uart_data *data = dev->data; in usbd_cdc_acm_resumed() local
396 atomic_clear_bit(&data->state, CDC_ACM_CLASS_SUSPENDED); in usbd_cdc_acm_resumed()
412 static void cdc_acm_update_uart_cfg(struct cdc_acm_uart_data *const data) in cdc_acm_update_uart_cfg() argument
414 struct uart_config *const cfg = &data->uart_cfg; in cdc_acm_update_uart_cfg()
416 cfg->baudrate = sys_le32_to_cpu(data->line_coding.dwDTERate); in cdc_acm_update_uart_cfg()
418 switch (data->line_coding.bCharFormat) { in cdc_acm_update_uart_cfg()
431 switch (data->line_coding.bParityType) { in cdc_acm_update_uart_cfg()
450 switch (data->line_coding.bDataBits) { in cdc_acm_update_uart_cfg()
466 cfg->flow_ctrl = data->flow_ctrl ? UART_CFG_FLOW_CTRL_RTS_CTS : in cdc_acm_update_uart_cfg()
470 static void cdc_acm_update_linestate(struct cdc_acm_uart_data *const data) in cdc_acm_update_linestate() argument
472 if (data->line_state & SET_CONTROL_LINE_STATE_RTS) { in cdc_acm_update_linestate()
473 data->line_state_rts = true; in cdc_acm_update_linestate()
475 data->line_state_rts = false; in cdc_acm_update_linestate()
478 if (data->line_state & SET_CONTROL_LINE_STATE_DTR) { in cdc_acm_update_linestate()
479 data->line_state_dtr = true; in cdc_acm_update_linestate()
481 data->line_state_dtr = false; in cdc_acm_update_linestate()
490 struct cdc_acm_uart_data *data = dev->data; in usbd_cdc_acm_cth() local
499 min_len = MIN(sizeof(data->line_coding), setup->wLength); in usbd_cdc_acm_cth()
500 net_buf_add_mem(buf, &data->line_coding, min_len); in usbd_cdc_acm_cth()
518 struct cdc_acm_uart_data *data = dev->data; in usbd_cdc_acm_ctd() local
523 len = sizeof(data->line_coding); in usbd_cdc_acm_ctd()
529 memcpy(&data->line_coding, buf->data, len); in usbd_cdc_acm_ctd()
530 cdc_acm_update_uart_cfg(data); in usbd_cdc_acm_ctd()
535 data->line_state = setup->wValue; in usbd_cdc_acm_ctd()
536 cdc_acm_update_linestate(data); in usbd_cdc_acm_ctd()
581 .data = sys_cpu_to_le16(serial_state), in cdc_acm_send_notification()
583 struct cdc_acm_uart_data *data = dev->data; in cdc_acm_send_notification() local
590 if (!atomic_test_bit(&data->state, CDC_ACM_CLASS_ENABLED)) { in cdc_acm_send_notification()
595 if (atomic_test_bit(&data->state, CDC_ACM_CLASS_SUSPENDED)) { in cdc_acm_send_notification()
613 if (k_sem_take(&data->notif_sem, K_FOREVER) == -EAGAIN) { in cdc_acm_send_notification()
626 struct cdc_acm_uart_data *data; in cdc_acm_tx_fifo_handler() local
633 data = CONTAINER_OF(dwork, struct cdc_acm_uart_data, tx_fifo_work); in cdc_acm_tx_fifo_handler()
634 cfg = data->dev->config; in cdc_acm_tx_fifo_handler()
637 if (!atomic_test_bit(&data->state, CDC_ACM_CLASS_ENABLED)) { in cdc_acm_tx_fifo_handler()
642 if (atomic_test_bit(&data->state, CDC_ACM_CLASS_SUSPENDED)) { in cdc_acm_tx_fifo_handler()
647 if (atomic_test_and_set_bit(&data->state, CDC_ACM_TX_FIFO_BUSY)) { in cdc_acm_tx_fifo_handler()
654 atomic_clear_bit(&data->state, CDC_ACM_TX_FIFO_BUSY); in cdc_acm_tx_fifo_handler()
655 cdc_acm_work_schedule(&data->tx_fifo_work, K_MSEC(1)); in cdc_acm_tx_fifo_handler()
659 len = ring_buf_get(data->tx_fifo.rb, buf->data, buf->size); in cdc_acm_tx_fifo_handler()
662 data->zlp_needed = len != 0 && len % cdc_acm_get_bulk_mps(c_data) == 0; in cdc_acm_tx_fifo_handler()
668 atomic_clear_bit(&data->state, CDC_ACM_TX_FIFO_BUSY); in cdc_acm_tx_fifo_handler()
682 struct cdc_acm_uart_data *data; in cdc_acm_rx_fifo_handler() local
688 data = CONTAINER_OF(work, struct cdc_acm_uart_data, rx_fifo_work); in cdc_acm_rx_fifo_handler()
689 cfg = data->dev->config; in cdc_acm_rx_fifo_handler()
692 if (!atomic_test_bit(&data->state, CDC_ACM_CLASS_ENABLED) || in cdc_acm_rx_fifo_handler()
693 atomic_test_bit(&data->state, CDC_ACM_CLASS_SUSPENDED)) { in cdc_acm_rx_fifo_handler()
698 if (ring_buf_space_get(data->rx_fifo.rb) < cdc_acm_get_bulk_mps(c_data)) { in cdc_acm_rx_fifo_handler()
703 if (atomic_test_and_set_bit(&data->state, CDC_ACM_RX_FIFO_BUSY)) { in cdc_acm_rx_fifo_handler()
726 struct cdc_acm_uart_data *const data = dev->data; in cdc_acm_irq_tx_enable() local
728 atomic_set_bit(&data->state, CDC_ACM_IRQ_TX_ENABLED); in cdc_acm_irq_tx_enable()
730 if (ring_buf_space_get(data->tx_fifo.rb)) { in cdc_acm_irq_tx_enable()
732 cdc_acm_work_submit(&data->irq_cb_work); in cdc_acm_irq_tx_enable()
738 struct cdc_acm_uart_data *const data = dev->data; in cdc_acm_irq_tx_disable() local
740 atomic_clear_bit(&data->state, CDC_ACM_IRQ_TX_ENABLED); in cdc_acm_irq_tx_disable()
745 struct cdc_acm_uart_data *const data = dev->data; in cdc_acm_irq_rx_enable() local
747 atomic_set_bit(&data->state, CDC_ACM_IRQ_RX_ENABLED); in cdc_acm_irq_rx_enable()
750 if (!ring_buf_is_empty(data->rx_fifo.rb)) { in cdc_acm_irq_rx_enable()
752 cdc_acm_work_submit(&data->irq_cb_work); in cdc_acm_irq_rx_enable()
755 if (!atomic_test_bit(&data->state, CDC_ACM_RX_FIFO_BUSY)) { in cdc_acm_irq_rx_enable()
757 cdc_acm_work_submit(&data->rx_fifo_work); in cdc_acm_irq_rx_enable()
763 struct cdc_acm_uart_data *const data = dev->data; in cdc_acm_irq_rx_disable() local
765 atomic_clear_bit(&data->state, CDC_ACM_IRQ_RX_ENABLED); in cdc_acm_irq_rx_disable()
772 struct cdc_acm_uart_data *const data = dev->data; in cdc_acm_fifo_fill() local
783 done = ring_buf_put(data->tx_fifo.rb, tx_data, len); in cdc_acm_fifo_fill()
786 data->tx_fifo.altered = true; in cdc_acm_fifo_fill()
790 dev, len, ring_buf_space_get(data->tx_fifo.rb)); in cdc_acm_fifo_fill()
799 struct cdc_acm_uart_data *const data = dev->data; in cdc_acm_fifo_read() local
803 dev, size, ring_buf_size_get(data->rx_fifo.rb)); in cdc_acm_fifo_read()
811 len = ring_buf_get(data->rx_fifo.rb, rx_data, size); in cdc_acm_fifo_read()
813 data->rx_fifo.altered = true; in cdc_acm_fifo_read()
821 struct cdc_acm_uart_data *const data = dev->data; in cdc_acm_irq_tx_ready() local
824 if (data->tx_fifo.irq) { in cdc_acm_irq_tx_ready()
825 return ring_buf_space_get(data->tx_fifo.rb); in cdc_acm_irq_tx_ready()
837 struct cdc_acm_uart_data *const data = dev->data; in cdc_acm_irq_rx_ready() local
840 if (data->rx_fifo.irq) { in cdc_acm_irq_rx_ready()
854 struct cdc_acm_uart_data *const data = dev->data; in cdc_acm_irq_is_pending() local
857 if (data->tx_fifo.irq || data->rx_fifo.irq) { in cdc_acm_irq_is_pending()
870 struct cdc_acm_uart_data *const data = dev->data; in cdc_acm_irq_update() local
878 if (atomic_test_bit(&data->state, CDC_ACM_IRQ_RX_ENABLED) && in cdc_acm_irq_update()
879 !ring_buf_is_empty(data->rx_fifo.rb)) { in cdc_acm_irq_update()
880 data->rx_fifo.irq = true; in cdc_acm_irq_update()
882 data->rx_fifo.irq = false; in cdc_acm_irq_update()
885 if (atomic_test_bit(&data->state, CDC_ACM_IRQ_TX_ENABLED) && in cdc_acm_irq_update()
886 ring_buf_space_get(data->tx_fifo.rb)) { in cdc_acm_irq_update()
887 data->tx_fifo.irq = true; in cdc_acm_irq_update()
889 data->tx_fifo.irq = false; in cdc_acm_irq_update()
909 struct cdc_acm_uart_data *data; in cdc_acm_irq_cb_handler() local
913 data = CONTAINER_OF(work, struct cdc_acm_uart_data, irq_cb_work); in cdc_acm_irq_cb_handler()
914 cfg = data->dev->config; in cdc_acm_irq_cb_handler()
917 if (data->cb == NULL) { in cdc_acm_irq_cb_handler()
922 data->tx_fifo.altered = false; in cdc_acm_irq_cb_handler()
923 data->rx_fifo.altered = false; in cdc_acm_irq_cb_handler()
924 data->rx_fifo.irq = false; in cdc_acm_irq_cb_handler()
925 data->tx_fifo.irq = false; in cdc_acm_irq_cb_handler()
927 if (atomic_test_bit(&data->state, CDC_ACM_IRQ_RX_ENABLED) || in cdc_acm_irq_cb_handler()
928 atomic_test_bit(&data->state, CDC_ACM_IRQ_TX_ENABLED)) { in cdc_acm_irq_cb_handler()
929 data->cb(usbd_class_get_private(c_data), data->cb_data); in cdc_acm_irq_cb_handler()
932 if (data->rx_fifo.altered) { in cdc_acm_irq_cb_handler()
934 cdc_acm_work_submit(&data->rx_fifo_work); in cdc_acm_irq_cb_handler()
937 if (!atomic_test_bit(&data->state, CDC_ACM_TX_FIFO_BUSY)) { in cdc_acm_irq_cb_handler()
938 if (data->tx_fifo.altered) { in cdc_acm_irq_cb_handler()
940 cdc_acm_work_schedule(&data->tx_fifo_work, K_NO_WAIT); in cdc_acm_irq_cb_handler()
941 } else if (data->zlp_needed) { in cdc_acm_irq_cb_handler()
943 cdc_acm_work_schedule(&data->tx_fifo_work, K_NO_WAIT); in cdc_acm_irq_cb_handler()
947 if (atomic_test_bit(&data->state, CDC_ACM_IRQ_RX_ENABLED) && in cdc_acm_irq_cb_handler()
948 !ring_buf_is_empty(data->rx_fifo.rb)) { in cdc_acm_irq_cb_handler()
950 cdc_acm_work_submit(&data->irq_cb_work); in cdc_acm_irq_cb_handler()
953 if (atomic_test_bit(&data->state, CDC_ACM_IRQ_TX_ENABLED) && in cdc_acm_irq_cb_handler()
954 ring_buf_space_get(data->tx_fifo.rb)) { in cdc_acm_irq_cb_handler()
956 cdc_acm_work_submit(&data->irq_cb_work); in cdc_acm_irq_cb_handler()
964 struct cdc_acm_uart_data *const data = dev->data; in cdc_acm_irq_callback_set() local
966 data->cb = cb; in cdc_acm_irq_callback_set()
967 data->cb_data = cb_data; in cdc_acm_irq_callback_set()
972 struct cdc_acm_uart_data *const data = dev->data; in cdc_acm_poll_in() local
976 if (ring_buf_is_empty(data->rx_fifo.rb)) { in cdc_acm_poll_in()
980 len = ring_buf_get(data->rx_fifo.rb, c, 1); in cdc_acm_poll_in()
982 cdc_acm_work_submit(&data->rx_fifo_work); in cdc_acm_poll_in()
991 struct cdc_acm_uart_data *const data = dev->data; in cdc_acm_poll_out() local
997 wrote = ring_buf_put(data->tx_fifo.rb, &c, 1); in cdc_acm_poll_out()
1004 if (k_is_in_isr() || !data->flow_ctrl) { in cdc_acm_poll_out()
1016 cdc_acm_work_schedule(&data->tx_fifo_work, K_MSEC(1)); in cdc_acm_poll_out()
1023 struct cdc_acm_uart_data *const data = dev->data; in cdc_acm_line_ctrl_set() local
1056 data->serial_state |= flag; in cdc_acm_line_ctrl_set()
1058 data->serial_state &= ~flag; in cdc_acm_line_ctrl_set()
1061 return cdc_acm_send_notification(dev, data->serial_state); in cdc_acm_line_ctrl_set()
1067 struct cdc_acm_uart_data *const data = dev->data; in cdc_acm_line_ctrl_get() local
1071 *val = data->uart_cfg.baudrate; in cdc_acm_line_ctrl_get()
1074 *val = data->line_state_rts; in cdc_acm_line_ctrl_get()
1077 *val = data->line_state_dtr; in cdc_acm_line_ctrl_get()
1089 struct cdc_acm_uart_data *const data = dev->data; in cdc_acm_configure() local
1093 data->flow_ctrl = false; in cdc_acm_configure()
1096 data->flow_ctrl = true; in cdc_acm_configure()
1108 struct cdc_acm_uart_data *const data = dev->data; in cdc_acm_config_get() local
1110 memcpy(cfg, &data->uart_cfg, sizeof(struct uart_config)); in cdc_acm_config_get()
1118 struct cdc_acm_uart_data *const data = dev->data; in usbd_cdc_acm_preinit() local
1120 ring_buf_reset(data->tx_fifo.rb); in usbd_cdc_acm_preinit()
1121 ring_buf_reset(data->rx_fifo.rb); in usbd_cdc_acm_preinit()
1123 k_work_init_delayable(&data->tx_fifo_work, cdc_acm_tx_fifo_handler); in usbd_cdc_acm_preinit()
1124 k_work_init(&data->rx_fifo_work, cdc_acm_rx_fifo_handler); in usbd_cdc_acm_preinit()
1125 k_work_init(&data->irq_cb_work, cdc_acm_irq_cb_handler); in usbd_cdc_acm_preinit()