summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGanesh Kondabattini <ganeshk@qti.qualcomm.com>2016-04-06 18:05:06 +0530
committerAnjaneedevi Kapparapu <akappa@codeaurora.org>2016-04-22 17:11:40 +0530
commitba2f4bde6ddd16d4fad6cdd0ff86c25f4814eef9 (patch)
tree3e59b7e92937e794e1dcffc3cf4ffe20a985f653
parente3587a617b7fc25c3e4811bae09eb678d6348e68 (diff)
qcacld-2.0: Pass radio index in svc events
The smart connection manager expects the radio index in dual wifi case to take the proper action for received wlan svc events. Change-Id: Ie89b15dc62879f90e93e5ee8cf2ea4dc74f88542 CRs-Fixed: 1000468
-rw-r--r--CORE/HDD/inc/wlan_hdd_main.h2
-rw-r--r--CORE/HDD/src/wlan_hdd_dp_utils.c7
-rw-r--r--CORE/HDD/src/wlan_hdd_early_suspend.c3
-rw-r--r--CORE/HDD/src/wlan_hdd_hostapd.c24
-rw-r--r--CORE/HDD/src/wlan_hdd_main.c88
-rw-r--r--CORE/SVC/external/wlan_nlink_common.h6
-rw-r--r--CORE/SVC/inc/wlan_ptt_sock_svc.h10
7 files changed, 89 insertions, 51 deletions
diff --git a/CORE/HDD/inc/wlan_hdd_main.h b/CORE/HDD/inc/wlan_hdd_main.h
index 8f129875260a..a973aa28548c 100644
--- a/CORE/HDD/inc/wlan_hdd_main.h
+++ b/CORE/HDD/inc/wlan_hdd_main.h
@@ -1958,7 +1958,7 @@ void wlan_hdd_send_version_pkg(v_U32_t fw_version,
const char *chip_name);
void wlan_hdd_send_all_scan_intf_info(hdd_context_t *pHddCtx);
#endif
-void wlan_hdd_send_svc_nlink_msg(int type, void *data, int len);
+void wlan_hdd_send_svc_nlink_msg(int radio, int type, void *data, int len);
#ifdef FEATURE_WLAN_AUTO_SHUTDOWN
void wlan_hdd_auto_shutdown_enable(hdd_context_t *hdd_ctx, v_U8_t enable);
#endif
diff --git a/CORE/HDD/src/wlan_hdd_dp_utils.c b/CORE/HDD/src/wlan_hdd_dp_utils.c
index 87a50a7acbc3..16b93924670c 100644
--- a/CORE/HDD/src/wlan_hdd_dp_utils.c
+++ b/CORE/HDD/src/wlan_hdd_dp_utils.c
@@ -272,9 +272,10 @@ void hdd_dp_util_send_rps_ind(hdd_context_t *hdd_ctxt)
adapter = adapter_node->pAdapter;
if (NULL != adapter) {
strlcpy(rps_data.ifname, adapter->dev->name,
- sizeof(rps_data.ifname));
- wlan_hdd_send_svc_nlink_msg(WLAN_SVC_RPS_ENABLE_IND,
- &rps_data, sizeof(rps_data));
+ sizeof(rps_data.ifname));
+ wlan_hdd_send_svc_nlink_msg(hdd_ctxt->radio_index,
+ WLAN_SVC_RPS_ENABLE_IND,
+ &rps_data, sizeof(rps_data));
}
status = hdd_get_next_adapter (hdd_ctxt, adapter_node, &next);
adapter_node = next;
diff --git a/CORE/HDD/src/wlan_hdd_early_suspend.c b/CORE/HDD/src/wlan_hdd_early_suspend.c
index c450d4e69052..cbf51899b763 100644
--- a/CORE/HDD/src/wlan_hdd_early_suspend.c
+++ b/CORE/HDD/src/wlan_hdd_early_suspend.c
@@ -2305,7 +2305,8 @@ VOS_STATUS hdd_wlan_re_init(void *hif_sc)
hdd_register_mcast_bcast_filter(pHddCtx);
hdd_ssr_timer_del();
- wlan_hdd_send_svc_nlink_msg(WLAN_SVC_FW_CRASHED_IND, NULL, 0);
+ wlan_hdd_send_svc_nlink_msg(pHddCtx->radio_index,
+ WLAN_SVC_FW_CRASHED_IND, NULL, 0);
/* Allow the phone to go to sleep */
hdd_allow_suspend(WIFI_POWER_EVENT_WAKELOCK_DRIVER_REINIT);
diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c
index 1422ceb7969e..aa40347f359a 100644
--- a/CORE/HDD/src/wlan_hdd_hostapd.c
+++ b/CORE/HDD/src/wlan_hdd_hostapd.c
@@ -1608,8 +1608,10 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa
goto stopbss;
case eSAP_DFS_CAC_START:
- wlan_hdd_send_svc_nlink_msg(WLAN_SVC_DFS_CAC_START_IND,
- &dfs_info, sizeof(struct wlan_dfs_info));
+ wlan_hdd_send_svc_nlink_msg(pHddCtx->radio_index,
+ WLAN_SVC_DFS_CAC_START_IND,
+ &dfs_info,
+ sizeof(dfs_info));
pHddCtx->dev_dfs_cac_status = DFS_CAC_IN_PROGRESS;
if (VOS_STATUS_SUCCESS !=
hdd_send_radar_event(pHddCtx, eSAP_DFS_CAC_START,
@@ -1643,8 +1645,10 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa
break;
case eSAP_DFS_CAC_END:
- wlan_hdd_send_svc_nlink_msg(WLAN_SVC_DFS_CAC_END_IND,
- &dfs_info, sizeof(struct wlan_dfs_info));
+ wlan_hdd_send_svc_nlink_msg(pHddCtx->radio_index,
+ WLAN_SVC_DFS_CAC_END_IND,
+ &dfs_info,
+ sizeof(dfs_info));
pHddApCtx->dfs_cac_block_tx = VOS_FALSE;
pHddCtx->dev_dfs_cac_status = DFS_CAC_ALREADY_DONE;
if (VOS_STATUS_SUCCESS !=
@@ -1658,8 +1662,10 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa
break;
case eSAP_DFS_RADAR_DETECT:
- wlan_hdd_send_svc_nlink_msg(WLAN_SVC_DFS_RADAR_DETECT_IND,
- &dfs_info, sizeof(struct wlan_dfs_info));
+ wlan_hdd_send_svc_nlink_msg(pHddCtx->radio_index,
+ WLAN_SVC_DFS_RADAR_DETECT_IND,
+ &dfs_info,
+ sizeof(dfs_info));
pHddCtx->dev_dfs_cac_status = DFS_CAC_NEVER_DONE;
if (VOS_STATUS_SUCCESS !=
hdd_send_radar_event(pHddCtx, eSAP_DFS_RADAR_DETECT,
@@ -1672,8 +1678,10 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa
break;
case eSAP_DFS_NO_AVAILABLE_CHANNEL:
- wlan_hdd_send_svc_nlink_msg(WLAN_SVC_DFS_ALL_CHANNEL_UNAVAIL_IND,
- &dfs_info, sizeof(struct wlan_dfs_info));
+ wlan_hdd_send_svc_nlink_msg(pHddCtx->radio_index,
+ WLAN_SVC_DFS_ALL_CHANNEL_UNAVAIL_IND,
+ &dfs_info,
+ sizeof(dfs_info));
break;
case eSAP_STA_SET_KEY_EVENT:
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index a8ab4ef603d3..4be7de1f1e0d 100644
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -13515,7 +13515,8 @@ void hdd_cnss_request_bus_bandwidth(hdd_context_t *pHddCtx,
"%s: TCP DELACK trigger level %d, average_rx: %llu",
__func__, next_rx_level, temp_rx);
pHddCtx->cur_rx_level = next_rx_level;
- wlan_hdd_send_svc_nlink_msg(WLAN_SVC_WLAN_TP_IND,
+ wlan_hdd_send_svc_nlink_msg(pHddCtx->radio_index,
+ WLAN_SVC_WLAN_TP_IND,
&next_rx_level,
sizeof(next_rx_level));
}
@@ -13533,7 +13534,8 @@ void hdd_cnss_request_bus_bandwidth(hdd_context_t *pHddCtx,
"%s: change TCP TX trigger level %d, average_tx: %llu ",
__func__, next_tx_level, temp_tx);
pHddCtx->cur_tx_level = next_tx_level;
- wlan_hdd_send_svc_nlink_msg(WLAN_SVC_WLAN_TP_TX_IND,
+ wlan_hdd_send_svc_nlink_msg(pHddCtx->radio_index,
+ WLAN_SVC_WLAN_TP_TX_IND,
&next_tx_level,
sizeof(next_tx_level));
}
@@ -16588,7 +16590,9 @@ void hdd_ch_avoid_cb
&& !restart_sap_in_progress) {
hddLog(LOG1, FL("Restarting SAP"));
- wlan_hdd_send_svc_nlink_msg(WLAN_SVC_LTE_COEX_IND, NULL, 0);
+ wlan_hdd_send_svc_nlink_msg(hdd_ctxt->radio_index,
+ WLAN_SVC_LTE_COEX_IND, NULL,
+ 0);
restart_sap_in_progress = 1;
/* current operating channel is un-safe channel,
* restart driver
@@ -16793,13 +16797,12 @@ void wlan_hdd_enable_roaming(hdd_adapter_t *pAdapter)
#endif
-void wlan_hdd_send_svc_nlink_msg(int type, void *data, int len)
+void wlan_hdd_send_svc_nlink_msg(int radio, int type, void *data, int len)
{
struct sk_buff *skb;
- struct nlmsghdr *nlh;
- tAniMsgHdr *ani_hdr;
void *nl_data = NULL;
int flags = GFP_KERNEL;
+ tAniNlHdr *wnl;
if (in_interrupt() || irqs_disabled() || in_atomic())
flags = GFP_ATOMIC;
@@ -16811,15 +16814,13 @@ void wlan_hdd_send_svc_nlink_msg(int type, void *data, int len)
"%s: alloc_skb failed", __func__);
return;
}
-
- nlh = (struct nlmsghdr *)skb->data;
- nlh->nlmsg_pid = 0; /* from kernel */
- nlh->nlmsg_flags = 0;
- nlh->nlmsg_seq = 0;
- nlh->nlmsg_type = WLAN_NL_MSG_SVC;
-
- ani_hdr = NLMSG_DATA(nlh);
- ani_hdr->type = type;
+ wnl = (tAniNlHdr *)skb->data;
+ wnl->nlh.nlmsg_pid = 0;
+ wnl->nlh.nlmsg_flags = 0;
+ wnl->nlh.nlmsg_seq = 0;
+ wnl->nlh.nlmsg_type = WLAN_NL_MSG_SVC;
+ wnl->radio = radio;
+ wnl->wmsg.type = type;
switch(type) {
case WLAN_SVC_FW_CRASHED_IND:
@@ -16827,9 +16828,10 @@ void wlan_hdd_send_svc_nlink_msg(int type, void *data, int len)
#ifdef FEATURE_WLAN_AUTO_SHUTDOWN
case WLAN_SVC_WLAN_AUTO_SHUTDOWN_IND:
#endif
- ani_hdr->length = 0;
- nlh->nlmsg_len = NLMSG_LENGTH((sizeof(tAniMsgHdr)));
- skb_put(skb, NLMSG_SPACE(sizeof(tAniMsgHdr)));
+ wnl->wmsg.length = 0;
+ wnl->nlh.nlmsg_len = NLMSG_LENGTH(
+ (sizeof(tAniMsgHdr) + sizeof(wnl->radio)));
+ skb_put(skb, NLMSG_SPACE(wnl->nlh.nlmsg_len));
break;
case WLAN_SVC_WLAN_STATUS_IND:
case WLAN_SVC_WLAN_VERSION_IND:
@@ -16840,11 +16842,13 @@ void wlan_hdd_send_svc_nlink_msg(int type, void *data, int len)
case WLAN_SVC_WLAN_TP_IND:
case WLAN_SVC_WLAN_TP_TX_IND:
case WLAN_SVC_RPS_ENABLE_IND:
- ani_hdr->length = len;
- nlh->nlmsg_len = NLMSG_LENGTH((sizeof(tAniMsgHdr) + len));
- nl_data = (char *)ani_hdr + sizeof(tAniMsgHdr);
+ wnl->wmsg.length = len;
+ wnl->nlh.nlmsg_len = NLMSG_LENGTH(
+ (sizeof(wnl->radio) + sizeof(tAniMsgHdr) + len));
+ nl_data = (char *)wnl + sizeof(tAniNlHdr);
memcpy(nl_data, data, len);
- skb_put(skb, NLMSG_SPACE(sizeof(tAniMsgHdr) + len));
+ skb_put(skb, NLMSG_SPACE(
+ sizeof(wnl->radio) + sizeof(tAniMsgHdr) + len));
break;
default:
@@ -16867,6 +16871,8 @@ void wlan_hdd_send_status_pkg(hdd_adapter_t *pAdapter,
{
int ret = 0;
struct wlan_status_data data;
+ hdd_context_t *hdd_ctx;
+ v_PVOID_t vos_ctx;
if (VOS_FTM_MODE == hdd_get_conparam())
return;
@@ -16875,9 +16881,21 @@ void wlan_hdd_send_status_pkg(hdd_adapter_t *pAdapter,
if (is_on)
ret = wlan_hdd_gen_wlan_status_pack(&data, pAdapter, pHddStaCtx,
is_on, is_connected);
- if (!ret)
- wlan_hdd_send_svc_nlink_msg(WLAN_SVC_WLAN_STATUS_IND,
- &data, sizeof(struct wlan_status_data));
+ if (!ret) {
+ if (pAdapter) {
+ hdd_ctx = WLAN_HDD_GET_CTX(pAdapter);
+ } else {
+ vos_ctx = vos_get_global_context(VOS_MODULE_ID_HDD, NULL);
+ hdd_ctx = vos_get_context(VOS_MODULE_ID_HDD, vos_ctx);
+ }
+
+ if (!hdd_ctx)
+ return;
+
+ wlan_hdd_send_svc_nlink_msg(hdd_ctx->radio_index,
+ WLAN_SVC_WLAN_STATUS_IND,
+ &data, sizeof(struct wlan_status_data));
+ }
}
void wlan_hdd_send_version_pkg(v_U32_t fw_version,
@@ -16886,14 +16904,21 @@ void wlan_hdd_send_version_pkg(v_U32_t fw_version,
{
int ret = 0;
struct wlan_version_data data;
+ v_PVOID_t vos_ctx = vos_get_global_context(VOS_MODULE_ID_HDD, NULL);
+ hdd_context_t *hdd_ctx = vos_get_context(VOS_MODULE_ID_HDD, vos_ctx);
if (VOS_FTM_MODE == hdd_get_conparam())
return;
+ if (!hdd_ctx)
+ return;
+
memset(&data, 0, sizeof(struct wlan_version_data));
- ret = wlan_hdd_gen_wlan_version_pack(&data, fw_version, chip_id, chip_name);
+ ret = wlan_hdd_gen_wlan_version_pack(&data, fw_version, chip_id,
+ chip_name);
if (!ret)
- wlan_hdd_send_svc_nlink_msg(WLAN_SVC_WLAN_VERSION_IND,
+ wlan_hdd_send_svc_nlink_msg(hdd_ctx->radio_index,
+ WLAN_SVC_WLAN_VERSION_IND,
&data, sizeof(struct wlan_version_data));
}
@@ -16934,8 +16959,15 @@ void wlan_hdd_send_all_scan_intf_info(hdd_context_t *pHddCtx)
#ifdef FEATURE_WLAN_AUTO_SHUTDOWN
v_VOID_t wlan_hdd_auto_shutdown_cb(v_VOID_t)
{
+ v_PVOID_t vos_ctx = vos_get_global_context(VOS_MODULE_ID_HDD, NULL);
+ hdd_context_t *hdd_ctx = vos_get_context(VOS_MODULE_ID_HDD, vos_ctx);
+
+ if (!hdd_ctx)
+ return;
+
hddLog(LOGE, FL("%s: Wlan Idle. Sending Shutdown event.."),__func__);
- wlan_hdd_send_svc_nlink_msg(WLAN_SVC_WLAN_AUTO_SHUTDOWN_IND, NULL, 0);
+ wlan_hdd_send_svc_nlink_msg(hdd_ctx->radio_index,
+ WLAN_SVC_WLAN_AUTO_SHUTDOWN_IND, NULL, 0);
}
void wlan_hdd_auto_shutdown_enable(hdd_context_t *hdd_ctx, v_BOOL_t enable)
diff --git a/CORE/SVC/external/wlan_nlink_common.h b/CORE/SVC/external/wlan_nlink_common.h
index 8bf9f87e3b10..bed5ea3bc508 100644
--- a/CORE/SVC/external/wlan_nlink_common.h
+++ b/CORE/SVC/external/wlan_nlink_common.h
@@ -139,6 +139,12 @@ typedef struct sAniHdr {
unsigned short length;
} tAniHdr, tAniMsgHdr;
+typedef struct sAniNlMsg {
+ struct nlmsghdr nlh; // Netlink Header
+ int radio; // unit number of the radio
+ tAniHdr wmsg; // Airgo Message Header
+} tAniNlHdr;
+
struct wlan_status_data {
uint8_t lpss_support;
uint8_t is_on;
diff --git a/CORE/SVC/inc/wlan_ptt_sock_svc.h b/CORE/SVC/inc/wlan_ptt_sock_svc.h
index a662d95255f3..bf4fa61e7cc7 100644
--- a/CORE/SVC/inc/wlan_ptt_sock_svc.h
+++ b/CORE/SVC/inc/wlan_ptt_sock_svc.h
@@ -100,16 +100,6 @@
int ptt_sock_activate_svc(void *pAdapter);
int ptt_sock_send_msg_to_app(tAniHdr *wmsg, int radio, int src_mod, int pid);
-/*
- * Format of message exchanged between the PTT Socket App in userspace and the
- * WLAN Driver, in either direction. Each msg will begin with this header and
- * will followed by the Quarky message
- */
-typedef struct sAniNlMsg {
- struct nlmsghdr nlh; // Netlink Header
- int radio; // unit number of the radio
- tAniHdr wmsg; // Airgo Message Header
-} tAniNlHdr;
typedef struct sAniAppRegReq {
tAniNlModTypes type; // module id
int pid; // process id