wlan: Use request manager for setPktFilter IOCTL
We are transitioning to the new request manager framework. Change
wlan_hdd_set_filter() and hdd_pkt_filter_done to this framework.
Change-Id: Ie9dd9d45d46dfde009730e679e1eeb2ca0ad4cbd
CRs-Fixed: 2215446
diff --git a/CORE/HDD/src/wlan_hdd_wext.c b/CORE/HDD/src/wlan_hdd_wext.c
index 0e69ae2..43a699a 100644
--- a/CORE/HDD/src/wlan_hdd_wext.c
+++ b/CORE/HDD/src/wlan_hdd_wext.c
@@ -9348,32 +9348,21 @@
--------------------------------------------------------------------------*/
static void hdd_pkt_filter_done(void *data, v_U32_t status)
{
- struct statsContext *cbCtx = (struct statsContext *)data;
+ struct hdd_request *request;
- hddLog(VOS_TRACE_LEVEL_INFO,
- FL("Pkt Filter Clear Status : %d"), status);
+ hddLog(VOS_TRACE_LEVEL_INFO,
+ FL("Pkt Filter Clear Status : %d"), status);
- if (data == NULL)
- {
- hddLog(VOS_TRACE_LEVEL_ERROR, FL("invalid context"));
- return;
- }
+ request = hdd_request_get(data);
+ if (!request) {
+ hddLog(VOS_TRACE_LEVEL_ERROR, FL("Obsolete request"));
+ if (ioctl_debug)
+ pr_info("%s: Obsolete request", __func__);
+ return;
+ }
- spin_lock(&hdd_context_lock);
- if (cbCtx->magic != CLEAR_FILTER_MAGIC)
- {
- spin_unlock(&hdd_context_lock);
- hddLog(VOS_TRACE_LEVEL_ERROR, FL("invalid context, magic %x"), cbCtx->magic);
- if (ioctl_debug)
- {
- pr_info("%s: Invalid context, magic [%08x]\n",
- __func__, cbCtx->magic);
- }
- return;
- }
-
- complete(&cbCtx->completion);
- spin_unlock(&hdd_context_lock);
+ hdd_request_complete(request);
+ hdd_request_put(request);
}
int wlan_hdd_set_filter(hdd_adapter_t *pAdapter, tpPacketFilterCfg pRequest)
@@ -9382,8 +9371,13 @@
hdd_station_ctx_t *pHddStaCtx = &pAdapter->sessionCtx.station;
tSirRcvPktFilterCfgType packetFilterSetReq = {0};
tSirRcvFltPktClearParam packetFilterClrReq = {0};
- struct statsContext cbCtx;
int i=0, status;
+ void *cookie;
+ struct hdd_request *request;
+ static const struct hdd_request_params params = {
+ .priv_size = 0,
+ .timeout_ms = PKT_FILTER_TIMEOUT,
+ };
status = wlan_hdd_validate_context(pHddCtx);
if (0 != status)
@@ -9477,25 +9471,29 @@
pHddStaCtx->conn_info.staId[0]);
}
- init_completion(&cbCtx.completion);
- cbCtx.magic = CLEAR_FILTER_MAGIC;
- cbCtx.pAdapter = pAdapter;
- packetFilterClrReq.cbCtx = &cbCtx;
+ request = hdd_request_alloc(¶ms);
+ if (!request) {
+ hddLog(VOS_TRACE_LEVEL_ERROR, FL("Request allocation failure"));
+ return VOS_STATUS_E_NOMEM;
+ }
+ cookie = hdd_request_cookie(request);
+
+ packetFilterClrReq.cbCtx = cookie;
packetFilterClrReq.filterId = pRequest->filterId;
packetFilterClrReq.pktFilterCallback = hdd_pkt_filter_done;
- if (eHAL_STATUS_SUCCESS != sme_ReceiveFilterClearFilter(pHddCtx->hHal, &packetFilterClrReq, pAdapter->sessionId))
+ if (eHAL_STATUS_SUCCESS != sme_ReceiveFilterClearFilter(
+ pHddCtx->hHal,
+ &packetFilterClrReq,
+ pAdapter->sessionId))
{
hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Failure to execute Clear Filter",
__func__);
return -EINVAL;
}
- status = wait_for_completion_interruptible_timeout(&cbCtx.completion,
- msecs_to_jiffies(PKT_FILTER_TIMEOUT));
- spin_lock(&hdd_context_lock);
- cbCtx.magic = 0;
- spin_unlock(&hdd_context_lock);
- if (0 >= status)
+ status = hdd_request_wait_for_response(request);
+ hdd_request_put(request);
+ if (status)
{
hddLog(LOGE, FL("failure waiting for pkt_filter_comp_var %d"),
status);