platform: msm_shared: Add a separate signal for SSR Channel notification
There is a notification sent from RPM for every channel that is opened.
Sometimes when only one channel notification is used, there is a possiblity
that the second channel may not be open yet on the remote side while the
client has already started to send data. So have a separate signal for
both SSR and RPM Requests channels.
Change-Id: I6b973bd6266e79129d1febc808eb240a19228739
diff --git a/platform/msm_shared/rpm-glink.c b/platform/msm_shared/rpm-glink.c
index 77538f0..bc95db0 100644
--- a/platform/msm_shared/rpm-glink.c
+++ b/platform/msm_shared/rpm-glink.c
@@ -53,7 +53,8 @@
glink_handle_type rpm_glink_port, ssr_glink_port;
static uint32_t msg_id;
-static event_t wait_for_init;
+static event_t wait_for_rpm_init;
+static event_t wait_for_ssr_init;
static event_t wait_for_data;
extern glink_err_type glink_wait_link_down(glink_handle_type handle);
@@ -262,7 +263,17 @@
{
if(event == GLINK_CONNECTED)
{
- event_signal(&wait_for_init, false);
+ event_signal(&wait_for_rpm_init, false);
+ dprintf(INFO, "Glink Connection between APPS and RPM established\n");
+ return;
+ }
+}
+
+void rpm_glink_notify_state_ssr_isr(glink_handle_type handle, void *data, glink_channel_event_type event)
+{
+ if(event == GLINK_CONNECTED)
+ {
+ event_signal(&wait_for_ssr_init, false);
dprintf(INFO, "Glink Connection between APPS and RPM established\n");
return;
}
@@ -303,7 +314,7 @@
glink_ssr_open_cfg.notify_rx = NULL;
glink_ssr_open_cfg.notify_rxv = (glink_rxv_notification_cb)rpm_vector_glink_ssr_isr;
glink_ssr_open_cfg.notify_tx_done = (glink_tx_notification_cb)rpm_glink_tx_done_isr;
- glink_ssr_open_cfg.notify_state = (glink_state_notification_cb)rpm_glink_notify_state_isr;
+ glink_ssr_open_cfg.notify_state = (glink_state_notification_cb)rpm_glink_notify_state_ssr_isr;
glink_ssr_open_cfg.priv = NULL;
ret = glink_open(&glink_ssr_open_cfg, &ssr_glink_port);
@@ -321,7 +332,8 @@
{
glink_err_type ret;
glink_link_id_type link_id;
- event_init(&wait_for_init, false, EVENT_FLAG_AUTOUNSIGNAL);
+ event_init(&wait_for_rpm_init, false, EVENT_FLAG_AUTOUNSIGNAL);
+ event_init(&wait_for_ssr_init, false, EVENT_FLAG_AUTOUNSIGNAL);
dprintf(INFO, "RPM GLink Init\n");
// Initialize RPM transport
@@ -339,7 +351,8 @@
dprintf(CRITICAL, "RPM Glink Init Failure 0x%x\n", ret);
ASSERT(0);
}
- event_wait(&wait_for_init);
+ event_wait(&wait_for_rpm_init);
+ event_wait(&wait_for_ssr_init);
}
void rpm_glink_uninit()