Lines Matching refs:dev_data

336 static int alloc_tx_buffer(struct backend_data *dev_data, uint32_t *size,  in alloc_tx_buffer()  argument
339 const struct icbmsg_config *conf = dev_data->conf; in alloc_tx_buffer()
360 r = k_sem_take(&dev_data->block_wait_sem, timeout); in alloc_tx_buffer()
375 k_sem_give(&dev_data->block_wait_sem); in alloc_tx_buffer()
436 static int release_tx_blocks(struct backend_data *dev_data, size_t tx_block_index, in release_tx_blocks() argument
439 const struct icbmsg_config *conf = dev_data->conf; in release_tx_blocks()
482 k_sem_give(&dev_data->block_wait_sem); in release_tx_blocks()
500 static int release_tx_buffer(struct backend_data *dev_data, const uint8_t *buffer, in release_tx_buffer() argument
503 const struct icbmsg_config *conf = dev_data->conf; in release_tx_buffer()
512 return release_tx_blocks(dev_data, tx_block_index, size, new_size); in release_tx_buffer()
520 static int send_control_message(struct backend_data *dev_data, enum msg_type msg_type, in send_control_message() argument
523 const struct icbmsg_config *conf = dev_data->conf; in send_control_message()
532 k_mutex_lock(&dev_data->mutex, K_FOREVER); in send_control_message()
534 r = icmsg_send(&conf->control_config, &dev_data->control_data, &message, in send_control_message()
537 k_mutex_unlock(&dev_data->mutex); in send_control_message()
554 static int send_release(struct backend_data *dev_data, const uint8_t *buffer, in send_release() argument
557 const struct icbmsg_config *conf = dev_data->conf; in send_release()
565 return send_control_message(dev_data, msg_type, ept_addr, rx_block_index); in send_release()
581 static int send_block(struct backend_data *dev_data, enum msg_type msg_type, in send_block() argument
587 block = block_from_index(&dev_data->conf->tx, tx_block_index); in send_block()
593 r = send_control_message(dev_data, msg_type, ept_addr, tx_block_index); in send_block()
595 release_tx_blocks(dev_data, tx_block_index, size, -1); in send_block()
609 static int find_ept_by_name(struct backend_data *dev_data, const char *name) in find_ept_by_name() argument
611 const struct channel_config *rx_conf = &dev_data->conf->rx; in find_ept_by_name()
625 ept = &dev_data->ept[i]; in find_ept_by_name()
646 static int match_bound_msg(struct backend_data *dev_data, size_t rx_block_index, in match_bound_msg() argument
649 const struct icbmsg_config *conf = dev_data->conf; in match_bound_msg()
660 ept_index = find_ept_by_name(dev_data, buffer); in match_bound_msg()
666 ept = &dev_data->ept[ept_index]; in match_bound_msg()
668 dev_data->ept_map[ept->addr] = ept_index; in match_bound_msg()
681 r = send_release(dev_data, buffer, MSG_RELEASE_BOUND, ept_addr); in match_bound_msg()
696 static int send_bound_message(struct backend_data *dev_data, struct ept_data *ept) in send_bound_message() argument
705 r = alloc_tx_buffer(dev_data, &alloc_size, &buffer, K_FOREVER); in send_bound_message()
708 r = send_block(dev_data, MSG_BOUND, ept->addr, r, msg_len); in send_bound_message()
718 static void schedule_ept_bound_process(struct backend_data *dev_data) in schedule_ept_bound_process() argument
720 k_work_submit_to_queue(&ep_bound_work_q, &dev_data->ep_bound_work); in schedule_ept_bound_process()
730 static void ept_bound_process(struct backend_data *dev_data) in ept_bound_process()
734 struct backend_data *dev_data = CONTAINER_OF(item, struct backend_data, in ept_bound_process() local
743 if (!(atomic_get(&dev_data->flags) & CONTROL_BOUNDED)) { in ept_bound_process()
747 if (dev_data->is_initiator) { in ept_bound_process()
750 ept = &dev_data->ept[i]; in ept_bound_process()
754 r = send_bound_message(dev_data, ept); in ept_bound_process()
764 k_mutex_lock(&dev_data->mutex, K_FOREVER); in ept_bound_process()
767 if (dev_data->waiting_bound[i] != WAITING_BOUND_MSG_EMPTY) { in ept_bound_process()
769 k_mutex_unlock(&dev_data->mutex); in ept_bound_process()
771 r = match_bound_msg(dev_data, in ept_bound_process()
772 dev_data->waiting_bound[i], i); in ept_bound_process()
774 k_mutex_lock(&dev_data->mutex, K_FOREVER); in ept_bound_process()
777 dev_data->waiting_bound[i] = in ept_bound_process()
786 k_mutex_unlock(&dev_data->mutex); in ept_bound_process()
792 ept = &dev_data->ept[i]; in ept_bound_process()
808 static struct ept_data *get_ept_and_rx_validate(struct backend_data *dev_data, in get_ept_and_rx_validate() argument
814 if (ept_addr >= NUM_EPT || dev_data->ept_map[ept_addr] >= NUM_EPT) { in get_ept_and_rx_validate()
819 ept = &dev_data->ept[dev_data->ept_map[ept_addr]]; in get_ept_and_rx_validate()
845 static int received_data(struct backend_data *dev_data, size_t rx_block_index, in received_data() argument
848 const struct icbmsg_config *conf = dev_data->conf; in received_data()
856 ept = get_ept_and_rx_validate(dev_data, ept_addr); in received_data()
872 send_release(dev_data, buffer, MSG_RELEASE_DATA, 0); in received_data()
881 static int received_release_data(struct backend_data *dev_data, size_t tx_block_index) in received_release_data() argument
883 const struct icbmsg_config *conf = dev_data->conf; in received_release_data()
896 r = release_tx_blocks(dev_data, tx_block_index, size, -1); in received_release_data()
907 static int received_bound(struct backend_data *dev_data, size_t rx_block_index, in received_bound() argument
910 const struct icbmsg_config *conf = dev_data->conf; in received_bound()
923 k_mutex_lock(&dev_data->mutex, K_FOREVER); in received_bound()
925 dev_data->waiting_bound[ept_addr] = rx_block_index; in received_bound()
927 k_mutex_unlock(&dev_data->mutex); in received_bound()
932 schedule_ept_bound_process(dev_data); in received_bound()
934 ept_bound_process(dev_data); in received_bound()
951 struct backend_data *dev_data = instance->data; in control_received() local
971 r = received_release_data(dev_data, message->block_index); in control_received()
974 r = received_release_data(dev_data, message->block_index); in control_received()
976 ept = get_ept_and_rx_validate(dev_data, ept_addr); in control_received()
983 r = received_bound(dev_data, message->block_index, ept_addr); in control_received()
986 r = received_data(dev_data, message->block_index, ept_addr); in control_received()
1007 struct backend_data *dev_data = instance->data; in control_bound() local
1010 atomic_or(&dev_data->flags, CONTROL_BOUNDED); in control_bound()
1012 schedule_ept_bound_process(dev_data); in control_bound()
1014 ept_bound_process(dev_data); in control_bound()
1024 struct backend_data *dev_data = instance->data; in open() local
1033 dev_data->is_initiator ? 1 : 0); in open()
1047 return icmsg_open(&conf->control_config, &dev_data->control_data, &cb, in open()
1056 struct backend_data *dev_data = instance->data; in send() local
1064 r = alloc_tx_buffer(dev_data, &alloc_size, &buffer, K_NO_WAIT); in send()
1073 r = send_block(dev_data, MSG_DATA, ept->addr, r, len); in send()
1087 struct backend_data *dev_data = instance->data; in register_ept() local
1094 ept = &dev_data->ept[ept_index]; in register_ept()
1102 schedule_ept_bound_process(dev_data); in register_ept()
1104 ept_bound_process(dev_data); in register_ept()
1111 ept_index = atomic_inc(&dev_data->flags) & FLAG_EPT_COUNT_MASK; in register_ept()
1119 ept = &dev_data->ept[ept_index]; in register_ept()
1121 if (dev_data->is_initiator) { in register_ept()
1123 dev_data->ept_map[ept->addr] = ept->addr; in register_ept()
1132 schedule_ept_bound_process(dev_data); in register_ept()
1134 ept_bound_process(dev_data); in register_ept()
1173 struct backend_data *dev_data = instance->data; in get_tx_buffer() local
1176 r = alloc_tx_buffer(dev_data, user_len, (uint8_t **)data, wait); in get_tx_buffer()
1188 struct backend_data *dev_data = instance->data; in drop_tx_buffer() local
1191 r = release_tx_buffer(dev_data, data, -1); in drop_tx_buffer()
1205 struct backend_data *dev_data = instance->data; in send_nocopy() local
1210 r = release_tx_buffer(dev_data, data, len); in send_nocopy()
1212 release_tx_buffer(dev_data, data, -1); in send_nocopy()
1216 return send_block(dev_data, MSG_DATA, ept->addr, r, len); in send_nocopy()
1239 struct backend_data *dev_data = instance->data; in release_rx_buffer() local
1242 r = send_release(dev_data, (uint8_t *)data, MSG_RELEASE_DATA, 0); in release_rx_buffer()
1255 struct backend_data *dev_data = instance->data; in backend_init() local
1276 dev_data->conf = conf; in backend_init()
1277 dev_data->is_initiator = (conf->rx.blocks_ptr < conf->tx.blocks_ptr); in backend_init()
1279 k_mutex_init(&dev_data->mutex); in backend_init()
1280 k_work_init(&dev_data->ep_bound_work, ept_bound_process); in backend_init()
1281 k_sem_init(&dev_data->block_wait_sem, 0, 1); in backend_init()
1283 memset(&dev_data->waiting_bound, 0xFF, sizeof(dev_data->waiting_bound)); in backend_init()
1284 memset(&dev_data->ept_map, EPT_ADDR_INVALID, sizeof(dev_data->ept_map)); in backend_init()