Lines Matching full:intent
56 * struct glink_core_rx_intent - RX intent
57 * RX intent
60 * @id: remote or local intent ID
61 * @size: size of the original intent (do not modify)
62 * @reuse: To mark if the intent can be reused after first use
63 * @in_use: To mark if intent is already in use for the channel
91 * @intentless: flag to indicate that there is no intent
147 * @intent_req_lock: Synchronises multiple intent requests
148 * @intent_req_result: Result of intent request
149 * @intent_received: flag indicating that an intent has been received
253 struct glink_core_rx_intent *intent; in qcom_glink_channel_release() local
263 list_for_each_entry_safe(intent, tmp, &channel->done_intents, node) { in qcom_glink_channel_release()
264 if (!intent->reuse) { in qcom_glink_channel_release()
265 kfree(intent->data); in qcom_glink_channel_release()
266 kfree(intent); in qcom_glink_channel_release()
528 struct glink_core_rx_intent *intent, *tmp; in qcom_glink_rx_done_work() local
541 list_for_each_entry_safe(intent, tmp, &channel->done_intents, node) { in qcom_glink_rx_done_work()
542 list_del(&intent->node); in qcom_glink_rx_done_work()
544 iid = intent->id; in qcom_glink_rx_done_work()
545 reuse = intent->reuse; in qcom_glink_rx_done_work()
553 kfree(intent->data); in qcom_glink_rx_done_work()
554 kfree(intent); in qcom_glink_rx_done_work()
563 struct glink_core_rx_intent *intent) in qcom_glink_rx_done() argument
567 kfree(intent->data); in qcom_glink_rx_done()
568 kfree(intent); in qcom_glink_rx_done()
573 if (!intent->reuse) { in qcom_glink_rx_done()
575 idr_remove(&channel->liids, intent->id); in qcom_glink_rx_done()
581 list_add_tail(&intent->node, &channel->done_intents); in qcom_glink_rx_done()
645 * qcom_glink_send_intent_req_ack() - convert an rx intent request ack cmd to
669 * qcom_glink_advertise_intent - convert an rx intent cmd to wire format and
673 * @intent: The intent to pass on to remote.
679 struct glink_core_rx_intent *intent) in qcom_glink_advertise_intent() argument
693 cmd.size = cpu_to_le32(intent->size); in qcom_glink_advertise_intent()
694 cmd.liid = cpu_to_le32(intent->id); in qcom_glink_advertise_intent()
707 struct glink_core_rx_intent *intent; in qcom_glink_alloc_intent() local
711 intent = kzalloc(sizeof(*intent), GFP_KERNEL); in qcom_glink_alloc_intent()
712 if (!intent) in qcom_glink_alloc_intent()
715 intent->data = kzalloc(size, GFP_KERNEL); in qcom_glink_alloc_intent()
716 if (!intent->data) in qcom_glink_alloc_intent()
720 ret = idr_alloc_cyclic(&channel->liids, intent, 1, -1, GFP_ATOMIC); in qcom_glink_alloc_intent()
727 intent->id = ret; in qcom_glink_alloc_intent()
728 intent->size = size; in qcom_glink_alloc_intent()
729 intent->reuse = reuseable; in qcom_glink_alloc_intent()
731 return intent; in qcom_glink_alloc_intent()
734 kfree(intent->data); in qcom_glink_alloc_intent()
736 kfree(intent); in qcom_glink_alloc_intent()
744 struct glink_core_rx_intent *intent; in qcom_glink_handle_rx_done() local
757 intent = idr_find(&channel->riids, iid); in qcom_glink_handle_rx_done()
759 if (!intent) { in qcom_glink_handle_rx_done()
761 dev_err(glink->dev, "invalid intent id received\n"); in qcom_glink_handle_rx_done()
765 intent->in_use = false; in qcom_glink_handle_rx_done()
768 idr_remove(&channel->riids, intent->id); in qcom_glink_handle_rx_done()
769 kfree(intent); in qcom_glink_handle_rx_done()
784 * @size: size of the intent
792 struct glink_core_rx_intent *intent; in qcom_glink_handle_intent_req() local
805 intent = qcom_glink_alloc_intent(glink, channel, size, false); in qcom_glink_handle_intent_req()
806 if (intent) in qcom_glink_handle_intent_req()
807 qcom_glink_advertise_intent(glink, channel, intent); in qcom_glink_handle_intent_req()
809 qcom_glink_send_intent_req_ack(glink, channel, !!intent); in qcom_glink_handle_intent_req()
843 struct glink_core_rx_intent *intent; in qcom_glink_rx_data() local
885 intent = kzalloc(sizeof(*intent), GFP_ATOMIC); in qcom_glink_rx_data()
886 if (!intent) in qcom_glink_rx_data()
889 intent->data = kmalloc(chunk_size + left_size, in qcom_glink_rx_data()
891 if (!intent->data) { in qcom_glink_rx_data()
892 kfree(intent); in qcom_glink_rx_data()
896 intent->id = 0xbabababa; in qcom_glink_rx_data()
897 intent->size = chunk_size + left_size; in qcom_glink_rx_data()
898 intent->offset = 0; in qcom_glink_rx_data()
900 channel->buf = intent; in qcom_glink_rx_data()
902 intent = channel->buf; in qcom_glink_rx_data()
908 intent = idr_find(&channel->liids, liid); in qcom_glink_rx_data()
911 if (!intent) { in qcom_glink_rx_data()
913 "no intent found for channel %s intent %d", in qcom_glink_rx_data()
920 if (intent->size - intent->offset < chunk_size) { in qcom_glink_rx_data()
921 dev_err(glink->dev, "Insufficient space in intent\n"); in qcom_glink_rx_data()
927 qcom_glink_rx_peek(glink, intent->data + intent->offset, in qcom_glink_rx_data()
929 intent->offset += chunk_size; in qcom_glink_rx_data()
936 intent->data, in qcom_glink_rx_data()
937 intent->offset, in qcom_glink_rx_data()
943 intent->offset = 0; in qcom_glink_rx_data()
946 qcom_glink_rx_done(glink, channel, intent); in qcom_glink_rx_data()
960 struct glink_core_rx_intent *intent; in qcom_glink_handle_intent() local
998 intent = kzalloc(sizeof(*intent), GFP_ATOMIC); in qcom_glink_handle_intent()
999 if (!intent) in qcom_glink_handle_intent()
1002 intent->id = le32_to_cpu(msg->intents[i].iid); in qcom_glink_handle_intent()
1003 intent->size = le32_to_cpu(msg->intents[i].size); in qcom_glink_handle_intent()
1006 ret = idr_alloc(&channel->riids, intent, in qcom_glink_handle_intent()
1007 intent->id, intent->id + 1, GFP_ATOMIC); in qcom_glink_handle_intent()
1011 dev_err(glink->dev, "failed to store remote intent\n"); in qcom_glink_handle_intent()
1283 struct glink_core_rx_intent *intent; in qcom_glink_announce_create() local
1305 intent = qcom_glink_alloc_intent(glink, channel, size, in qcom_glink_announce_create()
1307 if (!intent) in qcom_glink_announce_create()
1310 qcom_glink_advertise_intent(glink, channel, intent); in qcom_glink_announce_create()
1364 dev_err(glink->dev, "intent request timed out\n"); in qcom_glink_request_intent()
1381 struct glink_core_rx_intent *intent = NULL; in __qcom_glink_send() local
1395 while (!intent) { in __qcom_glink_send()
1399 if (!intent) in __qcom_glink_send()
1400 intent = tmp; in __qcom_glink_send()
1401 else if (intent->size > tmp->size) in __qcom_glink_send()
1402 intent = tmp; in __qcom_glink_send()
1403 if (intent->size == len) in __qcom_glink_send()
1407 if (intent) in __qcom_glink_send()
1408 intent->in_use = true; in __qcom_glink_send()
1411 /* We found an available intent */ in __qcom_glink_send()
1412 if (intent) in __qcom_glink_send()
1423 iid = intent->id; in __qcom_glink_send()
1439 /* Mark intent available if we failed */ in __qcom_glink_send()
1440 if (intent) in __qcom_glink_send()
1441 intent->in_use = false; in __qcom_glink_send()
1863 /* Abort any senders waiting for intent requests */ in qcom_glink_native_remove()