|
@@ -1971,9 +1971,34 @@ int mwifiex_cmd_802_11_scan_ext(struct mwifiex_private *priv,
|
|
|
/* This function handles the command response of extended scan */
|
|
|
int mwifiex_ret_802_11_scan_ext(struct mwifiex_private *priv)
|
|
|
{
|
|
|
+ struct mwifiex_adapter *adapter = priv->adapter;
|
|
|
+ struct host_cmd_ds_command *cmd_ptr;
|
|
|
+ struct cmd_ctrl_node *cmd_node;
|
|
|
+ unsigned long cmd_flags, scan_flags;
|
|
|
+ bool complete_scan = false;
|
|
|
+
|
|
|
dev_dbg(priv->adapter->dev, "info: EXT scan returns successfully\n");
|
|
|
|
|
|
- mwifiex_complete_scan(priv);
|
|
|
+ spin_lock_irqsave(&adapter->cmd_pending_q_lock, cmd_flags);
|
|
|
+ spin_lock_irqsave(&adapter->scan_pending_q_lock, scan_flags);
|
|
|
+ if (list_empty(&adapter->scan_pending_q)) {
|
|
|
+ complete_scan = true;
|
|
|
+ list_for_each_entry(cmd_node, &adapter->cmd_pending_q, list) {
|
|
|
+ cmd_ptr = (void *)cmd_node->cmd_skb->data;
|
|
|
+ if (le16_to_cpu(cmd_ptr->command) ==
|
|
|
+ HostCmd_CMD_802_11_SCAN_EXT) {
|
|
|
+ dev_dbg(priv->adapter->dev,
|
|
|
+ "Scan pending in command pending list");
|
|
|
+ complete_scan = false;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ spin_unlock_irqrestore(&adapter->scan_pending_q_lock, scan_flags);
|
|
|
+ spin_unlock_irqrestore(&adapter->cmd_pending_q_lock, cmd_flags);
|
|
|
+
|
|
|
+ if (complete_scan)
|
|
|
+ mwifiex_complete_scan(priv);
|
|
|
|
|
|
return 0;
|
|
|
}
|