summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSrinivas Girigowda <sgirigow@qca.qualcomm.com>2014-07-14 14:11:50 -0700
committerPitani Venkata Rajesh Kumar <c_vpitan@qti.qualcomm.com>2014-08-20 13:16:53 +0530
commitd23aaae4b7ac8dcf54cdb5877ab47c6f468ba92b (patch)
tree98da8a87ef2be223592e3cab5498f0eccf121aca
parent80a5941c16c67f77b899fde16abcdb8aaf6a3e01 (diff)
qcacld: extscan: Change double pointer to variable length array
Change double pointer to variable length array Change-Id: I7612897460586f26bd6645469fb2f8fd62ce2491 CRs-Fixed: 710071
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg80211.c170
-rw-r--r--CORE/MAC/inc/sirApi.h7
-rw-r--r--CORE/SERVICES/WMA/wma.c19
3 files changed, 109 insertions, 87 deletions
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index c3d0559e1349..6922626cfe6a 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -13691,13 +13691,12 @@ int wlan_hdd_cfg80211_set_ap_channel_width(struct wiphy *wiphy,
#ifdef FEATURE_WLAN_EXTSCAN
-static void wlan_hdd_cfg80211_extscan_get_capabilities_ind(void *ctx,
- void *pMsg)
+static void
+wlan_hdd_cfg80211_extscan_get_capabilities_ind(void *ctx,
+ tpSirExtScanCapabilitiesEvent pData)
{
hdd_context_t *pHddCtx = (hdd_context_t *)ctx;
struct sk_buff *skb = NULL;
- tpSirExtScanCapabilitiesEvent pData =
- (tpSirExtScanCapabilitiesEvent) pMsg;
ENTER();
@@ -13772,11 +13771,11 @@ nla_put_failure:
}
-static void wlan_hdd_cfg80211_extscan_start_rsp(void *ctx, void *pMsg)
+static void
+wlan_hdd_cfg80211_extscan_start_rsp(void *ctx, tpSirExtScanStartRspParams pData)
{
- tpSirExtScanStartRspParams pData = (tpSirExtScanStartRspParams) pMsg;
- hdd_context_t *pHddCtx = (hdd_context_t *)ctx;
- struct sk_buff *skb = NULL;
+ hdd_context_t *pHddCtx = (hdd_context_t *)ctx;
+ struct sk_buff *skb = NULL;
ENTER();
@@ -13814,11 +13813,11 @@ nla_put_failure:
}
-static void wlan_hdd_cfg80211_extscan_stop_rsp(void *ctx, void *pMsg)
+static void
+wlan_hdd_cfg80211_extscan_stop_rsp(void *ctx, tpSirExtScanStopRspParams pData)
{
- tpSirExtScanStopRspParams pData = (tpSirExtScanStopRspParams) pMsg;
- hdd_context_t *pHddCtx = (hdd_context_t *)ctx;
- struct sk_buff *skb = NULL;
+ hdd_context_t *pHddCtx = (hdd_context_t *)ctx;
+ struct sk_buff *skb = NULL;
if (wlan_hdd_validate_context(pHddCtx) || !pData) {
hddLog(VOS_TRACE_LEVEL_ERROR, FL("HDD context is not valid "
@@ -13854,13 +13853,12 @@ nla_put_failure:
}
-static void wlan_hdd_cfg80211_extscan_set_bss_hotlist_rsp(void *ctx,
- void *pMsg)
+static void
+wlan_hdd_cfg80211_extscan_set_bss_hotlist_rsp(void *ctx,
+ tpSirExtScanSetBssidHotListRspParams pData)
{
hdd_context_t *pHddCtx = (hdd_context_t *)ctx;
struct sk_buff *skb = NULL;
- tpSirExtScanSetBssidHotListRspParams pData =
- (tpSirExtScanSetBssidHotListRspParams) pMsg;
ENTER();
@@ -13897,13 +13895,12 @@ nla_put_failure:
return;
}
-static void wlan_hdd_cfg80211_extscan_reset_bss_hotlist_rsp(void *ctx,
- void *pMsg)
+static void
+wlan_hdd_cfg80211_extscan_reset_bss_hotlist_rsp(void *ctx,
+ tpSirExtScanResetBssidHotlistRspParams pData)
{
hdd_context_t *pHddCtx = (hdd_context_t *)ctx;
struct sk_buff *skb = NULL;
- tpSirExtScanResetBssidHotlistRspParams pData =
- (tpSirExtScanResetBssidHotlistRspParams) pMsg;
ENTER();
@@ -13941,13 +13938,12 @@ nla_put_failure:
}
-static void wlan_hdd_cfg80211_extscan_set_signf_wifi_change_rsp(void *ctx,
- void *pMsg)
+static void
+wlan_hdd_cfg80211_extscan_set_signf_wifi_change_rsp(void *ctx,
+ tpSirExtScanSetSignificantChangeRspParams pData)
{
hdd_context_t *pHddCtx = (hdd_context_t *)ctx;
struct sk_buff *skb = NULL;
- tpSirExtScanSetSignificantChangeRspParams pData =
- (tpSirExtScanSetSignificantChangeRspParams) pMsg;
ENTER();
@@ -13986,13 +13982,12 @@ nla_put_failure:
}
-static void wlan_hdd_cfg80211_extscan_reset_signf_wifi_change_rsp(void *ctx,
- void *pMsg)
+static void
+wlan_hdd_cfg80211_extscan_reset_signf_wifi_change_rsp(void *ctx,
+ tpSirExtScanResetSignificantChangeRspParams pData)
{
hdd_context_t *pHddCtx = (hdd_context_t *)ctx;
struct sk_buff *skb = NULL;
- tpSirExtScanResetSignificantChangeRspParams pData =
- (tpSirExtScanResetSignificantChangeRspParams) pMsg;
ENTER();
@@ -14030,13 +14025,13 @@ nla_put_failure:
return;
}
-static void wlan_hdd_cfg80211_extscan_cached_results_ind(void *ctx,
- void *pMsg)
+static void
+wlan_hdd_cfg80211_extscan_cached_results_ind(void *ctx,
+ tpSirWifiScanResultEvent pData)
{
hdd_context_t *pHddCtx = (hdd_context_t *)ctx;
struct sk_buff *skb = NULL;
tANI_U32 i;
- tpSirWifiScanResultEvent pData = (tpSirWifiScanResultEvent) pMsg;
ENTER();
@@ -14165,10 +14160,10 @@ fail:
return;
}
-static void wlan_hdd_cfg80211_extscan_hotlist_match_ind(void *ctx,
- void *pMsg)
+static void
+wlan_hdd_cfg80211_extscan_hotlist_match_ind(void *ctx,
+ tpSirWifiScanResultEvent pData)
{
- tpSirWifiScanResultEvent pData = (tpSirWifiScanResultEvent) pMsg;
hdd_context_t *pHddCtx = (hdd_context_t *)ctx;
struct sk_buff *skb = NULL;
tANI_U32 i;
@@ -14280,14 +14275,17 @@ fail:
}
-static void wlan_hdd_cfg80211_extscan_signif_wifi_change_results_ind(void *ctx,
- void *pMsg)
+static void
+wlan_hdd_cfg80211_extscan_signif_wifi_change_results_ind(
+ void *ctx,
+ tpSirWifiSignificantChangeEvent pData)
{
- hdd_context_t *pHddCtx = (hdd_context_t *)ctx;
+ hdd_context_t *pHddCtx = (hdd_context_t *)ctx;
struct sk_buff *skb = NULL;
+ tSirWifiSignificantChange *ap_info;
+ tANI_S32 *rssi;
tANI_U32 i, j;
- tpSirWifiSignificantChangeEvent pData =
- (tpSirWifiSignificantChangeEvent) pMsg;
+
ENTER();
if (wlan_hdd_validate_context(pHddCtx) || !pData) {
@@ -14310,17 +14308,21 @@ static void wlan_hdd_cfg80211_extscan_signif_wifi_change_results_ind(void *ctx,
hddLog(VOS_TRACE_LEVEL_INFO, "Num results (%u)", pData->numResults);
hddLog(VOS_TRACE_LEVEL_INFO, "More Data (%u)", pData->moreData);
+ ap_info = &pData->ap[0];
for (i = 0; i < pData->numResults; i++) {
hddLog(VOS_TRACE_LEVEL_INFO, "[index=%d] "
"Bssid (" MAC_ADDRESS_STR ") "
"Channel (%u) "
"numOfRssi (%d)",
i,
- MAC_ADDR_ARRAY(pData->ap[i]->bssid),
- pData->ap[i]->channel,
- pData->ap[i]->numOfRssi);
- for (j = 0; j < pData->ap[i]->numOfRssi; j++)
- hddLog(VOS_TRACE_LEVEL_INFO, "Rssi (%d)", pData->ap[i]->rssi[j]);
+ MAC_ADDR_ARRAY(ap_info->bssid),
+ ap_info->channel,
+ ap_info->numOfRssi);
+ rssi = &(ap_info)->rssi[0];
+ for (j = 0; j < ap_info->numOfRssi; j++)
+ hddLog(VOS_TRACE_LEVEL_INFO, "Rssi (%d)", *rssi++);
+
+ ap_info += ap_info->numOfRssi * sizeof(*rssi);
}
if (nla_put_u32(skb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_REQUEST_ID,
@@ -14339,6 +14341,7 @@ static void wlan_hdd_cfg80211_extscan_signif_wifi_change_results_ind(void *ctx,
if (!aps)
goto fail;
+ ap_info = &pData->ap[0];
for (i = 0; i < pData->numResults; i++) {
struct nlattr *ap;
@@ -14348,19 +14351,21 @@ static void wlan_hdd_cfg80211_extscan_signif_wifi_change_results_ind(void *ctx,
if (nla_put(skb,
QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SIGNIFICANT_CHANGE_RESULT_BSSID,
- sizeof(tSirMacAddr), pData->ap[i]->bssid) ||
+ sizeof(tSirMacAddr), ap_info->bssid) ||
nla_put_u32(skb,
QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SIGNIFICANT_CHANGE_RESULT_CHANNEL,
- pData->ap[i]->channel) ||
+ ap_info->channel) ||
nla_put_u32(skb,
QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SIGNIFICANT_CHANGE_RESULT_NUM_RSSI,
- pData->ap[i]->numOfRssi) ||
+ ap_info->numOfRssi) ||
nla_put(skb,
QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SIGNIFICANT_CHANGE_RESULT_RSSI_LIST,
- sizeof(s32) * pData->ap[i]->numOfRssi, pData->ap[i]->rssi))
+ sizeof(s32) * ap_info->numOfRssi, &(ap_info)->rssi[0]))
goto fail;
nla_nest_end(skb, ap);
+
+ ap_info += ap_info->numOfRssi * sizeof(*rssi);
}
nla_nest_end(skb, aps);
@@ -14379,13 +14384,12 @@ fail:
}
-static void wlan_hdd_cfg80211_extscan_full_scan_result_event(void *ctx,
- void *pMsg)
+static void
+wlan_hdd_cfg80211_extscan_full_scan_result_event(void *ctx,
+ tpSirWifiFullScanResultEvent pData)
{
hdd_context_t *pHddCtx = (hdd_context_t *)ctx;
struct sk_buff *skb = NULL;
- tpSirWifiFullScanResultEvent pData =
- (tpSirWifiFullScanResultEvent) pMsg;
ENTER();
@@ -14475,13 +14479,12 @@ nla_put_failure:
return;
}
-static void wlan_hdd_cfg80211_extscan_scan_res_available_event(void *ctx,
- void *pMsg)
+static void
+wlan_hdd_cfg80211_extscan_scan_res_available_event(void *ctx,
+ tpSirExtScanResultsAvailableIndParams pData)
{
hdd_context_t *pHddCtx = (hdd_context_t *)ctx;
struct sk_buff *skb = NULL;
- tpSirExtScanResultsAvailableIndParams pData =
- (tpSirExtScanResultsAvailableIndParams) pMsg;
ENTER();
@@ -14522,13 +14525,12 @@ nla_put_failure:
return;
}
-static void wlan_hdd_cfg80211_extscan_scan_progress_event(void *ctx,
- void *pMsg)
+static void
+wlan_hdd_cfg80211_extscan_scan_progress_event(void *ctx,
+ tpSirExtScanOnScanEventIndParams pData)
{
hdd_context_t *pHddCtx = (hdd_context_t *)ctx;
struct sk_buff *skb = NULL;
- tpSirExtScanOnScanEventIndParams pData =
- (tpSirExtScanOnScanEventIndParams) pMsg;
ENTER();
@@ -14548,10 +14550,13 @@ static void wlan_hdd_cfg80211_extscan_scan_progress_event(void *ctx,
FL("cfg80211_vendor_event_alloc failed"));
return;
}
+ hddLog(VOS_TRACE_LEVEL_INFO, "Request Id (%u)", pData->requestId);
hddLog(VOS_TRACE_LEVEL_INFO, "Scan event type (%u)", pData->scanEventType);
hddLog(VOS_TRACE_LEVEL_INFO, "Scan event status (%u)", pData->status);
- if (nla_put_u8(skb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_EVENT_TYPE,
+ if (nla_put_u32(skb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_REQUEST_ID,
+ pData->requestId) ||
+ nla_put_u8(skb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_EVENT_TYPE,
pData->scanEventType) ||
nla_put_u32(skb,
QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_EVENT_STATUS,
@@ -14570,7 +14575,7 @@ nla_put_failure:
void wlan_hdd_cfg80211_extscan_callback(void *ctx, const tANI_U16 evType,
- void *pMsg)
+ void *pMsg)
{
hdd_context_t *pHddCtx = (hdd_context_t *)ctx;
@@ -14584,11 +14589,13 @@ void wlan_hdd_cfg80211_extscan_callback(void *ctx, const tANI_U16 evType,
switch (evType) {
case eSIR_EXTSCAN_START_RSP:
- wlan_hdd_cfg80211_extscan_start_rsp(ctx, pMsg);
+ wlan_hdd_cfg80211_extscan_start_rsp(ctx,
+ (tpSirExtScanStartRspParams)pMsg);
break;
case eSIR_EXTSCAN_STOP_RSP:
- wlan_hdd_cfg80211_extscan_stop_rsp(ctx, pMsg);
+ wlan_hdd_cfg80211_extscan_stop_rsp(ctx,
+ (tpSirExtScanStopRspParams)pMsg);
break;
case eSIR_EXTSCAN_CACHED_RESULTS_RSP:
@@ -14599,48 +14606,59 @@ void wlan_hdd_cfg80211_extscan_callback(void *ctx, const tANI_U16 evType,
break;
case eSIR_EXTSCAN_SET_BSSID_HOTLIST_RSP:
- wlan_hdd_cfg80211_extscan_set_bss_hotlist_rsp(ctx, pMsg);
+ wlan_hdd_cfg80211_extscan_set_bss_hotlist_rsp(ctx,
+ (tpSirExtScanSetBssidHotListRspParams)pMsg);
break;
case eSIR_EXTSCAN_RESET_BSSID_HOTLIST_RSP:
- wlan_hdd_cfg80211_extscan_reset_bss_hotlist_rsp(ctx, pMsg);
+ wlan_hdd_cfg80211_extscan_reset_bss_hotlist_rsp(ctx,
+ (tpSirExtScanResetBssidHotlistRspParams)pMsg);
break;
case eSIR_EXTSCAN_SET_SIGNIFICANT_WIFI_CHANGE_RSP:
- wlan_hdd_cfg80211_extscan_set_signf_wifi_change_rsp(ctx, pMsg);
+ wlan_hdd_cfg80211_extscan_set_signf_wifi_change_rsp(ctx,
+ (tpSirExtScanSetSignificantChangeRspParams)pMsg);
break;
case eSIR_EXTSCAN_RESET_SIGNIFICANT_WIFI_CHANGE_RSP:
- wlan_hdd_cfg80211_extscan_reset_signf_wifi_change_rsp(ctx, pMsg);
+ wlan_hdd_cfg80211_extscan_reset_signf_wifi_change_rsp(ctx,
+ (tpSirExtScanResetSignificantChangeRspParams)pMsg);
break;
case eSIR_EXTSCAN_GET_CAPABILITIES_IND:
- wlan_hdd_cfg80211_extscan_get_capabilities_ind(ctx, pMsg);
+ wlan_hdd_cfg80211_extscan_get_capabilities_ind(ctx,
+ (tpSirExtScanCapabilitiesEvent)pMsg);
break;
case eSIR_EXTSCAN_HOTLIST_MATCH_IND:
- wlan_hdd_cfg80211_extscan_hotlist_match_ind(ctx, pMsg);
+ wlan_hdd_cfg80211_extscan_hotlist_match_ind(ctx,
+ (tpSirWifiScanResultEvent)pMsg);
break;
case eSIR_EXTSCAN_SIGNIFICANT_WIFI_CHANGE_RESULTS_IND:
- wlan_hdd_cfg80211_extscan_signif_wifi_change_results_ind(ctx,
- pMsg);
+ wlan_hdd_cfg80211_extscan_signif_wifi_change_results_ind(
+ ctx,
+ (tpSirWifiSignificantChangeEvent)pMsg);
break;
case eSIR_EXTSCAN_CACHED_RESULTS_IND:
- wlan_hdd_cfg80211_extscan_cached_results_ind(ctx, pMsg);
+ wlan_hdd_cfg80211_extscan_cached_results_ind(ctx,
+ (tpSirWifiScanResultEvent)pMsg);
break;
case eSIR_EXTSCAN_SCAN_RES_AVAILABLE_IND:
- wlan_hdd_cfg80211_extscan_scan_res_available_event(ctx, pMsg);
+ wlan_hdd_cfg80211_extscan_scan_res_available_event(ctx,
+ (tpSirExtScanResultsAvailableIndParams)pMsg);
break;
case eSIR_EXTSCAN_FULL_SCAN_RESULT_IND:
- wlan_hdd_cfg80211_extscan_full_scan_result_event(ctx, pMsg);
+ wlan_hdd_cfg80211_extscan_full_scan_result_event(ctx,
+ (tpSirWifiFullScanResultEvent)pMsg);
break;
case eSIR_EXTSCAN_SCAN_PROGRESS_EVENT_IND:
- wlan_hdd_cfg80211_extscan_scan_progress_event(ctx, pMsg);
+ wlan_hdd_cfg80211_extscan_scan_progress_event(ctx,
+ (tpSirExtScanOnScanEventIndParams)pMsg);
break;
default:
diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h
index 6217bb47cdad..c56d506223c4 100644
--- a/CORE/MAC/inc/sirApi.h
+++ b/CORE/MAC/inc/sirApi.h
@@ -5049,7 +5049,7 @@ typedef struct
tANI_U32 numOfRssi;
/* Rssi history in db */
- tANI_S32 *rssi;
+ tANI_S32 rssi[];
} tSirWifiSignificantChange, *tpSirWifiSignificantChange;
typedef struct
@@ -5058,7 +5058,7 @@ typedef struct
tANI_BOOLEAN moreData;
tANI_U32 numResults;
- tSirWifiSignificantChange **ap;
+ tSirWifiSignificantChange ap[];
} tSirWifiSignificantChangeEvent, *tpSirWifiSignificantChangeEvent;
typedef struct
@@ -5096,8 +5096,9 @@ typedef struct
typedef struct
{
- tANI_U8 scanEventType;
+ tANI_U32 requestId;
tANI_U32 status;
+ tANI_U8 scanEventType;
} tSirExtScanOnScanEventIndParams,
*tpSirExtScanOnScanEventIndParams;
diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c
index 8ea40dfda88b..7c1fbf8d0b88 100644
--- a/CORE/SERVICES/WMA/wma.c
+++ b/CORE/SERVICES/WMA/wma.c
@@ -2233,6 +2233,9 @@ static int wma_extscan_operations_event_handler(void *handle,
vos_mem_free(oprn_ind);
return -EINVAL;
}
+
+ oprn_ind->requestId = oprn_event->request_id;
+
switch (oprn_event->event) {
case WMI_EXTSCAN_CYCLE_COMPLETED_EVENT:
oprn_ind->scanEventType = WIFI_SCAN_COMPLETE;
@@ -2538,7 +2541,7 @@ static int wma_extscan_change_results_event_handler(void *handle,
WMI_EXTSCAN_WLAN_CHANGE_RESULTS_EVENTID_param_tlvs *param_buf;
wmi_extscan_wlan_change_results_event_fixed_param *event;
tSirWifiSignificantChangeEvent *dest_chglist;
- tSirWifiSignificantChange **dest_ap;
+ tSirWifiSignificantChange *dest_ap;
wmi_extscan_wlan_change_result_bssid *src_chglist;
int numap;
@@ -2592,18 +2595,18 @@ static int wma_extscan_change_results_event_handler(void *handle,
}
dest_ap = &dest_chglist->ap[0];
for (i = 0; i < numap; i++) {
- (*dest_ap)->channel = src_chglist->channel;
+ dest_ap->channel = src_chglist->channel;
WMI_MAC_ADDR_TO_CHAR_ARRAY(&src_chglist->bssid,
- (*dest_ap)->bssid);
- (*dest_ap)->numOfRssi =
+ dest_ap->bssid);
+ dest_ap->numOfRssi =
src_chglist->num_rssi_samples;
- if ((*dest_ap)->numOfRssi) {
- for (k = 0; k < (*dest_ap)->numOfRssi; k++) {
- (*dest_ap)->rssi[k] = WMA_TGT_NOISE_FLOOR_DBM +
+ if (dest_ap->numOfRssi) {
+ for (k = 0; k < dest_ap->numOfRssi; k++) {
+ dest_ap->rssi[k] = WMA_TGT_NOISE_FLOOR_DBM +
src_rssi[count++];
}
}
- dest_ap++;
+ dest_ap += dest_ap->numOfRssi * sizeof(tANI_S32);
src_chglist++;
}
dest_chglist->requestId = event->request_id;