Browse Source

wil6210: support new WMI-only FW capability

WMI_ONLY FW is used for testing in production. It cannot be used for
scan/connect, etc.
In case FW reports this capability, driver will not allow interface up.

Signed-off-by: Dedy Lansky <qca_dlansky@qca.qualcomm.com>
Signed-off-by: Maya Erez <qca_merez@qca.qualcomm.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
Dedy Lansky 8 năm trước cách đây
mục cha
commit
0d2370e939

+ 3 - 2
drivers/net/wireless/ath/wil6210/netdev.c

@@ -24,8 +24,9 @@ static int wil_open(struct net_device *ndev)
 
 
 	wil_dbg_misc(wil, "open\n");
 	wil_dbg_misc(wil, "open\n");
 
 
-	if (debug_fw) {
-		wil_err(wil, "while in debug_fw mode\n");
+	if (debug_fw ||
+	    test_bit(WMI_FW_CAPABILITY_WMI_ONLY, wil->fw_capabilities)) {
+		wil_err(wil, "while in debug_fw or wmi_only mode\n");
 		return -EINVAL;
 		return -EINVAL;
 	}
 	}
 
 

+ 7 - 3
drivers/net/wireless/ath/wil6210/pcie_bus.c

@@ -99,8 +99,10 @@ static int wil_if_pcie_enable(struct wil6210_priv *wil)
 	 */
 	 */
 	int msi_only = pdev->msi_enabled;
 	int msi_only = pdev->msi_enabled;
 	bool _use_msi = use_msi;
 	bool _use_msi = use_msi;
+	bool wmi_only = test_bit(WMI_FW_CAPABILITY_WMI_ONLY,
+				 wil->fw_capabilities);
 
 
-	wil_dbg_misc(wil, "if_pcie_enable\n");
+	wil_dbg_misc(wil, "if_pcie_enable, wmi_only %d\n", wmi_only);
 
 
 	pdev->msi_enabled = 0;
 	pdev->msi_enabled = 0;
 
 
@@ -123,9 +125,11 @@ static int wil_if_pcie_enable(struct wil6210_priv *wil)
 	if (rc)
 	if (rc)
 		goto stop_master;
 		goto stop_master;
 
 
-	/* need reset here to obtain MAC */
+	/* need reset here to obtain MAC or in case of WMI-only FW, full reset
+	 * and fw loading takes place
+	 */
 	mutex_lock(&wil->mutex);
 	mutex_lock(&wil->mutex);
-	rc = wil_reset(wil, false);
+	rc = wil_reset(wil, wmi_only);
 	mutex_unlock(&wil->mutex);
 	mutex_unlock(&wil->mutex);
 	if (rc)
 	if (rc)
 		goto release_irq;
 		goto release_irq;

+ 1 - 0
drivers/net/wireless/ath/wil6210/wmi.h

@@ -57,6 +57,7 @@ enum wmi_fw_capability {
 	WMI_FW_CAPABILITY_RF_SECTORS		= 2,
 	WMI_FW_CAPABILITY_RF_SECTORS		= 2,
 	WMI_FW_CAPABILITY_MGMT_RETRY_LIMIT	= 3,
 	WMI_FW_CAPABILITY_MGMT_RETRY_LIMIT	= 3,
 	WMI_FW_CAPABILITY_DISABLE_AP_SME	= 4,
 	WMI_FW_CAPABILITY_DISABLE_AP_SME	= 4,
+	WMI_FW_CAPABILITY_WMI_ONLY		= 5,
 	WMI_FW_CAPABILITY_MAX,
 	WMI_FW_CAPABILITY_MAX,
 };
 };