diff options
| author | Ganesh Kondabattini <ganeshk@qti.qualcomm.com> | 2016-04-06 18:05:06 +0530 |
|---|---|---|
| committer | Anjaneedevi Kapparapu <akappa@codeaurora.org> | 2016-04-22 17:11:40 +0530 |
| commit | ba2f4bde6ddd16d4fad6cdd0ff86c25f4814eef9 (patch) | |
| tree | 3e59b7e92937e794e1dcffc3cf4ffe20a985f653 | |
| parent | e3587a617b7fc25c3e4811bae09eb678d6348e68 (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.h | 2 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_dp_utils.c | 7 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_early_suspend.c | 3 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_hostapd.c | 24 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_main.c | 88 | ||||
| -rw-r--r-- | CORE/SVC/external/wlan_nlink_common.h | 6 | ||||
| -rw-r--r-- | CORE/SVC/inc/wlan_ptt_sock_svc.h | 10 |
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 |
