Lines Matching refs:dev_data
64 struct icmsg_data_t *dev_data) in mbox_deinit() argument
79 (void)k_work_cancel(&dev_data->mbox_work); in mbox_deinit()
90 static inline int reserve_tx_buffer_if_unused(struct icmsg_data_t *dev_data) in reserve_tx_buffer_if_unused() argument
93 return k_mutex_lock(&dev_data->tx_lock, SHMEM_ACCESS_TO); in reserve_tx_buffer_if_unused()
99 static inline int release_tx_buffer(struct icmsg_data_t *dev_data) in release_tx_buffer() argument
102 return k_mutex_unlock(&dev_data->tx_lock); in release_tx_buffer()
108 static uint32_t data_available(struct icmsg_data_t *dev_data) in data_available() argument
110 return pbuf_read(dev_data->rx_pb, NULL, 0); in data_available()
114 static void submit_mbox_work(struct icmsg_data_t *dev_data) in submit_mbox_work() argument
116 if (k_work_submit_to_queue(workq, &dev_data->mbox_work) < 0) { in submit_mbox_work()
126 static int initialize_tx_with_sid_disabled(struct icmsg_data_t *dev_data) in initialize_tx_with_sid_disabled() argument
130 ret = pbuf_tx_init(dev_data->tx_pb); in initialize_tx_with_sid_disabled()
137 ret = pbuf_write(dev_data->tx_pb, magic, sizeof(magic)); in initialize_tx_with_sid_disabled()
152 static bool callback_process(struct icmsg_data_t *dev_data) in callback_process() argument
160 atomic_t state = atomic_get(&dev_data->state); in callback_process()
170 ret = pbuf_get_initial_buf(dev_data->rx_pb, &magic_buf, &magic_len); in callback_process()
177 ret = initialize_tx_with_sid_disabled(dev_data); in callback_process()
179 if (dev_data->cb->error) { in callback_process()
180 dev_data->cb->error("Incorrect Tx configuration", in callback_process()
181 dev_data->ctx); in callback_process()
184 atomic_set(&dev_data->state, ICMSG_STATE_OFF); in callback_process()
190 atomic_set(&dev_data->state, ICMSG_STATE_INITIALIZING_SID_DISABLED); in callback_process()
202 uint32_t tx_handshake = pbuf_handshake_read(dev_data->tx_pb); in callback_process()
206 if (remote_sid_req != dev_data->remote_sid && remote_sid_req != SID_DISCONNECTED) { in callback_process()
213 ret = pbuf_tx_init(dev_data->tx_pb); in callback_process()
215 if (dev_data->cb->error) { in callback_process()
216 dev_data->cb->error("Incorrect Tx configuration", in callback_process()
217 dev_data->ctx); in callback_process()
220 atomic_set(&dev_data->state, ICMSG_STATE_DISCONNECTED); in callback_process()
224 dev_data->remote_sid = remote_sid_req; in callback_process()
225 pbuf_handshake_write(dev_data->rx_pb, in callback_process()
226 MAKE_RX_HANDSHAKE(dev_data->local_sid, dev_data->remote_sid)); in callback_process()
230 if (local_sid_ack == dev_data->local_sid && in callback_process()
231 dev_data->remote_sid != SID_DISCONNECTED) { in callback_process()
235 atomic_set(&dev_data->state, ICMSG_STATE_CONNECTED_SID_ENABLED); in callback_process()
237 if (dev_data->cb->bound) { in callback_process()
238 dev_data->cb->bound(dev_data->ctx); in callback_process()
259 len_available = data_available(dev_data); in callback_process()
262 len = pbuf_read(dev_data->rx_pb, rx_buffer, sizeof(rx_buffer)); in callback_process()
271 pbuf_handshake_read(dev_data->tx_pb)); in callback_process()
273 if (remote_sid_req != dev_data->remote_sid) { in callback_process()
274 atomic_set(&dev_data->state, ICMSG_STATE_DISCONNECTED); in callback_process()
275 if (dev_data->cb->unbound) { in callback_process()
276 dev_data->cb->unbound(dev_data->ctx); in callback_process()
294 if (dev_data->cb->received) { in callback_process()
295 dev_data->cb->received(rx_buffer, len, dev_data->ctx); in callback_process()
309 if (dev_data->cb->bound) { in callback_process()
310 dev_data->cb->bound(dev_data->ctx); in callback_process()
313 atomic_set(&dev_data->state, ICMSG_STATE_CONNECTED_SID_DISABLED); in callback_process()
317 rerun = (data_available(dev_data) > 0); in callback_process()
328 (void)mbox_send_dt(&dev_data->cfg->mbox_tx, NULL); in callback_process()
338 struct icmsg_data_t *dev_data = CONTAINER_OF(item, struct icmsg_data_t, mbox_work); in workq_callback_process() local
340 rerun = callback_process(dev_data); in workq_callback_process()
342 submit_mbox_work(dev_data); in workq_callback_process()
351 struct icmsg_data_t *dev_data = user_data; in mbox_callback() local
355 submit_mbox_work(dev_data); in mbox_callback()
358 rerun = callback_process(dev_data); in mbox_callback()
364 struct icmsg_data_t *dev_data) in mbox_init() argument
369 k_work_init(&dev_data->mbox_work, workq_callback_process); in mbox_init()
372 err = mbox_register_callback_dt(&conf->mbox_rx, mbox_callback, dev_data); in mbox_init()
381 struct icmsg_data_t *dev_data, in icmsg_open() argument
396 if (!atomic_cas(&dev_data->state, ICMSG_STATE_OFF, in icmsg_open()
404 old_state = atomic_set(&dev_data->state, conf->unbound_mode); in icmsg_open()
407 dev_data->cb = cb; in icmsg_open()
408 dev_data->ctx = ctx; in icmsg_open()
409 dev_data->cfg = conf; in icmsg_open()
412 k_mutex_init(&dev_data->tx_lock); in icmsg_open()
416 pbuf_native_addr_remap(dev_data->tx_pb); in icmsg_open()
419 ret = pbuf_rx_init(dev_data->rx_pb); in icmsg_open()
430 LOCAL_SID_ACK_FROM_TX(pbuf_handshake_read(dev_data->tx_pb)); in icmsg_open()
431 dev_data->local_sid = in icmsg_open()
432 LOCAL_SID_REQ_FROM_RX(pbuf_handshake_read(dev_data->tx_pb)); in icmsg_open()
433 dev_data->remote_sid = SID_DISCONNECTED; in icmsg_open()
435 dev_data->local_sid = (dev_data->local_sid + 1) & 0xFFFF; in icmsg_open()
436 } while (dev_data->local_sid == local_sid_ack || in icmsg_open()
437 dev_data->local_sid == SID_DISCONNECTED); in icmsg_open()
439 pbuf_handshake_write(dev_data->rx_pb, in icmsg_open()
440 MAKE_RX_HANDSHAKE(dev_data->local_sid, SID_DISCONNECTED)); in icmsg_open()
442 ret = initialize_tx_with_sid_disabled(dev_data); in icmsg_open()
452 ret = mbox_init(conf, dev_data); in icmsg_open()
473 atomic_set(&dev_data->state, ICMSG_STATE_OFF); in icmsg_open()
478 struct icmsg_data_t *dev_data) in icmsg_close() argument
485 pbuf_handshake_write(dev_data->rx_pb, in icmsg_close()
491 old_state = atomic_set(&dev_data->state, ICMSG_STATE_OFF); in icmsg_close()
494 ret = mbox_deinit(conf, dev_data); in icmsg_close()
501 struct icmsg_data_t *dev_data, in icmsg_send() argument
508 uint32_t state = atomic_get(&dev_data->state); in icmsg_send()
522 ret = reserve_tx_buffer_if_unused(dev_data); in icmsg_send()
527 write_ret = pbuf_write(dev_data->tx_pb, msg, len); in icmsg_send()
529 release_ret = release_tx_buffer(dev_data); in icmsg_send()