summaryrefslogtreecommitdiff
path: root/drivers/net/wireless/sd8797/mlan/mlan_meas.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/sd8797/mlan/mlan_meas.c')
-rw-r--r--drivers/net/wireless/sd8797/mlan/mlan_meas.c438
1 files changed, 222 insertions, 216 deletions
diff --git a/drivers/net/wireless/sd8797/mlan/mlan_meas.c b/drivers/net/wireless/sd8797/mlan/mlan_meas.c
index 19c4131c7bc1..723ed43c0762 100644
--- a/drivers/net/wireless/sd8797/mlan/mlan_meas.c
+++ b/drivers/net/wireless/sd8797/mlan/mlan_meas.c
@@ -4,14 +4,14 @@
* @brief Implementation of measurement interface code with the app/firmware
*
* Driver implementation for sending and retrieving measurement requests
- * and responses.
- *
+ * and responses.
+ *
* Current use is limited to 802.11h.
*
* Requires use of the following preprocessor define:
* - ENABLE_MEAS
*
- * Copyright (C) 2008-2011, Marvell International Ltd.
+ * Copyright (C) 2008-2011, Marvell International Ltd.
*
* This software file (the "File") is distributed by Marvell International
* Ltd. under the terms of the GNU General Public License Version 2, June 1991
@@ -20,7 +20,7 @@
* is available by writing to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA or on the
* worldwide web at http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
- *
+ *
* THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE
* IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
* ARE EXPRESSLY DISCLAIMED. The License provides additional details about
@@ -41,33 +41,33 @@ Change Log:
#include "mlan_meas.h"
/** Default measurement duration when not provided by the application */
-#define WLAN_MEAS_DEFAULT_MEAS_DURATION 1000U /* TUs */
+#define WLAN_MEAS_DEFAULT_MEAS_DURATION 1000U /* TUs */
#ifdef DEBUG_LEVEL2
/** String descriptions of the different measurement enums. Debug display */
static const char *meas_type_str[WLAN_MEAS_NUM_TYPES] = {
- "basic",
+ "basic",
};
/********************************************************
Local Functions
********************************************************/
-/**
+/**
* @brief Retrieve the measurement string representation of a meas_type enum
* Used for debug display only
*
* @param meas_type Measurement type enumeration input for string lookup
- *
+ *
* @return Constant string representing measurement type
*/
static const char *
wlan_meas_get_meas_type_str(MeasType_t meas_type)
{
- if (meas_type <= WLAN_MEAS_11H_MAX_TYPE)
- return meas_type_str[meas_type];
+ if (meas_type <= WLAN_MEAS_11H_MAX_TYPE)
+ return meas_type_str[meas_type];
- return "Invld";
+ return "Invld";
}
#endif
@@ -81,42 +81,44 @@ wlan_meas_get_meas_type_str(MeasType_t meas_type)
static void
wlan_meas_dump_meas_req(const HostCmd_DS_MEASUREMENT_REQUEST * pmeas_req)
{
- ENTER();
+ ENTER();
- PRINTM(MINFO, "Meas: Req: ------------------------------\n");
+ PRINTM(MINFO, "Meas: Req: ------------------------------\n");
- PRINTM(MINFO, "Meas: Req: mac_addr: " MACSTR "\n",
- MAC2STR(pmeas_req->mac_addr));
+ PRINTM(MINFO, "Meas: Req: mac_addr: " MACSTR "\n",
+ MAC2STR(pmeas_req->mac_addr));
- PRINTM(MINFO, "Meas: Req: dlgTkn: %d\n", pmeas_req->dialog_token);
- PRINTM(MINFO, "Meas: Req: mode: dm[%c] rpt[%c] req[%c]\n",
- pmeas_req->req_mode.duration_mandatory ? 'X' : ' ',
- pmeas_req->req_mode.report ? 'X' : ' ',
- pmeas_req->req_mode.request ? 'X' : ' ');
- PRINTM(MINFO, "Meas: Req: : en[%c] par[%c]\n",
- pmeas_req->req_mode.enable ? 'X' : ' ',
- pmeas_req->req_mode.parallel ? 'X' : ' ');
+ PRINTM(MINFO, "Meas: Req: dlgTkn: %d\n", pmeas_req->dialog_token);
+ PRINTM(MINFO, "Meas: Req: mode: dm[%c] rpt[%c] req[%c]\n",
+ pmeas_req->req_mode.duration_mandatory ? 'X' : ' ',
+ pmeas_req->req_mode.report ? 'X' : ' ',
+ pmeas_req->req_mode.request ? 'X' : ' ');
+ PRINTM(MINFO, "Meas: Req: : en[%c] par[%c]\n",
+ pmeas_req->req_mode.enable ? 'X' : ' ',
+ pmeas_req->req_mode.parallel ? 'X' : ' ');
#ifdef DEBUG_LEVEL2
- PRINTM(MINFO, "Meas: Req: measTyp: %s\n",
- wlan_meas_get_meas_type_str(pmeas_req->meas_type));
+ PRINTM(MINFO, "Meas: Req: measTyp: %s\n",
+ wlan_meas_get_meas_type_str(pmeas_req->meas_type));
#endif
- switch (pmeas_req->meas_type) {
- case WLAN_MEAS_BASIC:
- /* Lazy cheat, fields of bas, cca, rpi union match on the request */
- PRINTM(MINFO, "Meas: Req: chan: %u\n", pmeas_req->req.basic.channel);
- PRINTM(MINFO, "Meas: Req: strt: %llu\n",
- wlan_le64_to_cpu(pmeas_req->req.basic.start_time));
- PRINTM(MINFO, "Meas: Req: dur: %u\n",
- wlan_le16_to_cpu(pmeas_req->req.basic.duration));
- break;
- default:
- PRINTM(MINFO, "Meas: Req: <unhandled>\n");
- break;
- }
-
- PRINTM(MINFO, "Meas: Req: ------------------------------\n");
- LEAVE();
+ switch (pmeas_req->meas_type) {
+ case WLAN_MEAS_BASIC:
+ /* Lazy cheat, fields of bas, cca, rpi union match on the
+ request */
+ PRINTM(MINFO, "Meas: Req: chan: %u\n",
+ pmeas_req->req.basic.channel);
+ PRINTM(MINFO, "Meas: Req: strt: %llu\n",
+ wlan_le64_to_cpu(pmeas_req->req.basic.start_time));
+ PRINTM(MINFO, "Meas: Req: dur: %u\n",
+ wlan_le16_to_cpu(pmeas_req->req.basic.duration));
+ break;
+ default:
+ PRINTM(MINFO, "Meas: Req: <unhandled>\n");
+ break;
+ }
+
+ PRINTM(MINFO, "Meas: Req: ------------------------------\n");
+ LEAVE();
}
/**
@@ -129,113 +131,117 @@ wlan_meas_dump_meas_req(const HostCmd_DS_MEASUREMENT_REQUEST * pmeas_req)
static void
wlan_meas_dump_meas_rpt(const HostCmd_DS_MEASUREMENT_REPORT * pmeas_rpt)
{
- ENTER();
+ ENTER();
- PRINTM(MINFO, "Meas: Rpt: ------------------------------\n");
- PRINTM(MINFO, "Meas: Rpt: mac_addr: " MACSTR "\n",
- MAC2STR(pmeas_rpt->mac_addr));
+ PRINTM(MINFO, "Meas: Rpt: ------------------------------\n");
+ PRINTM(MINFO, "Meas: Rpt: mac_addr: " MACSTR "\n",
+ MAC2STR(pmeas_rpt->mac_addr));
- PRINTM(MINFO, "Meas: Rpt: dlgTkn: %d\n", pmeas_rpt->dialog_token);
+ PRINTM(MINFO, "Meas: Rpt: dlgTkn: %d\n", pmeas_rpt->dialog_token);
- PRINTM(MINFO, "Meas: Rpt: rptMode: (%x): Rfs[%c] ICp[%c] Lt[%c]\n",
- *(t_u8 *) & pmeas_rpt->rpt_mode,
- pmeas_rpt->rpt_mode.refused ? 'X' : ' ',
- pmeas_rpt->rpt_mode.incapable ? 'X' : ' ',
- pmeas_rpt->rpt_mode.late ? 'X' : ' ');
+ PRINTM(MINFO, "Meas: Rpt: rptMode: (%x): Rfs[%c] ICp[%c] Lt[%c]\n",
+ *(t_u8 *) & pmeas_rpt->rpt_mode,
+ pmeas_rpt->rpt_mode.refused ? 'X' : ' ',
+ pmeas_rpt->rpt_mode.incapable ? 'X' : ' ',
+ pmeas_rpt->rpt_mode.late ? 'X' : ' ');
#ifdef DEBUG_LEVEL2
- PRINTM(MINFO, "Meas: Rpt: measTyp: %s\n",
- wlan_meas_get_meas_type_str(pmeas_rpt->meas_type));
+ PRINTM(MINFO, "Meas: Rpt: measTyp: %s\n",
+ wlan_meas_get_meas_type_str(pmeas_rpt->meas_type));
#endif
- switch (pmeas_rpt->meas_type) {
- case WLAN_MEAS_BASIC:
- PRINTM(MINFO, "Meas: Rpt: chan: %u\n", pmeas_rpt->rpt.basic.channel);
- PRINTM(MINFO, "Meas: Rpt: strt: %llu\n",
- wlan_le64_to_cpu(pmeas_rpt->rpt.basic.start_time));
- PRINTM(MINFO, "Meas: Rpt: dur: %u\n",
- wlan_le16_to_cpu(pmeas_rpt->rpt.basic.duration));
- PRINTM(MINFO, "Meas: Rpt: bas: (%x): unmsd[%c], radar[%c]\n",
- *(t_u8 *) & (pmeas_rpt->rpt.basic.map),
- pmeas_rpt->rpt.basic.map.unmeasured ? 'X' : ' ',
- pmeas_rpt->rpt.basic.map.radar ? 'X' : ' ');
- PRINTM(MINFO, "Meas: Rpt: bas: unidSig[%c] ofdm[%c] bss[%c]\n",
- pmeas_rpt->rpt.basic.map.unidentified_sig ? 'X' : ' ',
- pmeas_rpt->rpt.basic.map.ofdm_preamble ? 'X' : ' ',
- pmeas_rpt->rpt.basic.map.bss ? 'X' : ' ');
- break;
- default:
- PRINTM(MINFO, "Meas: Rpt: <unhandled>\n");
- break;
- }
-
- PRINTM(MINFO, "Meas: Rpt: ------------------------------\n");
- LEAVE();
+ switch (pmeas_rpt->meas_type) {
+ case WLAN_MEAS_BASIC:
+ PRINTM(MINFO, "Meas: Rpt: chan: %u\n",
+ pmeas_rpt->rpt.basic.channel);
+ PRINTM(MINFO, "Meas: Rpt: strt: %llu\n",
+ wlan_le64_to_cpu(pmeas_rpt->rpt.basic.start_time));
+ PRINTM(MINFO, "Meas: Rpt: dur: %u\n",
+ wlan_le16_to_cpu(pmeas_rpt->rpt.basic.duration));
+ PRINTM(MINFO, "Meas: Rpt: bas: (%x): unmsd[%c], radar[%c]\n",
+ *(t_u8 *) & (pmeas_rpt->rpt.basic.map),
+ pmeas_rpt->rpt.basic.map.unmeasured ? 'X' : ' ',
+ pmeas_rpt->rpt.basic.map.radar ? 'X' : ' ');
+ PRINTM(MINFO, "Meas: Rpt: bas: unidSig[%c] ofdm[%c] bss[%c]\n",
+ pmeas_rpt->rpt.basic.map.unidentified_sig ? 'X' : ' ',
+ pmeas_rpt->rpt.basic.map.ofdm_preamble ? 'X' : ' ',
+ pmeas_rpt->rpt.basic.map.bss ? 'X' : ' ');
+ break;
+ default:
+ PRINTM(MINFO, "Meas: Rpt: <unhandled>\n");
+ break;
+ }
+
+ PRINTM(MINFO, "Meas: Rpt: ------------------------------\n");
+ LEAVE();
}
/**
* @brief Retrieve a measurement report from the firmware
- *
+ *
* Callback from command processing when a measurement report is received
* from the firmware. Perform the following when a report is received:
*
* -# Debug displays the report if compiled with the appropriate flags
- * -# If we are pending on a specific measurement report token, and it
+ * -# If we are pending on a specific measurement report token, and it
* matches the received report's token, store the report and wake up
* any pending threads
*
* @param pmpriv Private driver information structure
* @param resp HostCmd_DS_COMMAND struct returned from the firmware command
- * passing a HostCmd_DS_MEASUREMENT_REPORT structure.
+ * passing a HostCmd_DS_MEASUREMENT_REPORT structure.
*
* @return MLAN_STATUS_SUCCESS
*/
static int
wlan_meas_cmdresp_get_report(mlan_private * pmpriv,
- const HostCmd_DS_COMMAND * resp)
+ const HostCmd_DS_COMMAND * resp)
{
- mlan_adapter *pmadapter = pmpriv->adapter;
- const HostCmd_DS_MEASUREMENT_REPORT *pmeas_rpt = &resp->params.meas_rpt;
+ mlan_adapter *pmadapter = pmpriv->adapter;
+ const HostCmd_DS_MEASUREMENT_REPORT *pmeas_rpt = &resp->params.meas_rpt;
- ENTER();
+ ENTER();
- PRINTM(MINFO, "Meas: Rpt: %#x-%u, Seq=%u, Ret=%u\n",
- resp->command, resp->size, resp->seq_num, resp->result);
+ PRINTM(MINFO, "Meas: Rpt: %#x-%u, Seq=%u, Ret=%u\n",
+ resp->command, resp->size, resp->seq_num, resp->result);
- /* Debug displays the measurement report */
- wlan_meas_dump_meas_rpt(pmeas_rpt);
+ /* Debug displays the measurement report */
+ wlan_meas_dump_meas_rpt(pmeas_rpt);
- /*
- * Check if we are pending on a measurement report and it matches
- * the dialog token of the received report:
- */
- if (pmadapter->state_meas.meas_rpt_pend_on
- && pmadapter->state_meas.meas_rpt_pend_on == pmeas_rpt->dialog_token) {
- PRINTM(MINFO, "Meas: Rpt: RCV'd Pend on meas #%d\n",
- pmadapter->state_meas.meas_rpt_pend_on);
+ /*
+ * Check if we are pending on a measurement report and it matches
+ * the dialog token of the received report:
+ */
+ if (pmadapter->state_meas.meas_rpt_pend_on
+ && pmadapter->state_meas.meas_rpt_pend_on ==
+ pmeas_rpt->dialog_token) {
+ PRINTM(MINFO, "Meas: Rpt: RCV'd Pend on meas #%d\n",
+ pmadapter->state_meas.meas_rpt_pend_on);
- /* Clear the pending report indicator */
- pmadapter->state_meas.meas_rpt_pend_on = 0;
+ /* Clear the pending report indicator */
+ pmadapter->state_meas.meas_rpt_pend_on = 0;
- /* Copy the received report into the measurement state for retrieval */
- memcpy(pmadapter, &pmadapter->state_meas.meas_rpt_returned, pmeas_rpt,
- sizeof(pmadapter->state_meas.meas_rpt_returned));
+ /* Copy the received report into the measurement state for
+ retrieval */
+ memcpy(pmadapter, &pmadapter->state_meas.meas_rpt_returned,
+ pmeas_rpt,
+ sizeof(pmadapter->state_meas.meas_rpt_returned));
- /*
- * Wake up any threads pending on the wait queue
- */
- wlan_recv_event(pmpriv, MLAN_EVENT_ID_DRV_MEAS_REPORT, MNULL);
- }
+ /*
+ * Wake up any threads pending on the wait queue
+ */
+ wlan_recv_event(pmpriv, MLAN_EVENT_ID_DRV_MEAS_REPORT, MNULL);
+ }
- LEAVE();
+ LEAVE();
- return MLAN_STATUS_SUCCESS;
+ return MLAN_STATUS_SUCCESS;
}
/**
* @brief Prepare CMD_MEASURMENT_REPORT firmware command
*
* @param pmpriv Private driver information structure
- * @param pcmd_ptr Output parameter: Pointer to the command being prepared
+ * @param pcmd_ptr Output parameter: Pointer to the command being prepared
* for the firmware
* @param pinfo_buf HostCmd_DS_MEASUREMENT_REQUEST passed as void data block
*
@@ -243,40 +249,40 @@ wlan_meas_cmdresp_get_report(mlan_private * pmpriv,
*/
static int
wlan_meas_cmd_request(mlan_private * pmpriv,
- HostCmd_DS_COMMAND * pcmd_ptr, const void *pinfo_buf)
+ HostCmd_DS_COMMAND * pcmd_ptr, const void *pinfo_buf)
{
- const HostCmd_DS_MEASUREMENT_REQUEST *pmeas_req =
- (HostCmd_DS_MEASUREMENT_REQUEST *) pinfo_buf;
+ const HostCmd_DS_MEASUREMENT_REQUEST *pmeas_req =
+ (HostCmd_DS_MEASUREMENT_REQUEST *) pinfo_buf;
- ENTER();
+ ENTER();
- pcmd_ptr->command = HostCmd_CMD_MEASUREMENT_REQUEST;
- pcmd_ptr->size = sizeof(HostCmd_DS_MEASUREMENT_REQUEST) + S_DS_GEN;
+ pcmd_ptr->command = HostCmd_CMD_MEASUREMENT_REQUEST;
+ pcmd_ptr->size = sizeof(HostCmd_DS_MEASUREMENT_REQUEST) + S_DS_GEN;
- memcpy(pmpriv->adapter, &pcmd_ptr->params.meas_req, pmeas_req,
- sizeof(pcmd_ptr->params.meas_req));
+ memcpy(pmpriv->adapter, &pcmd_ptr->params.meas_req, pmeas_req,
+ sizeof(pcmd_ptr->params.meas_req));
- PRINTM(MINFO, "Meas: Req: %#x-%u, Seq=%u, Ret=%u\n",
- pcmd_ptr->command, pcmd_ptr->size, pcmd_ptr->seq_num,
- pcmd_ptr->result);
+ PRINTM(MINFO, "Meas: Req: %#x-%u, Seq=%u, Ret=%u\n",
+ pcmd_ptr->command, pcmd_ptr->size, pcmd_ptr->seq_num,
+ pcmd_ptr->result);
- wlan_meas_dump_meas_req(pmeas_req);
+ wlan_meas_dump_meas_req(pmeas_req);
- LEAVE();
+ LEAVE();
- return MLAN_STATUS_SUCCESS;
+ return MLAN_STATUS_SUCCESS;
}
/**
* @brief Retrieve a measurement report from the firmware
*
- * The firmware will send a EVENT_MEAS_REPORT_RDY event when it
+ * The firmware will send a EVENT_MEAS_REPORT_RDY event when it
* completes or receives a measurement report. The event response
* handler will then start a HostCmd_CMD_MEASUREMENT_REPORT firmware command
* which gets completed for transmission to the firmware in this routine.
*
* @param pmpriv Private driver information structure
- * @param pcmd_ptr Output parameter: Pointer to the command being prepared
+ * @param pcmd_ptr Output parameter: Pointer to the command being prepared
* for the firmware
*
* @return MLAN_STATUS_SUCCESS
@@ -284,41 +290,41 @@ wlan_meas_cmd_request(mlan_private * pmpriv,
static int
wlan_meas_cmd_get_report(mlan_private * pmpriv, HostCmd_DS_COMMAND * pcmd_ptr)
{
- ENTER();
+ ENTER();
- pcmd_ptr->command = HostCmd_CMD_MEASUREMENT_REPORT;
- pcmd_ptr->size = sizeof(HostCmd_DS_MEASUREMENT_REPORT) + S_DS_GEN;
+ pcmd_ptr->command = HostCmd_CMD_MEASUREMENT_REPORT;
+ pcmd_ptr->size = sizeof(HostCmd_DS_MEASUREMENT_REPORT) + S_DS_GEN;
- memset(pmpriv->adapter, &pcmd_ptr->params.meas_rpt, 0x00,
- sizeof(pcmd_ptr->params.meas_rpt));
+ memset(pmpriv->adapter, &pcmd_ptr->params.meas_rpt, 0x00,
+ sizeof(pcmd_ptr->params.meas_rpt));
- /*
- * Set the meas_rpt.mac_addr to our mac address to get a meas report,
- * setting the mac to another STA address instructs the firmware
- * to transmit this measurement report frame instead
- */
- memcpy(pmpriv->adapter, pcmd_ptr->params.meas_rpt.mac_addr,
- pmpriv->curr_addr, sizeof(pcmd_ptr->params.meas_rpt.mac_addr));
+ /*
+ * Set the meas_rpt.mac_addr to our mac address to get a meas report,
+ * setting the mac to another STA address instructs the firmware
+ * to transmit this measurement report frame instead
+ */
+ memcpy(pmpriv->adapter, pcmd_ptr->params.meas_rpt.mac_addr,
+ pmpriv->curr_addr, sizeof(pcmd_ptr->params.meas_rpt.mac_addr));
- LEAVE();
+ LEAVE();
- return MLAN_STATUS_SUCCESS;
+ return MLAN_STATUS_SUCCESS;
}
/********************************************************
Global functions
********************************************************/
-/**
+/**
* @brief Send the input measurement request to the firmware.
*
* If the dialog token in the measurement request is set to 0, the function
* will use an local static auto-incremented token in the measurement
* request. This ensures the dialog token is always set.
*
- * If wait_for_resp_timeout is set, the function will block its return on
+ * If wait_for_resp_timeout is set, the function will block its return on
* a timeout or returned measurement report that matches the requests
- * dialog token.
+ * dialog token.
*
* @param pmpriv Private driver information structure
* @param pmeas_req Pointer to the measurement request to send
@@ -336,43 +342,43 @@ wlan_meas_cmd_get_report(mlan_private * pmpriv, HostCmd_DS_COMMAND * pcmd_ptr)
*/
int
wlan_meas_util_send_req(mlan_private * pmpriv,
- HostCmd_DS_MEASUREMENT_REQUEST * pmeas_req,
- t_u32 wait_for_resp_timeout, pmlan_ioctl_req pioctl_req,
- HostCmd_DS_MEASUREMENT_REPORT * pmeas_rpt)
+ HostCmd_DS_MEASUREMENT_REQUEST * pmeas_req,
+ t_u32 wait_for_resp_timeout, pmlan_ioctl_req pioctl_req,
+ HostCmd_DS_MEASUREMENT_REPORT * pmeas_rpt)
{
- static t_u8 auto_dialog_tok = 0;
- wlan_meas_state_t *pmeas_state = &pmpriv->adapter->state_meas;
- int ret;
-
- ENTER();
-
- /* If dialogTok was set to 0 or not provided, autoset */
- pmeas_req->dialog_token = (pmeas_req->dialog_token ?
- pmeas_req->dialog_token : ++auto_dialog_tok);
-
- /* Check for rollover of the dialog token. Avoid using 0 as a token */
- pmeas_req->dialog_token = (pmeas_req->dialog_token ?
- pmeas_req->dialog_token : 1);
-
- /*
- * If the request is to pend waiting for the result, set the dialog token
- * of this measurement request in the state structure. The measurement
- * report handling routines can then check the incoming measurement
- * reports for a match with this dialog token.
- */
- if (wait_for_resp_timeout) {
- pmeas_state->meas_rpt_pend_on = pmeas_req->dialog_token;
- PRINTM(MINFO, "Meas: Req: START Pend on meas #%d\n",
- pmeas_req->dialog_token);
- }
-
- /* Send the measurement request to the firmware */
- ret = wlan_prepare_cmd(pmpriv, HostCmd_CMD_MEASUREMENT_REQUEST,
- HostCmd_ACT_GEN_SET,
- 0, (t_void *) pioctl_req, (void *) pmeas_req);
-
- LEAVE();
- return ret;
+ static t_u8 auto_dialog_tok = 0;
+ wlan_meas_state_t *pmeas_state = &pmpriv->adapter->state_meas;
+ int ret;
+
+ ENTER();
+
+ /* If dialogTok was set to 0 or not provided, autoset */
+ pmeas_req->dialog_token = (pmeas_req->dialog_token ?
+ pmeas_req->dialog_token : ++auto_dialog_tok);
+
+ /* Check for rollover of the dialog token. Avoid using 0 as a token */
+ pmeas_req->dialog_token = (pmeas_req->dialog_token ?
+ pmeas_req->dialog_token : 1);
+
+ /*
+ * If the request is to pend waiting for the result, set the dialog token
+ * of this measurement request in the state structure. The measurement
+ * report handling routines can then check the incoming measurement
+ * reports for a match with this dialog token.
+ */
+ if (wait_for_resp_timeout) {
+ pmeas_state->meas_rpt_pend_on = pmeas_req->dialog_token;
+ PRINTM(MINFO, "Meas: Req: START Pend on meas #%d\n",
+ pmeas_req->dialog_token);
+ }
+
+ /* Send the measurement request to the firmware */
+ ret = wlan_prepare_cmd(pmpriv, HostCmd_CMD_MEASUREMENT_REQUEST,
+ HostCmd_ACT_GEN_SET,
+ 0, (t_void *) pioctl_req, (void *)pmeas_req);
+
+ LEAVE();
+ return ret;
}
/**
@@ -385,7 +391,7 @@ wlan_meas_util_send_req(mlan_private * pmpriv,
* - HostCmd_CMD_MEASUREMENT_REPORT
*
* @param pmpriv Private driver information structure
- * @param pcmd_ptr Output parameter: Pointer to the command being prepared
+ * @param pcmd_ptr Output parameter: Pointer to the command being prepared
* for the firmware
* @param pinfo_buf Void buffer passthrough with data necessary for a
* specific command type
@@ -395,30 +401,30 @@ wlan_meas_util_send_req(mlan_private * pmpriv,
*/
int
wlan_meas_cmd_process(mlan_private * pmpriv,
- HostCmd_DS_COMMAND * pcmd_ptr, const void *pinfo_buf)
+ HostCmd_DS_COMMAND * pcmd_ptr, const void *pinfo_buf)
{
- int ret = MLAN_STATUS_SUCCESS;
-
- ENTER();
- switch (pcmd_ptr->command) {
- case HostCmd_CMD_MEASUREMENT_REQUEST:
- ret = wlan_meas_cmd_request(pmpriv, pcmd_ptr, pinfo_buf);
- break;
- case HostCmd_CMD_MEASUREMENT_REPORT:
- ret = wlan_meas_cmd_get_report(pmpriv, pcmd_ptr);
- break;
- default:
- ret = MLAN_STATUS_FAILURE;
- }
-
- pcmd_ptr->command = wlan_cpu_to_le16(pcmd_ptr->command);
- pcmd_ptr->size = wlan_cpu_to_le16(pcmd_ptr->size);
- LEAVE();
- return ret;
+ int ret = MLAN_STATUS_SUCCESS;
+
+ ENTER();
+ switch (pcmd_ptr->command) {
+ case HostCmd_CMD_MEASUREMENT_REQUEST:
+ ret = wlan_meas_cmd_request(pmpriv, pcmd_ptr, pinfo_buf);
+ break;
+ case HostCmd_CMD_MEASUREMENT_REPORT:
+ ret = wlan_meas_cmd_get_report(pmpriv, pcmd_ptr);
+ break;
+ default:
+ ret = MLAN_STATUS_FAILURE;
+ }
+
+ pcmd_ptr->command = wlan_cpu_to_le16(pcmd_ptr->command);
+ pcmd_ptr->size = wlan_cpu_to_le16(pcmd_ptr->size);
+ LEAVE();
+ return ret;
}
/**
- * @brief Handle the command response from the firmware for a measurement
+ * @brief Handle the command response from the firmware for a measurement
* command
*
* Use the Command field to determine if the command response being
@@ -434,23 +440,23 @@ wlan_meas_cmd_process(mlan_private * pmpriv,
*/
int
wlan_meas_cmdresp_process(mlan_private * pmpriv,
- const HostCmd_DS_COMMAND * resp)
+ const HostCmd_DS_COMMAND * resp)
{
- int ret = MLAN_STATUS_SUCCESS;
-
- ENTER();
- switch (resp->command) {
- case HostCmd_CMD_MEASUREMENT_REQUEST:
- PRINTM(MINFO, "Meas: Req Resp: Sz=%u, Seq=%u, Ret=%u\n",
- resp->size, resp->seq_num, resp->result);
- break;
- case HostCmd_CMD_MEASUREMENT_REPORT:
- ret = wlan_meas_cmdresp_get_report(pmpriv, resp);
- break;
- default:
- ret = MLAN_STATUS_FAILURE;
- }
-
- LEAVE();
- return ret;
+ int ret = MLAN_STATUS_SUCCESS;
+
+ ENTER();
+ switch (resp->command) {
+ case HostCmd_CMD_MEASUREMENT_REQUEST:
+ PRINTM(MINFO, "Meas: Req Resp: Sz=%u, Seq=%u, Ret=%u\n",
+ resp->size, resp->seq_num, resp->result);
+ break;
+ case HostCmd_CMD_MEASUREMENT_REPORT:
+ ret = wlan_meas_cmdresp_get_report(pmpriv, resp);
+ break;
+ default:
+ ret = MLAN_STATUS_FAILURE;
+ }
+
+ LEAVE();
+ return ret;
}