glink 30 drivers/remoteproc/qcom_common.c struct qcom_rproc_glink *glink = to_glink_subdev(subdev); glink 32 drivers/remoteproc/qcom_common.c glink->edge = qcom_glink_smem_register(glink->dev, glink->node); glink 34 drivers/remoteproc/qcom_common.c return PTR_ERR_OR_ZERO(glink->edge); glink 39 drivers/remoteproc/qcom_common.c struct qcom_rproc_glink *glink = to_glink_subdev(subdev); glink 41 drivers/remoteproc/qcom_common.c qcom_glink_smem_unregister(glink->edge); glink 42 drivers/remoteproc/qcom_common.c glink->edge = NULL; glink 50 drivers/remoteproc/qcom_common.c void qcom_add_glink_subdev(struct rproc *rproc, struct qcom_rproc_glink *glink) glink 54 drivers/remoteproc/qcom_common.c glink->node = of_get_child_by_name(dev->parent->of_node, "glink-edge"); glink 55 drivers/remoteproc/qcom_common.c if (!glink->node) glink 58 drivers/remoteproc/qcom_common.c glink->dev = dev; glink 59 drivers/remoteproc/qcom_common.c glink->subdev.start = glink_subdev_start; glink 60 drivers/remoteproc/qcom_common.c glink->subdev.stop = glink_subdev_stop; glink 62 drivers/remoteproc/qcom_common.c rproc_add_subdev(rproc, &glink->subdev); glink 71 drivers/remoteproc/qcom_common.c void qcom_remove_glink_subdev(struct rproc *rproc, struct qcom_rproc_glink *glink) glink 73 drivers/remoteproc/qcom_common.c if (!glink->node) glink 76 drivers/remoteproc/qcom_common.c rproc_remove_subdev(rproc, &glink->subdev); glink 77 drivers/remoteproc/qcom_common.c of_node_put(glink->node); glink 33 drivers/remoteproc/qcom_common.h void qcom_add_glink_subdev(struct rproc *rproc, struct qcom_rproc_glink *glink); glink 34 drivers/remoteproc/qcom_common.h void qcom_remove_glink_subdev(struct rproc *rproc, struct qcom_rproc_glink *glink); glink 158 drivers/rpmsg/qcom_glink_native.c struct qcom_glink *glink; glink 209 drivers/rpmsg/qcom_glink_native.c static struct glink_channel *qcom_glink_alloc_channel(struct qcom_glink *glink, glink 223 drivers/rpmsg/qcom_glink_native.c channel->glink = glink; glink 276 drivers/rpmsg/qcom_glink_native.c static size_t qcom_glink_rx_avail(struct qcom_glink *glink) glink 278 drivers/rpmsg/qcom_glink_native.c return glink->rx_pipe->avail(glink->rx_pipe); glink 281 drivers/rpmsg/qcom_glink_native.c static void qcom_glink_rx_peak(struct qcom_glink *glink, glink 284 drivers/rpmsg/qcom_glink_native.c glink->rx_pipe->peak(glink->rx_pipe, data, offset, count); glink 287 drivers/rpmsg/qcom_glink_native.c static void qcom_glink_rx_advance(struct qcom_glink *glink, size_t count) glink 289 drivers/rpmsg/qcom_glink_native.c glink->rx_pipe->advance(glink->rx_pipe, count); glink 292 drivers/rpmsg/qcom_glink_native.c static size_t qcom_glink_tx_avail(struct qcom_glink *glink) glink 294 drivers/rpmsg/qcom_glink_native.c return glink->tx_pipe->avail(glink->tx_pipe); glink 297 drivers/rpmsg/qcom_glink_native.c static void qcom_glink_tx_write(struct qcom_glink *glink, glink 301 drivers/rpmsg/qcom_glink_native.c glink->tx_pipe->write(glink->tx_pipe, hdr, hlen, data, dlen); glink 304 drivers/rpmsg/qcom_glink_native.c static int qcom_glink_tx(struct qcom_glink *glink, glink 313 drivers/rpmsg/qcom_glink_native.c if (tlen >= glink->tx_pipe->length) glink 316 drivers/rpmsg/qcom_glink_native.c spin_lock_irqsave(&glink->tx_lock, flags); glink 318 drivers/rpmsg/qcom_glink_native.c while (qcom_glink_tx_avail(glink) < tlen) { glink 325 drivers/rpmsg/qcom_glink_native.c spin_unlock_irqrestore(&glink->tx_lock, flags); glink 329 drivers/rpmsg/qcom_glink_native.c spin_lock_irqsave(&glink->tx_lock, flags); glink 332 drivers/rpmsg/qcom_glink_native.c qcom_glink_tx_write(glink, hdr, hlen, data, dlen); glink 334 drivers/rpmsg/qcom_glink_native.c mbox_send_message(glink->mbox_chan, NULL); glink 335 drivers/rpmsg/qcom_glink_native.c mbox_client_txdone(glink->mbox_chan, 0); glink 338 drivers/rpmsg/qcom_glink_native.c spin_unlock_irqrestore(&glink->tx_lock, flags); glink 343 drivers/rpmsg/qcom_glink_native.c static int qcom_glink_send_version(struct qcom_glink *glink) glink 349 drivers/rpmsg/qcom_glink_native.c msg.param2 = cpu_to_le32(glink->features); glink 351 drivers/rpmsg/qcom_glink_native.c return qcom_glink_tx(glink, &msg, sizeof(msg), NULL, 0, true); glink 354 drivers/rpmsg/qcom_glink_native.c static void qcom_glink_send_version_ack(struct qcom_glink *glink) glink 360 drivers/rpmsg/qcom_glink_native.c msg.param2 = cpu_to_le32(glink->features); glink 362 drivers/rpmsg/qcom_glink_native.c qcom_glink_tx(glink, &msg, sizeof(msg), NULL, 0, true); glink 365 drivers/rpmsg/qcom_glink_native.c static void qcom_glink_send_open_ack(struct qcom_glink *glink, glink 374 drivers/rpmsg/qcom_glink_native.c qcom_glink_tx(glink, &msg, sizeof(msg), NULL, 0, true); glink 377 drivers/rpmsg/qcom_glink_native.c static void qcom_glink_handle_intent_req_ack(struct qcom_glink *glink, glink 383 drivers/rpmsg/qcom_glink_native.c spin_lock_irqsave(&glink->idr_lock, flags); glink 384 drivers/rpmsg/qcom_glink_native.c channel = idr_find(&glink->rcids, cid); glink 385 drivers/rpmsg/qcom_glink_native.c spin_unlock_irqrestore(&glink->idr_lock, flags); glink 387 drivers/rpmsg/qcom_glink_native.c dev_err(glink->dev, "unable to find channel\n"); glink 405 drivers/rpmsg/qcom_glink_native.c static int qcom_glink_send_open_req(struct qcom_glink *glink, glink 419 drivers/rpmsg/qcom_glink_native.c spin_lock_irqsave(&glink->idr_lock, flags); glink 420 drivers/rpmsg/qcom_glink_native.c ret = idr_alloc_cyclic(&glink->lcids, channel, glink 423 drivers/rpmsg/qcom_glink_native.c spin_unlock_irqrestore(&glink->idr_lock, flags); glink 434 drivers/rpmsg/qcom_glink_native.c ret = qcom_glink_tx(glink, &req, req_len, NULL, 0, true); glink 441 drivers/rpmsg/qcom_glink_native.c spin_lock_irqsave(&glink->idr_lock, flags); glink 442 drivers/rpmsg/qcom_glink_native.c idr_remove(&glink->lcids, channel->lcid); glink 444 drivers/rpmsg/qcom_glink_native.c spin_unlock_irqrestore(&glink->idr_lock, flags); glink 449 drivers/rpmsg/qcom_glink_native.c static void qcom_glink_send_close_req(struct qcom_glink *glink, glink 458 drivers/rpmsg/qcom_glink_native.c qcom_glink_tx(glink, &req, sizeof(req), NULL, 0, true); glink 461 drivers/rpmsg/qcom_glink_native.c static void qcom_glink_send_close_ack(struct qcom_glink *glink, glink 470 drivers/rpmsg/qcom_glink_native.c qcom_glink_tx(glink, &req, sizeof(req), NULL, 0, true); glink 477 drivers/rpmsg/qcom_glink_native.c struct qcom_glink *glink = channel->glink; glink 501 drivers/rpmsg/qcom_glink_native.c qcom_glink_tx(glink, &cmd, sizeof(cmd), NULL, 0, true); glink 511 drivers/rpmsg/qcom_glink_native.c static void qcom_glink_rx_done(struct qcom_glink *glink, glink 516 drivers/rpmsg/qcom_glink_native.c if (glink->intentless) { glink 547 drivers/rpmsg/qcom_glink_native.c static void qcom_glink_receive_version(struct qcom_glink *glink, glink 555 drivers/rpmsg/qcom_glink_native.c glink->features &= features; glink 558 drivers/rpmsg/qcom_glink_native.c qcom_glink_send_version_ack(glink); glink 574 drivers/rpmsg/qcom_glink_native.c static void qcom_glink_receive_version_ack(struct qcom_glink *glink, glink 583 drivers/rpmsg/qcom_glink_native.c if (features == glink->features) glink 586 drivers/rpmsg/qcom_glink_native.c glink->features &= features; glink 589 drivers/rpmsg/qcom_glink_native.c qcom_glink_send_version(glink); glink 603 drivers/rpmsg/qcom_glink_native.c static int qcom_glink_send_intent_req_ack(struct qcom_glink *glink, glink 613 drivers/rpmsg/qcom_glink_native.c qcom_glink_tx(glink, &msg, sizeof(msg), NULL, 0, true); glink 627 drivers/rpmsg/qcom_glink_native.c static int qcom_glink_advertise_intent(struct qcom_glink *glink, glink 646 drivers/rpmsg/qcom_glink_native.c qcom_glink_tx(glink, &cmd, sizeof(cmd), NULL, 0, true); glink 652 drivers/rpmsg/qcom_glink_native.c qcom_glink_alloc_intent(struct qcom_glink *glink, glink 690 drivers/rpmsg/qcom_glink_native.c static void qcom_glink_handle_rx_done(struct qcom_glink *glink, glink 698 drivers/rpmsg/qcom_glink_native.c spin_lock_irqsave(&glink->idr_lock, flags); glink 699 drivers/rpmsg/qcom_glink_native.c channel = idr_find(&glink->rcids, cid); glink 700 drivers/rpmsg/qcom_glink_native.c spin_unlock_irqrestore(&glink->idr_lock, flags); glink 702 drivers/rpmsg/qcom_glink_native.c dev_err(glink->dev, "invalid channel id received\n"); glink 711 drivers/rpmsg/qcom_glink_native.c dev_err(glink->dev, "invalid intent id received\n"); glink 734 drivers/rpmsg/qcom_glink_native.c static void qcom_glink_handle_intent_req(struct qcom_glink *glink, glink 741 drivers/rpmsg/qcom_glink_native.c spin_lock_irqsave(&glink->idr_lock, flags); glink 742 drivers/rpmsg/qcom_glink_native.c channel = idr_find(&glink->rcids, cid); glink 743 drivers/rpmsg/qcom_glink_native.c spin_unlock_irqrestore(&glink->idr_lock, flags); glink 750 drivers/rpmsg/qcom_glink_native.c intent = qcom_glink_alloc_intent(glink, channel, size, false); glink 752 drivers/rpmsg/qcom_glink_native.c qcom_glink_advertise_intent(glink, channel, intent); glink 754 drivers/rpmsg/qcom_glink_native.c qcom_glink_send_intent_req_ack(glink, channel, !!intent); glink 757 drivers/rpmsg/qcom_glink_native.c static int qcom_glink_rx_defer(struct qcom_glink *glink, size_t extra) glink 763 drivers/rpmsg/qcom_glink_native.c if (qcom_glink_rx_avail(glink) < sizeof(struct glink_msg) + extra) { glink 764 drivers/rpmsg/qcom_glink_native.c dev_dbg(glink->dev, "Insufficient data in rx fifo"); glink 774 drivers/rpmsg/qcom_glink_native.c qcom_glink_rx_peak(glink, &dcmd->msg, 0, sizeof(dcmd->msg) + extra); glink 776 drivers/rpmsg/qcom_glink_native.c spin_lock(&glink->rx_lock); glink 777 drivers/rpmsg/qcom_glink_native.c list_add_tail(&dcmd->node, &glink->rx_queue); glink 778 drivers/rpmsg/qcom_glink_native.c spin_unlock(&glink->rx_lock); glink 780 drivers/rpmsg/qcom_glink_native.c schedule_work(&glink->rx_work); glink 781 drivers/rpmsg/qcom_glink_native.c qcom_glink_rx_advance(glink, sizeof(dcmd->msg) + extra); glink 786 drivers/rpmsg/qcom_glink_native.c static int qcom_glink_rx_data(struct qcom_glink *glink, size_t avail) glink 803 drivers/rpmsg/qcom_glink_native.c dev_dbg(glink->dev, "Not enough data in fifo\n"); glink 807 drivers/rpmsg/qcom_glink_native.c qcom_glink_rx_peak(glink, &hdr, 0, sizeof(hdr)); glink 812 drivers/rpmsg/qcom_glink_native.c dev_dbg(glink->dev, "Payload not yet in fifo\n"); glink 817 drivers/rpmsg/qcom_glink_native.c spin_lock_irqsave(&glink->idr_lock, flags); glink 818 drivers/rpmsg/qcom_glink_native.c channel = idr_find(&glink->rcids, rcid); glink 819 drivers/rpmsg/qcom_glink_native.c spin_unlock_irqrestore(&glink->idr_lock, flags); glink 821 drivers/rpmsg/qcom_glink_native.c dev_dbg(glink->dev, "Data on non-existing channel\n"); glink 827 drivers/rpmsg/qcom_glink_native.c if (glink->intentless) { glink 857 drivers/rpmsg/qcom_glink_native.c dev_err(glink->dev, glink 865 drivers/rpmsg/qcom_glink_native.c dev_err(glink->dev, "Insufficient space in intent\n"); glink 871 drivers/rpmsg/qcom_glink_native.c qcom_glink_rx_peak(glink, intent->data + intent->offset, glink 890 drivers/rpmsg/qcom_glink_native.c qcom_glink_rx_done(glink, channel, intent); glink 894 drivers/rpmsg/qcom_glink_native.c qcom_glink_rx_advance(glink, ALIGN(sizeof(hdr) + chunk_size, 8)); glink 899 drivers/rpmsg/qcom_glink_native.c static void qcom_glink_handle_intent(struct qcom_glink *glink, glink 922 drivers/rpmsg/qcom_glink_native.c dev_dbg(glink->dev, "Not enough data in fifo\n"); glink 926 drivers/rpmsg/qcom_glink_native.c spin_lock_irqsave(&glink->idr_lock, flags); glink 927 drivers/rpmsg/qcom_glink_native.c channel = idr_find(&glink->rcids, cid); glink 928 drivers/rpmsg/qcom_glink_native.c spin_unlock_irqrestore(&glink->idr_lock, flags); glink 930 drivers/rpmsg/qcom_glink_native.c dev_err(glink->dev, "intents for non-existing channel\n"); glink 938 drivers/rpmsg/qcom_glink_native.c qcom_glink_rx_peak(glink, msg, 0, msglen); glink 954 drivers/rpmsg/qcom_glink_native.c dev_err(glink->dev, "failed to store remote intent\n"); glink 958 drivers/rpmsg/qcom_glink_native.c qcom_glink_rx_advance(glink, ALIGN(msglen, 8)); glink 961 drivers/rpmsg/qcom_glink_native.c static int qcom_glink_rx_open_ack(struct qcom_glink *glink, unsigned int lcid) glink 965 drivers/rpmsg/qcom_glink_native.c spin_lock(&glink->idr_lock); glink 966 drivers/rpmsg/qcom_glink_native.c channel = idr_find(&glink->lcids, lcid); glink 967 drivers/rpmsg/qcom_glink_native.c spin_unlock(&glink->idr_lock); glink 969 drivers/rpmsg/qcom_glink_native.c dev_err(glink->dev, "Invalid open ack packet\n"); glink 980 drivers/rpmsg/qcom_glink_native.c struct qcom_glink *glink = data; glink 989 drivers/rpmsg/qcom_glink_native.c avail = qcom_glink_rx_avail(glink); glink 993 drivers/rpmsg/qcom_glink_native.c qcom_glink_rx_peak(glink, &msg, 0, sizeof(msg)); glink 1005 drivers/rpmsg/qcom_glink_native.c ret = qcom_glink_rx_defer(glink, 0); glink 1008 drivers/rpmsg/qcom_glink_native.c ret = qcom_glink_rx_open_ack(glink, param1); glink 1009 drivers/rpmsg/qcom_glink_native.c qcom_glink_rx_advance(glink, ALIGN(sizeof(msg), 8)); glink 1012 drivers/rpmsg/qcom_glink_native.c ret = qcom_glink_rx_defer(glink, param2); glink 1016 drivers/rpmsg/qcom_glink_native.c ret = qcom_glink_rx_data(glink, avail); glink 1019 drivers/rpmsg/qcom_glink_native.c qcom_glink_rx_advance(glink, ALIGN(sizeof(msg), 8)); glink 1021 drivers/rpmsg/qcom_glink_native.c mbox_send_message(glink->mbox_chan, NULL); glink 1022 drivers/rpmsg/qcom_glink_native.c mbox_client_txdone(glink->mbox_chan, 0); glink 1025 drivers/rpmsg/qcom_glink_native.c qcom_glink_handle_intent(glink, param1, param2, avail); glink 1028 drivers/rpmsg/qcom_glink_native.c qcom_glink_handle_rx_done(glink, param1, param2, false); glink 1029 drivers/rpmsg/qcom_glink_native.c qcom_glink_rx_advance(glink, ALIGN(sizeof(msg), 8)); glink 1032 drivers/rpmsg/qcom_glink_native.c qcom_glink_handle_rx_done(glink, param1, param2, true); glink 1033 drivers/rpmsg/qcom_glink_native.c qcom_glink_rx_advance(glink, ALIGN(sizeof(msg), 8)); glink 1036 drivers/rpmsg/qcom_glink_native.c qcom_glink_handle_intent_req_ack(glink, param1, param2); glink 1037 drivers/rpmsg/qcom_glink_native.c qcom_glink_rx_advance(glink, ALIGN(sizeof(msg), 8)); glink 1040 drivers/rpmsg/qcom_glink_native.c dev_err(glink->dev, "unhandled rx cmd: %d\n", cmd); glink 1053 drivers/rpmsg/qcom_glink_native.c static struct glink_channel *qcom_glink_create_local(struct qcom_glink *glink, glink 1060 drivers/rpmsg/qcom_glink_native.c channel = qcom_glink_alloc_channel(glink, name); glink 1064 drivers/rpmsg/qcom_glink_native.c ret = qcom_glink_send_open_req(glink, channel); glink 1076 drivers/rpmsg/qcom_glink_native.c qcom_glink_send_open_ack(glink, channel); glink 1082 drivers/rpmsg/qcom_glink_native.c spin_lock_irqsave(&glink->idr_lock, flags); glink 1083 drivers/rpmsg/qcom_glink_native.c idr_remove(&glink->lcids, channel->lcid); glink 1084 drivers/rpmsg/qcom_glink_native.c spin_unlock_irqrestore(&glink->idr_lock, flags); glink 1096 drivers/rpmsg/qcom_glink_native.c static int qcom_glink_create_remote(struct qcom_glink *glink, glink 1101 drivers/rpmsg/qcom_glink_native.c qcom_glink_send_open_ack(glink, channel); glink 1103 drivers/rpmsg/qcom_glink_native.c ret = qcom_glink_send_open_req(glink, channel); glink 1122 drivers/rpmsg/qcom_glink_native.c qcom_glink_send_close_req(glink, channel); glink 1135 drivers/rpmsg/qcom_glink_native.c struct qcom_glink *glink = parent->glink; glink 1142 drivers/rpmsg/qcom_glink_native.c spin_lock_irqsave(&glink->idr_lock, flags); glink 1143 drivers/rpmsg/qcom_glink_native.c idr_for_each_entry(&glink->rcids, channel, cid) { glink 1147 drivers/rpmsg/qcom_glink_native.c spin_unlock_irqrestore(&glink->idr_lock, flags); glink 1150 drivers/rpmsg/qcom_glink_native.c channel = qcom_glink_create_local(glink, name); glink 1154 drivers/rpmsg/qcom_glink_native.c ret = qcom_glink_create_remote(glink, channel); glink 1172 drivers/rpmsg/qcom_glink_native.c struct qcom_glink *glink = channel->glink; glink 1181 drivers/rpmsg/qcom_glink_native.c if (glink->intentless) glink 1195 drivers/rpmsg/qcom_glink_native.c intent = qcom_glink_alloc_intent(glink, channel, size, glink 1200 drivers/rpmsg/qcom_glink_native.c qcom_glink_advertise_intent(glink, channel, intent); glink 1209 drivers/rpmsg/qcom_glink_native.c struct qcom_glink *glink = channel->glink; glink 1219 drivers/rpmsg/qcom_glink_native.c qcom_glink_send_close_req(glink, channel); glink 1222 drivers/rpmsg/qcom_glink_native.c static int qcom_glink_request_intent(struct qcom_glink *glink, glink 1242 drivers/rpmsg/qcom_glink_native.c ret = qcom_glink_tx(glink, &cmd, sizeof(cmd), NULL, 0, true); glink 1248 drivers/rpmsg/qcom_glink_native.c dev_err(glink->dev, "intent request timed out\n"); glink 1262 drivers/rpmsg/qcom_glink_native.c struct qcom_glink *glink = channel->glink; glink 1274 drivers/rpmsg/qcom_glink_native.c if (!glink->intentless) { glink 1298 drivers/rpmsg/qcom_glink_native.c ret = qcom_glink_request_intent(glink, channel, len); glink 1312 drivers/rpmsg/qcom_glink_native.c ret = qcom_glink_tx(glink, &req, sizeof(req), data, len, wait); glink 1379 drivers/rpmsg/qcom_glink_native.c static int qcom_glink_rx_open(struct qcom_glink *glink, unsigned int rcid, glink 1390 drivers/rpmsg/qcom_glink_native.c spin_lock_irqsave(&glink->idr_lock, flags); glink 1391 drivers/rpmsg/qcom_glink_native.c idr_for_each_entry(&glink->lcids, channel, lcid) { glink 1395 drivers/rpmsg/qcom_glink_native.c spin_unlock_irqrestore(&glink->idr_lock, flags); glink 1398 drivers/rpmsg/qcom_glink_native.c channel = qcom_glink_alloc_channel(glink, name); glink 1406 drivers/rpmsg/qcom_glink_native.c spin_lock_irqsave(&glink->idr_lock, flags); glink 1407 drivers/rpmsg/qcom_glink_native.c ret = idr_alloc(&glink->rcids, channel, rcid, rcid + 1, GFP_ATOMIC); glink 1409 drivers/rpmsg/qcom_glink_native.c dev_err(glink->dev, "Unable to insert channel into rcid list\n"); glink 1410 drivers/rpmsg/qcom_glink_native.c spin_unlock_irqrestore(&glink->idr_lock, flags); glink 1414 drivers/rpmsg/qcom_glink_native.c spin_unlock_irqrestore(&glink->idr_lock, flags); glink 1431 drivers/rpmsg/qcom_glink_native.c node = qcom_glink_match_channel(glink->dev->of_node, name); glink 1433 drivers/rpmsg/qcom_glink_native.c rpdev->dev.parent = glink->dev; glink 1446 drivers/rpmsg/qcom_glink_native.c spin_lock_irqsave(&glink->idr_lock, flags); glink 1447 drivers/rpmsg/qcom_glink_native.c idr_remove(&glink->rcids, channel->rcid); glink 1449 drivers/rpmsg/qcom_glink_native.c spin_unlock_irqrestore(&glink->idr_lock, flags); glink 1458 drivers/rpmsg/qcom_glink_native.c static void qcom_glink_rx_close(struct qcom_glink *glink, unsigned int rcid) glink 1464 drivers/rpmsg/qcom_glink_native.c spin_lock_irqsave(&glink->idr_lock, flags); glink 1465 drivers/rpmsg/qcom_glink_native.c channel = idr_find(&glink->rcids, rcid); glink 1466 drivers/rpmsg/qcom_glink_native.c spin_unlock_irqrestore(&glink->idr_lock, flags); glink 1478 drivers/rpmsg/qcom_glink_native.c rpmsg_unregister_device(glink->dev, &chinfo); glink 1481 drivers/rpmsg/qcom_glink_native.c qcom_glink_send_close_ack(glink, channel->rcid); glink 1483 drivers/rpmsg/qcom_glink_native.c spin_lock_irqsave(&glink->idr_lock, flags); glink 1484 drivers/rpmsg/qcom_glink_native.c idr_remove(&glink->rcids, channel->rcid); glink 1486 drivers/rpmsg/qcom_glink_native.c spin_unlock_irqrestore(&glink->idr_lock, flags); glink 1491 drivers/rpmsg/qcom_glink_native.c static void qcom_glink_rx_close_ack(struct qcom_glink *glink, unsigned int lcid) glink 1496 drivers/rpmsg/qcom_glink_native.c spin_lock_irqsave(&glink->idr_lock, flags); glink 1497 drivers/rpmsg/qcom_glink_native.c channel = idr_find(&glink->lcids, lcid); glink 1499 drivers/rpmsg/qcom_glink_native.c spin_unlock_irqrestore(&glink->idr_lock, flags); glink 1503 drivers/rpmsg/qcom_glink_native.c idr_remove(&glink->lcids, channel->lcid); glink 1505 drivers/rpmsg/qcom_glink_native.c spin_unlock_irqrestore(&glink->idr_lock, flags); glink 1512 drivers/rpmsg/qcom_glink_native.c struct qcom_glink *glink = container_of(work, struct qcom_glink, glink 1522 drivers/rpmsg/qcom_glink_native.c spin_lock_irqsave(&glink->rx_lock, flags); glink 1523 drivers/rpmsg/qcom_glink_native.c if (list_empty(&glink->rx_queue)) { glink 1524 drivers/rpmsg/qcom_glink_native.c spin_unlock_irqrestore(&glink->rx_lock, flags); glink 1527 drivers/rpmsg/qcom_glink_native.c dcmd = list_first_entry(&glink->rx_queue, glink 1530 drivers/rpmsg/qcom_glink_native.c spin_unlock_irqrestore(&glink->rx_lock, flags); glink 1539 drivers/rpmsg/qcom_glink_native.c qcom_glink_receive_version(glink, param1, param2); glink 1542 drivers/rpmsg/qcom_glink_native.c qcom_glink_receive_version_ack(glink, param1, param2); glink 1545 drivers/rpmsg/qcom_glink_native.c qcom_glink_rx_open(glink, param1, msg->data); glink 1548 drivers/rpmsg/qcom_glink_native.c qcom_glink_rx_close(glink, param1); glink 1551 drivers/rpmsg/qcom_glink_native.c qcom_glink_rx_close_ack(glink, param1); glink 1554 drivers/rpmsg/qcom_glink_native.c qcom_glink_handle_intent_req(glink, param1, param2); glink 1565 drivers/rpmsg/qcom_glink_native.c static void qcom_glink_cancel_rx_work(struct qcom_glink *glink) glink 1571 drivers/rpmsg/qcom_glink_native.c cancel_work_sync(&glink->rx_work); glink 1573 drivers/rpmsg/qcom_glink_native.c list_for_each_entry_safe(dcmd, tmp, &glink->rx_queue, node) glink 1585 drivers/rpmsg/qcom_glink_native.c struct qcom_glink *glink; glink 1587 drivers/rpmsg/qcom_glink_native.c glink = devm_kzalloc(dev, sizeof(*glink), GFP_KERNEL); glink 1588 drivers/rpmsg/qcom_glink_native.c if (!glink) glink 1591 drivers/rpmsg/qcom_glink_native.c glink->dev = dev; glink 1592 drivers/rpmsg/qcom_glink_native.c glink->tx_pipe = tx; glink 1593 drivers/rpmsg/qcom_glink_native.c glink->rx_pipe = rx; glink 1595 drivers/rpmsg/qcom_glink_native.c glink->features = features; glink 1596 drivers/rpmsg/qcom_glink_native.c glink->intentless = intentless; glink 1598 drivers/rpmsg/qcom_glink_native.c spin_lock_init(&glink->tx_lock); glink 1599 drivers/rpmsg/qcom_glink_native.c spin_lock_init(&glink->rx_lock); glink 1600 drivers/rpmsg/qcom_glink_native.c INIT_LIST_HEAD(&glink->rx_queue); glink 1601 drivers/rpmsg/qcom_glink_native.c INIT_WORK(&glink->rx_work, qcom_glink_work); glink 1603 drivers/rpmsg/qcom_glink_native.c spin_lock_init(&glink->idr_lock); glink 1604 drivers/rpmsg/qcom_glink_native.c idr_init(&glink->lcids); glink 1605 drivers/rpmsg/qcom_glink_native.c idr_init(&glink->rcids); glink 1607 drivers/rpmsg/qcom_glink_native.c ret = of_property_read_string(dev->of_node, "label", &glink->name); glink 1609 drivers/rpmsg/qcom_glink_native.c glink->name = dev->of_node->name; glink 1611 drivers/rpmsg/qcom_glink_native.c glink->mbox_client.dev = dev; glink 1612 drivers/rpmsg/qcom_glink_native.c glink->mbox_client.knows_txdone = true; glink 1613 drivers/rpmsg/qcom_glink_native.c glink->mbox_chan = mbox_request_channel(&glink->mbox_client, 0); glink 1614 drivers/rpmsg/qcom_glink_native.c if (IS_ERR(glink->mbox_chan)) { glink 1615 drivers/rpmsg/qcom_glink_native.c if (PTR_ERR(glink->mbox_chan) != -EPROBE_DEFER) glink 1617 drivers/rpmsg/qcom_glink_native.c return ERR_CAST(glink->mbox_chan); glink 1624 drivers/rpmsg/qcom_glink_native.c "glink-native", glink); glink 1630 drivers/rpmsg/qcom_glink_native.c glink->irq = irq; glink 1632 drivers/rpmsg/qcom_glink_native.c ret = qcom_glink_send_version(glink); glink 1636 drivers/rpmsg/qcom_glink_native.c return glink; glink 1647 drivers/rpmsg/qcom_glink_native.c void qcom_glink_native_remove(struct qcom_glink *glink) glink 1653 drivers/rpmsg/qcom_glink_native.c disable_irq(glink->irq); glink 1654 drivers/rpmsg/qcom_glink_native.c qcom_glink_cancel_rx_work(glink); glink 1656 drivers/rpmsg/qcom_glink_native.c ret = device_for_each_child(glink->dev, NULL, qcom_glink_remove_device); glink 1658 drivers/rpmsg/qcom_glink_native.c dev_warn(glink->dev, "Can't remove GLINK devices: %d\n", ret); glink 1661 drivers/rpmsg/qcom_glink_native.c idr_for_each_entry(&glink->lcids, channel, cid) glink 1665 drivers/rpmsg/qcom_glink_native.c idr_for_each_entry(&glink->rcids, channel, cid) glink 1668 drivers/rpmsg/qcom_glink_native.c idr_destroy(&glink->lcids); glink 1669 drivers/rpmsg/qcom_glink_native.c idr_destroy(&glink->rcids); glink 1670 drivers/rpmsg/qcom_glink_native.c mbox_free_channel(glink->mbox_chan); glink 1674 drivers/rpmsg/qcom_glink_native.c void qcom_glink_native_unregister(struct qcom_glink *glink) glink 1676 drivers/rpmsg/qcom_glink_native.c device_unregister(glink->dev); glink 34 drivers/rpmsg/qcom_glink_native.h void qcom_glink_native_remove(struct qcom_glink *glink); glink 36 drivers/rpmsg/qcom_glink_native.h void qcom_glink_native_unregister(struct qcom_glink *glink); glink 259 drivers/rpmsg/qcom_glink_rpm.c struct qcom_glink *glink; glink 300 drivers/rpmsg/qcom_glink_rpm.c glink = qcom_glink_native_probe(&pdev->dev, glink 305 drivers/rpmsg/qcom_glink_rpm.c if (IS_ERR(glink)) glink 306 drivers/rpmsg/qcom_glink_rpm.c return PTR_ERR(glink); glink 308 drivers/rpmsg/qcom_glink_rpm.c platform_set_drvdata(pdev, glink); glink 315 drivers/rpmsg/qcom_glink_rpm.c struct qcom_glink *glink = platform_get_drvdata(pdev); glink 317 drivers/rpmsg/qcom_glink_rpm.c qcom_glink_native_remove(glink); glink 190 drivers/rpmsg/qcom_glink_smem.c struct qcom_glink *glink; glink 279 drivers/rpmsg/qcom_glink_smem.c glink = qcom_glink_native_probe(dev, glink 283 drivers/rpmsg/qcom_glink_smem.c if (IS_ERR(glink)) { glink 284 drivers/rpmsg/qcom_glink_smem.c ret = PTR_ERR(glink); glink 288 drivers/rpmsg/qcom_glink_smem.c return glink; glink 297 drivers/rpmsg/qcom_glink_smem.c void qcom_glink_smem_unregister(struct qcom_glink *glink) glink 299 drivers/rpmsg/qcom_glink_smem.c qcom_glink_native_remove(glink); glink 300 drivers/rpmsg/qcom_glink_smem.c qcom_glink_native_unregister(glink); glink 14 include/linux/rpmsg/qcom_glink.h void qcom_glink_smem_unregister(struct qcom_glink *glink); glink 25 include/linux/rpmsg/qcom_glink.h static inline void qcom_glink_smem_unregister(struct qcom_glink *glink) {}