From: Ben Greear <gree...@candelatech.com>

This only pertains to CT firmware, as standard firmware
can't do anywhere near this many vdevs anyway.

Signed-off-by: Ben Greear <gree...@candelatech.com>
---
 drivers/net/wireless/ath/ath10k/mac.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/drivers/net/wireless/ath/ath10k/mac.c 
b/drivers/net/wireless/ath/ath10k/mac.c
index 373f2ee..f1bfb3a 100644
--- a/drivers/net/wireless/ath/ath10k/mac.c
+++ b/drivers/net/wireless/ath/ath10k/mac.c
@@ -1343,6 +1343,22 @@ static int ath10k_vdev_start_restart(struct ath10k_vif 
*arvif,
        arg.channel.max_reg_power = chandef->chan->max_reg_power * 2;
        arg.channel.max_antenna_gain = chandef->chan->max_antenna_gain * 2;
 
+       /* CT Firmware can support 32+ VDEVS, but can only support
+        * beacon-ing devs with dev ids 0 - 31 due to firmware limitations.
+        * Create VAPs first and all should be well...likely most people
+        * won't ever hit this anyway, but some day the vdev ID allocation
+        * could be made smarter to make it more likely to work no matter the
+        * order the vdevs are created. --Ben
+        */
+       if ((arvif->vdev_type == WMI_VDEV_TYPE_AP) ||
+           (arvif->vdev_type == WMI_VDEV_TYPE_IBSS)) {
+               if (arg.vdev_id > 31) {
+                       ath10k_warn(ar, "failed to start vdev %i  Beaconing 
VIFS must have IDs <= 31 to work-around firmware limitations.\n",
+                                   arg.vdev_id);
+                       return -EINVAL;
+               }
+       }
+
        if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
                arg.ssid = arvif->u.ap.ssid;
                arg.ssid_len = arvif->u.ap.ssid_len;
-- 
2.4.3


_______________________________________________
ath10k mailing list
ath10k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath10k

Reply via email to