[PATCH 10/18] rpmsg: glink: Add support for TX intents
From: Sricharan R <hidden>
Date: 2017-08-22 12:35:47
Also in:
linux-arm-msm, linux-remoteproc, lkml
Hi, <snip>
spinlock intent_lock initialization is missed ?
right, should add that.
quoted
????? kref_init(&channel->refcount); ? ????? return channel;@@ -187,6 +215,7 @@ static void qcom_glink_channel_release(struct kref *ref)????? struct glink_channel *channel = container_of(ref, struct glink_channel, ?????????????????????????????? refcount); ? +??? idr_destroy(&channel->liids);idr_destroy shouldn`t be covered by intent_lock ?
hmm, will fix this.
quoted
????? kfree(channel->name); ????? kfree(channel); ? }@@ -423,6 +452,130 @@ static void qcom_glink_receive_version_ack(struct qcom_glink *glink,????? } ? } ? +/** + * qcom_glink_send_intent_req_ack() - convert an rx intent request ack cmd to +????????????????????? wire format and transmit + * @glink:??? The transport to transmit on. + * @channel:??? The glink channel + * @granted:??? The request response to encode. + * + * Return: 0 on success or standard Linux error code. + */ +static int qcom_glink_send_intent_req_ack(struct qcom_glink *glink, +????????????????????? struct glink_channel *channel, +????????????????????? bool granted) +{ +??? struct glink_msg msg; + +??? msg.cmd = cpu_to_le16(RPM_CMD_RX_INTENT_REQ_ACK); +??? msg.param1 = cpu_to_le16(channel->lcid); +??? msg.param2 = cpu_to_le32(granted); + +??? qcom_glink_tx(glink, &msg, sizeof(msg), NULL, 0, true); + +??? return 0; +} + +/** + * tx_cmd_local_rx_intent() - convert an rx intent cmd to wire format and + *?????????????? transmitcopy-paste mistake
ok.
quoted
+ * @glink:??? The transport to transmit on. + * @channel:??? The local channel + * @size:??? The intent to pass on to remote. + * + * Return: 0 on success or standard Linux error code. + */ +static int qcom_glink_advertise_intent(struct qcom_glink *glink, +?????????????????????? struct glink_channel *channel, +?????????????????????? struct glink_core_rx_intent *intent) +{ +??? struct command { +??????? u16 id; +??????? u16 lcid; +??????? u32 count; +??????? u32 size; +??????? u32 liid; +??? } __packed; +??? struct command cmd; + +??? cmd.id = cpu_to_le16(RPM_CMD_INTENT); +??? cmd.lcid = cpu_to_le16(channel->lcid); +??? cmd.count = cpu_to_le32(1); +??? cmd.size = cpu_to_le32(intent->size); +??? cmd.liid = cpu_to_le32(intent->id); + +??? qcom_glink_tx(glink, &cmd, sizeof(cmd), NULL, 0, true); + +??? return 0; +} + +static struct glink_core_rx_intent * +qcom_glink_alloc_intent(struct qcom_glink *glink, +??????????? struct glink_channel *channel, +??????????? size_t size, +??????????? bool reuseable) +{ +??? struct glink_core_rx_intent *intent; +??? int ret; +??? unsigned long flags; + +??? intent = kzalloc(sizeof(*intent), GFP_KERNEL); + +??? if (!intent) +??????? return NULL; + +??? intent->data = kzalloc(size, GFP_KERNEL); +??? if (!intent->data) +??????? return NULL; + +??? spin_lock_irqsave(&channel->intent_lock, flags); +??? ret = idr_alloc_cyclic(&channel->liids, intent, 1, -1, GFP_ATOMIC); +??? if (ret < 0) { +??????? spin_unlock_irqrestore(&channel->intent_lock, flags); +??????? return NULL; +??? } +??? spin_unlock_irqrestore(&channel->intent_lock, flags); + +??? intent->id = ret; +??? intent->size = size; +??? intent->reuse = reuseable; + +??? return intent; +} + +/** + * glink_core_rx_cmd_remote_rx_intent_req() - Receive a request for rx_intent + *??????????????????????? from remote sidecopy-paste mistake
ok. Regards, Sricharan -- "QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation --- This email has been checked for viruses by Avast antivirus software. https://www.avast.com/antivirus