Skip to content

Commit

Permalink
rpmsg: glink: Use the intents passed by remote
Browse files Browse the repository at this point in the history
While sending data, use the remote intent id buffer of suitable size
that was passed by remote previously.

Acked-by: Arun Kumar Neelakantam <aneela@codeaurora.org>
Signed-off-by: Sricharan R <sricharan@codeaurora.org>
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
  • Loading branch information
Sricharan R authored and Bjorn Andersson committed Aug 30, 2017
1 parent dacbb35 commit 11cb45a
Showing 1 changed file with 33 additions and 2 deletions.
35 changes: 33 additions & 2 deletions drivers/rpmsg/qcom_glink_native.c
Original file line number Diff line number Diff line change
Expand Up @@ -1110,19 +1110,50 @@ static int __qcom_glink_send(struct glink_channel *channel,
void *data, int len, bool wait)
{
struct qcom_glink *glink = channel->glink;
struct glink_core_rx_intent *intent = NULL;
struct glink_core_rx_intent *tmp;
int iid = 0;
struct {
struct glink_msg msg;
__le32 chunk_size;
__le32 left_size;
} __packed req;
int ret;
unsigned long flags;

if (!glink->intentless) {
if (!intent) {
spin_lock_irqsave(&channel->intent_lock, flags);
idr_for_each_entry(&channel->riids, tmp, iid) {
if (tmp->size >= len && !tmp->in_use) {
tmp->in_use = true;
intent = tmp;
break;
}
}
spin_unlock_irqrestore(&channel->intent_lock, flags);

/* We found an available intent */
if (!intent)
return -EBUSY;
}

iid = intent->id;
}

req.msg.cmd = cpu_to_le16(RPM_CMD_TX_DATA);
req.msg.param1 = cpu_to_le16(channel->lcid);
req.msg.param2 = cpu_to_le32(channel->rcid);
req.msg.param2 = cpu_to_le32(iid);
req.chunk_size = cpu_to_le32(len);
req.left_size = cpu_to_le32(0);

return qcom_glink_tx(glink, &req, sizeof(req), data, len, wait);
ret = qcom_glink_tx(glink, &req, sizeof(req), data, len, wait);

/* Mark intent available if we failed */
if (ret)
intent->in_use = false;

return ret;
}

static int qcom_glink_send(struct rpmsg_endpoint *ept, void *data, int len)
Expand Down

0 comments on commit 11cb45a

Please sign in to comment.