Lines Matching refs:glink

158 	struct qcom_glink *glink;  member
209 static struct glink_channel *qcom_glink_alloc_channel(struct qcom_glink *glink, in qcom_glink_alloc_channel() argument
223 channel->glink = glink; in qcom_glink_alloc_channel()
276 static size_t qcom_glink_rx_avail(struct qcom_glink *glink) in qcom_glink_rx_avail() argument
278 return glink->rx_pipe->avail(glink->rx_pipe); in qcom_glink_rx_avail()
281 static void qcom_glink_rx_peak(struct qcom_glink *glink, in qcom_glink_rx_peak() argument
284 glink->rx_pipe->peak(glink->rx_pipe, data, offset, count); in qcom_glink_rx_peak()
287 static void qcom_glink_rx_advance(struct qcom_glink *glink, size_t count) in qcom_glink_rx_advance() argument
289 glink->rx_pipe->advance(glink->rx_pipe, count); in qcom_glink_rx_advance()
292 static size_t qcom_glink_tx_avail(struct qcom_glink *glink) in qcom_glink_tx_avail() argument
294 return glink->tx_pipe->avail(glink->tx_pipe); in qcom_glink_tx_avail()
297 static void qcom_glink_tx_write(struct qcom_glink *glink, in qcom_glink_tx_write() argument
301 glink->tx_pipe->write(glink->tx_pipe, hdr, hlen, data, dlen); in qcom_glink_tx_write()
304 static int qcom_glink_tx(struct qcom_glink *glink, in qcom_glink_tx() argument
313 if (tlen >= glink->tx_pipe->length) in qcom_glink_tx()
316 spin_lock_irqsave(&glink->tx_lock, flags); in qcom_glink_tx()
318 while (qcom_glink_tx_avail(glink) < tlen) { in qcom_glink_tx()
325 spin_unlock_irqrestore(&glink->tx_lock, flags); in qcom_glink_tx()
329 spin_lock_irqsave(&glink->tx_lock, flags); in qcom_glink_tx()
332 qcom_glink_tx_write(glink, hdr, hlen, data, dlen); in qcom_glink_tx()
334 mbox_send_message(glink->mbox_chan, NULL); in qcom_glink_tx()
335 mbox_client_txdone(glink->mbox_chan, 0); in qcom_glink_tx()
338 spin_unlock_irqrestore(&glink->tx_lock, flags); in qcom_glink_tx()
343 static int qcom_glink_send_version(struct qcom_glink *glink) in qcom_glink_send_version() argument
349 msg.param2 = cpu_to_le32(glink->features); in qcom_glink_send_version()
351 return qcom_glink_tx(glink, &msg, sizeof(msg), NULL, 0, true); in qcom_glink_send_version()
354 static void qcom_glink_send_version_ack(struct qcom_glink *glink) in qcom_glink_send_version_ack() argument
360 msg.param2 = cpu_to_le32(glink->features); in qcom_glink_send_version_ack()
362 qcom_glink_tx(glink, &msg, sizeof(msg), NULL, 0, true); in qcom_glink_send_version_ack()
365 static void qcom_glink_send_open_ack(struct qcom_glink *glink, in qcom_glink_send_open_ack() argument
374 qcom_glink_tx(glink, &msg, sizeof(msg), NULL, 0, true); in qcom_glink_send_open_ack()
377 static void qcom_glink_handle_intent_req_ack(struct qcom_glink *glink, in qcom_glink_handle_intent_req_ack() argument
383 spin_lock_irqsave(&glink->idr_lock, flags); in qcom_glink_handle_intent_req_ack()
384 channel = idr_find(&glink->rcids, cid); in qcom_glink_handle_intent_req_ack()
385 spin_unlock_irqrestore(&glink->idr_lock, flags); in qcom_glink_handle_intent_req_ack()
387 dev_err(glink->dev, "unable to find channel\n"); in qcom_glink_handle_intent_req_ack()
405 static int qcom_glink_send_open_req(struct qcom_glink *glink, in qcom_glink_send_open_req() argument
419 spin_lock_irqsave(&glink->idr_lock, flags); in qcom_glink_send_open_req()
420 ret = idr_alloc_cyclic(&glink->lcids, channel, in qcom_glink_send_open_req()
423 spin_unlock_irqrestore(&glink->idr_lock, flags); in qcom_glink_send_open_req()
434 ret = qcom_glink_tx(glink, &req, req_len, NULL, 0, true); in qcom_glink_send_open_req()
441 spin_lock_irqsave(&glink->idr_lock, flags); in qcom_glink_send_open_req()
442 idr_remove(&glink->lcids, channel->lcid); in qcom_glink_send_open_req()
444 spin_unlock_irqrestore(&glink->idr_lock, flags); in qcom_glink_send_open_req()
449 static void qcom_glink_send_close_req(struct qcom_glink *glink, in qcom_glink_send_close_req() argument
458 qcom_glink_tx(glink, &req, sizeof(req), NULL, 0, true); in qcom_glink_send_close_req()
461 static void qcom_glink_send_close_ack(struct qcom_glink *glink, in qcom_glink_send_close_ack() argument
470 qcom_glink_tx(glink, &req, sizeof(req), NULL, 0, true); in qcom_glink_send_close_ack()
477 struct qcom_glink *glink = channel->glink; in qcom_glink_rx_done_work() local
501 qcom_glink_tx(glink, &cmd, sizeof(cmd), NULL, 0, true); in qcom_glink_rx_done_work()
511 static void qcom_glink_rx_done(struct qcom_glink *glink, in qcom_glink_rx_done() argument
516 if (glink->intentless) { in qcom_glink_rx_done()
547 static void qcom_glink_receive_version(struct qcom_glink *glink, in qcom_glink_receive_version() argument
555 glink->features &= features; in qcom_glink_receive_version()
558 qcom_glink_send_version_ack(glink); in qcom_glink_receive_version()
574 static void qcom_glink_receive_version_ack(struct qcom_glink *glink, in qcom_glink_receive_version_ack() argument
583 if (features == glink->features) in qcom_glink_receive_version_ack()
586 glink->features &= features; in qcom_glink_receive_version_ack()
589 qcom_glink_send_version(glink); in qcom_glink_receive_version_ack()
603 static int qcom_glink_send_intent_req_ack(struct qcom_glink *glink, in qcom_glink_send_intent_req_ack() argument
613 qcom_glink_tx(glink, &msg, sizeof(msg), NULL, 0, true); in qcom_glink_send_intent_req_ack()
627 static int qcom_glink_advertise_intent(struct qcom_glink *glink, in qcom_glink_advertise_intent() argument
646 qcom_glink_tx(glink, &cmd, sizeof(cmd), NULL, 0, true); in qcom_glink_advertise_intent()
652 qcom_glink_alloc_intent(struct qcom_glink *glink, in qcom_glink_alloc_intent() argument
690 static void qcom_glink_handle_rx_done(struct qcom_glink *glink, in qcom_glink_handle_rx_done() argument
698 spin_lock_irqsave(&glink->idr_lock, flags); in qcom_glink_handle_rx_done()
699 channel = idr_find(&glink->rcids, cid); in qcom_glink_handle_rx_done()
700 spin_unlock_irqrestore(&glink->idr_lock, flags); in qcom_glink_handle_rx_done()
702 dev_err(glink->dev, "invalid channel id received\n"); in qcom_glink_handle_rx_done()
711 dev_err(glink->dev, "invalid intent id received\n"); in qcom_glink_handle_rx_done()
734 static void qcom_glink_handle_intent_req(struct qcom_glink *glink, in qcom_glink_handle_intent_req() argument
741 spin_lock_irqsave(&glink->idr_lock, flags); in qcom_glink_handle_intent_req()
742 channel = idr_find(&glink->rcids, cid); in qcom_glink_handle_intent_req()
743 spin_unlock_irqrestore(&glink->idr_lock, flags); in qcom_glink_handle_intent_req()
750 intent = qcom_glink_alloc_intent(glink, channel, size, false); in qcom_glink_handle_intent_req()
752 qcom_glink_advertise_intent(glink, channel, intent); in qcom_glink_handle_intent_req()
754 qcom_glink_send_intent_req_ack(glink, channel, !!intent); in qcom_glink_handle_intent_req()
757 static int qcom_glink_rx_defer(struct qcom_glink *glink, size_t extra) in qcom_glink_rx_defer() argument
763 if (qcom_glink_rx_avail(glink) < sizeof(struct glink_msg) + extra) { in qcom_glink_rx_defer()
764 dev_dbg(glink->dev, "Insufficient data in rx fifo"); in qcom_glink_rx_defer()
774 qcom_glink_rx_peak(glink, &dcmd->msg, 0, sizeof(dcmd->msg) + extra); in qcom_glink_rx_defer()
776 spin_lock(&glink->rx_lock); in qcom_glink_rx_defer()
777 list_add_tail(&dcmd->node, &glink->rx_queue); in qcom_glink_rx_defer()
778 spin_unlock(&glink->rx_lock); in qcom_glink_rx_defer()
780 schedule_work(&glink->rx_work); in qcom_glink_rx_defer()
781 qcom_glink_rx_advance(glink, sizeof(dcmd->msg) + extra); in qcom_glink_rx_defer()
786 static int qcom_glink_rx_data(struct qcom_glink *glink, size_t avail) in qcom_glink_rx_data() argument
803 dev_dbg(glink->dev, "Not enough data in fifo\n"); in qcom_glink_rx_data()
807 qcom_glink_rx_peak(glink, &hdr, 0, sizeof(hdr)); in qcom_glink_rx_data()
812 dev_dbg(glink->dev, "Payload not yet in fifo\n"); in qcom_glink_rx_data()
817 spin_lock_irqsave(&glink->idr_lock, flags); in qcom_glink_rx_data()
818 channel = idr_find(&glink->rcids, rcid); in qcom_glink_rx_data()
819 spin_unlock_irqrestore(&glink->idr_lock, flags); in qcom_glink_rx_data()
821 dev_dbg(glink->dev, "Data on non-existing channel\n"); in qcom_glink_rx_data()
827 if (glink->intentless) { in qcom_glink_rx_data()
857 dev_err(glink->dev, in qcom_glink_rx_data()
866 dev_err(glink->dev, "Insufficient space in intent\n"); in qcom_glink_rx_data()
872 qcom_glink_rx_peak(glink, intent->data + intent->offset, in qcom_glink_rx_data()
891 qcom_glink_rx_done(glink, channel, intent); in qcom_glink_rx_data()
895 qcom_glink_rx_advance(glink, ALIGN(sizeof(hdr) + chunk_size, 8)); in qcom_glink_rx_data()
900 static void qcom_glink_handle_intent(struct qcom_glink *glink, in qcom_glink_handle_intent() argument
923 dev_dbg(glink->dev, "Not enough data in fifo\n"); in qcom_glink_handle_intent()
927 spin_lock_irqsave(&glink->idr_lock, flags); in qcom_glink_handle_intent()
928 channel = idr_find(&glink->rcids, cid); in qcom_glink_handle_intent()
929 spin_unlock_irqrestore(&glink->idr_lock, flags); in qcom_glink_handle_intent()
931 dev_err(glink->dev, "intents for non-existing channel\n"); in qcom_glink_handle_intent()
939 qcom_glink_rx_peak(glink, msg, 0, msglen); in qcom_glink_handle_intent()
955 dev_err(glink->dev, "failed to store remote intent\n"); in qcom_glink_handle_intent()
959 qcom_glink_rx_advance(glink, ALIGN(msglen, 8)); in qcom_glink_handle_intent()
962 static int qcom_glink_rx_open_ack(struct qcom_glink *glink, unsigned int lcid) in qcom_glink_rx_open_ack() argument
966 spin_lock(&glink->idr_lock); in qcom_glink_rx_open_ack()
967 channel = idr_find(&glink->lcids, lcid); in qcom_glink_rx_open_ack()
968 spin_unlock(&glink->idr_lock); in qcom_glink_rx_open_ack()
970 dev_err(glink->dev, "Invalid open ack packet\n"); in qcom_glink_rx_open_ack()
981 struct qcom_glink *glink = data; in qcom_glink_native_intr() local
990 avail = qcom_glink_rx_avail(glink); in qcom_glink_native_intr()
994 qcom_glink_rx_peak(glink, &msg, 0, sizeof(msg)); in qcom_glink_native_intr()
1006 ret = qcom_glink_rx_defer(glink, 0); in qcom_glink_native_intr()
1009 ret = qcom_glink_rx_open_ack(glink, param1); in qcom_glink_native_intr()
1010 qcom_glink_rx_advance(glink, ALIGN(sizeof(msg), 8)); in qcom_glink_native_intr()
1013 ret = qcom_glink_rx_defer(glink, param2); in qcom_glink_native_intr()
1017 ret = qcom_glink_rx_data(glink, avail); in qcom_glink_native_intr()
1020 qcom_glink_rx_advance(glink, ALIGN(sizeof(msg), 8)); in qcom_glink_native_intr()
1022 mbox_send_message(glink->mbox_chan, NULL); in qcom_glink_native_intr()
1023 mbox_client_txdone(glink->mbox_chan, 0); in qcom_glink_native_intr()
1026 qcom_glink_handle_intent(glink, param1, param2, avail); in qcom_glink_native_intr()
1029 qcom_glink_handle_rx_done(glink, param1, param2, false); in qcom_glink_native_intr()
1030 qcom_glink_rx_advance(glink, ALIGN(sizeof(msg), 8)); in qcom_glink_native_intr()
1033 qcom_glink_handle_rx_done(glink, param1, param2, true); in qcom_glink_native_intr()
1034 qcom_glink_rx_advance(glink, ALIGN(sizeof(msg), 8)); in qcom_glink_native_intr()
1037 qcom_glink_handle_intent_req_ack(glink, param1, param2); in qcom_glink_native_intr()
1038 qcom_glink_rx_advance(glink, ALIGN(sizeof(msg), 8)); in qcom_glink_native_intr()
1041 dev_err(glink->dev, "unhandled rx cmd: %d\n", cmd); in qcom_glink_native_intr()
1054 static struct glink_channel *qcom_glink_create_local(struct qcom_glink *glink, in qcom_glink_create_local() argument
1061 channel = qcom_glink_alloc_channel(glink, name); in qcom_glink_create_local()
1065 ret = qcom_glink_send_open_req(glink, channel); in qcom_glink_create_local()
1077 qcom_glink_send_open_ack(glink, channel); in qcom_glink_create_local()
1083 spin_lock_irqsave(&glink->idr_lock, flags); in qcom_glink_create_local()
1084 idr_remove(&glink->lcids, channel->lcid); in qcom_glink_create_local()
1085 spin_unlock_irqrestore(&glink->idr_lock, flags); in qcom_glink_create_local()
1097 static int qcom_glink_create_remote(struct qcom_glink *glink, in qcom_glink_create_remote() argument
1102 qcom_glink_send_open_ack(glink, channel); in qcom_glink_create_remote()
1104 ret = qcom_glink_send_open_req(glink, channel); in qcom_glink_create_remote()
1123 qcom_glink_send_close_req(glink, channel); in qcom_glink_create_remote()
1136 struct qcom_glink *glink = parent->glink; in qcom_glink_create_ept() local
1143 spin_lock_irqsave(&glink->idr_lock, flags); in qcom_glink_create_ept()
1144 idr_for_each_entry(&glink->rcids, channel, cid) { in qcom_glink_create_ept()
1148 spin_unlock_irqrestore(&glink->idr_lock, flags); in qcom_glink_create_ept()
1151 channel = qcom_glink_create_local(glink, name); in qcom_glink_create_ept()
1155 ret = qcom_glink_create_remote(glink, channel); in qcom_glink_create_ept()
1173 struct qcom_glink *glink = channel->glink; in qcom_glink_announce_create() local
1182 if (glink->intentless || !completion_done(&channel->open_ack)) in qcom_glink_announce_create()
1196 intent = qcom_glink_alloc_intent(glink, channel, size, in qcom_glink_announce_create()
1201 qcom_glink_advertise_intent(glink, channel, intent); in qcom_glink_announce_create()
1210 struct qcom_glink *glink = channel->glink; in qcom_glink_destroy_ept() local
1220 qcom_glink_send_close_req(glink, channel); in qcom_glink_destroy_ept()
1223 static int qcom_glink_request_intent(struct qcom_glink *glink, in qcom_glink_request_intent() argument
1243 ret = qcom_glink_tx(glink, &cmd, sizeof(cmd), NULL, 0, true); in qcom_glink_request_intent()
1249 dev_err(glink->dev, "intent request timed out\n"); in qcom_glink_request_intent()
1263 struct qcom_glink *glink = channel->glink; in __qcom_glink_send() local
1275 if (!glink->intentless) { in __qcom_glink_send()
1299 ret = qcom_glink_request_intent(glink, channel, len); in __qcom_glink_send()
1313 ret = qcom_glink_tx(glink, &req, sizeof(req), data, len, wait); in __qcom_glink_send()
1380 static int qcom_glink_rx_open(struct qcom_glink *glink, unsigned int rcid, in qcom_glink_rx_open() argument
1391 spin_lock_irqsave(&glink->idr_lock, flags); in qcom_glink_rx_open()
1392 idr_for_each_entry(&glink->lcids, channel, lcid) { in qcom_glink_rx_open()
1396 spin_unlock_irqrestore(&glink->idr_lock, flags); in qcom_glink_rx_open()
1399 channel = qcom_glink_alloc_channel(glink, name); in qcom_glink_rx_open()
1407 spin_lock_irqsave(&glink->idr_lock, flags); in qcom_glink_rx_open()
1408 ret = idr_alloc(&glink->rcids, channel, rcid, rcid + 1, GFP_ATOMIC); in qcom_glink_rx_open()
1410 dev_err(glink->dev, "Unable to insert channel into rcid list\n"); in qcom_glink_rx_open()
1411 spin_unlock_irqrestore(&glink->idr_lock, flags); in qcom_glink_rx_open()
1415 spin_unlock_irqrestore(&glink->idr_lock, flags); in qcom_glink_rx_open()
1432 node = qcom_glink_match_channel(glink->dev->of_node, name); in qcom_glink_rx_open()
1434 rpdev->dev.parent = glink->dev; in qcom_glink_rx_open()
1447 spin_lock_irqsave(&glink->idr_lock, flags); in qcom_glink_rx_open()
1448 idr_remove(&glink->rcids, channel->rcid); in qcom_glink_rx_open()
1450 spin_unlock_irqrestore(&glink->idr_lock, flags); in qcom_glink_rx_open()
1459 static void qcom_glink_rx_close(struct qcom_glink *glink, unsigned int rcid) in qcom_glink_rx_close() argument
1465 spin_lock_irqsave(&glink->idr_lock, flags); in qcom_glink_rx_close()
1466 channel = idr_find(&glink->rcids, rcid); in qcom_glink_rx_close()
1467 spin_unlock_irqrestore(&glink->idr_lock, flags); in qcom_glink_rx_close()
1479 rpmsg_unregister_device(glink->dev, &chinfo); in qcom_glink_rx_close()
1482 qcom_glink_send_close_ack(glink, channel->rcid); in qcom_glink_rx_close()
1484 spin_lock_irqsave(&glink->idr_lock, flags); in qcom_glink_rx_close()
1485 idr_remove(&glink->rcids, channel->rcid); in qcom_glink_rx_close()
1487 spin_unlock_irqrestore(&glink->idr_lock, flags); in qcom_glink_rx_close()
1492 static void qcom_glink_rx_close_ack(struct qcom_glink *glink, unsigned int lcid) in qcom_glink_rx_close_ack() argument
1497 spin_lock_irqsave(&glink->idr_lock, flags); in qcom_glink_rx_close_ack()
1498 channel = idr_find(&glink->lcids, lcid); in qcom_glink_rx_close_ack()
1500 spin_unlock_irqrestore(&glink->idr_lock, flags); in qcom_glink_rx_close_ack()
1504 idr_remove(&glink->lcids, channel->lcid); in qcom_glink_rx_close_ack()
1506 spin_unlock_irqrestore(&glink->idr_lock, flags); in qcom_glink_rx_close_ack()
1513 struct qcom_glink *glink = container_of(work, struct qcom_glink, in qcom_glink_work() local
1523 spin_lock_irqsave(&glink->rx_lock, flags); in qcom_glink_work()
1524 if (list_empty(&glink->rx_queue)) { in qcom_glink_work()
1525 spin_unlock_irqrestore(&glink->rx_lock, flags); in qcom_glink_work()
1528 dcmd = list_first_entry(&glink->rx_queue, in qcom_glink_work()
1531 spin_unlock_irqrestore(&glink->rx_lock, flags); in qcom_glink_work()
1540 qcom_glink_receive_version(glink, param1, param2); in qcom_glink_work()
1543 qcom_glink_receive_version_ack(glink, param1, param2); in qcom_glink_work()
1546 qcom_glink_rx_open(glink, param1, msg->data); in qcom_glink_work()
1549 qcom_glink_rx_close(glink, param1); in qcom_glink_work()
1552 qcom_glink_rx_close_ack(glink, param1); in qcom_glink_work()
1555 qcom_glink_handle_intent_req(glink, param1, param2); in qcom_glink_work()
1566 static void qcom_glink_cancel_rx_work(struct qcom_glink *glink) in qcom_glink_cancel_rx_work() argument
1572 cancel_work_sync(&glink->rx_work); in qcom_glink_cancel_rx_work()
1574 list_for_each_entry_safe(dcmd, tmp, &glink->rx_queue, node) in qcom_glink_cancel_rx_work()
1608 static int qcom_glink_create_chrdev(struct qcom_glink *glink) in qcom_glink_create_chrdev() argument
1617 channel = qcom_glink_alloc_channel(glink, "rpmsg_chrdev"); in qcom_glink_create_chrdev()
1626 rpdev->dev.parent = glink->dev; in qcom_glink_create_chrdev()
1640 struct qcom_glink *glink; in qcom_glink_native_probe() local
1642 glink = devm_kzalloc(dev, sizeof(*glink), GFP_KERNEL); in qcom_glink_native_probe()
1643 if (!glink) in qcom_glink_native_probe()
1646 glink->dev = dev; in qcom_glink_native_probe()
1647 glink->tx_pipe = tx; in qcom_glink_native_probe()
1648 glink->rx_pipe = rx; in qcom_glink_native_probe()
1650 glink->features = features; in qcom_glink_native_probe()
1651 glink->intentless = intentless; in qcom_glink_native_probe()
1653 spin_lock_init(&glink->tx_lock); in qcom_glink_native_probe()
1654 spin_lock_init(&glink->rx_lock); in qcom_glink_native_probe()
1655 INIT_LIST_HEAD(&glink->rx_queue); in qcom_glink_native_probe()
1656 INIT_WORK(&glink->rx_work, qcom_glink_work); in qcom_glink_native_probe()
1658 spin_lock_init(&glink->idr_lock); in qcom_glink_native_probe()
1659 idr_init(&glink->lcids); in qcom_glink_native_probe()
1660 idr_init(&glink->rcids); in qcom_glink_native_probe()
1662 glink->dev->groups = qcom_glink_groups; in qcom_glink_native_probe()
1668 ret = of_property_read_string(dev->of_node, "label", &glink->name); in qcom_glink_native_probe()
1670 glink->name = dev->of_node->name; in qcom_glink_native_probe()
1672 glink->mbox_client.dev = dev; in qcom_glink_native_probe()
1673 glink->mbox_client.knows_txdone = true; in qcom_glink_native_probe()
1674 glink->mbox_chan = mbox_request_channel(&glink->mbox_client, 0); in qcom_glink_native_probe()
1675 if (IS_ERR(glink->mbox_chan)) { in qcom_glink_native_probe()
1676 if (PTR_ERR(glink->mbox_chan) != -EPROBE_DEFER) in qcom_glink_native_probe()
1678 return ERR_CAST(glink->mbox_chan); in qcom_glink_native_probe()
1685 "glink-native", glink); in qcom_glink_native_probe()
1691 glink->irq = irq; in qcom_glink_native_probe()
1693 ret = qcom_glink_send_version(glink); in qcom_glink_native_probe()
1697 ret = qcom_glink_create_chrdev(glink); in qcom_glink_native_probe()
1699 dev_err(glink->dev, "failed to register chrdev\n"); in qcom_glink_native_probe()
1701 return glink; in qcom_glink_native_probe()
1712 void qcom_glink_native_remove(struct qcom_glink *glink) in qcom_glink_native_remove() argument
1718 disable_irq(glink->irq); in qcom_glink_native_remove()
1719 qcom_glink_cancel_rx_work(glink); in qcom_glink_native_remove()
1721 ret = device_for_each_child(glink->dev, NULL, qcom_glink_remove_device); in qcom_glink_native_remove()
1723 dev_warn(glink->dev, "Can't remove GLINK devices: %d\n", ret); in qcom_glink_native_remove()
1726 idr_for_each_entry(&glink->lcids, channel, cid) in qcom_glink_native_remove()
1730 idr_for_each_entry(&glink->rcids, channel, cid) in qcom_glink_native_remove()
1733 idr_destroy(&glink->lcids); in qcom_glink_native_remove()
1734 idr_destroy(&glink->rcids); in qcom_glink_native_remove()
1735 mbox_free_channel(glink->mbox_chan); in qcom_glink_native_remove()
1739 void qcom_glink_native_unregister(struct qcom_glink *glink) in qcom_glink_native_unregister() argument
1741 device_unregister(glink->dev); in qcom_glink_native_unregister()