@@ -852,13 +852,22 @@ int rt2x00lib_probe_dev(struct rt2x00_dev *rt2x00dev)
* beacon entries.
*/
rt2x00dev->hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION);
- if (rt2x00dev->ops->bcn->entry_num > 0)
+ if (rt2x00dev->ops->bcn->entry_num > 0) {
rt2x00dev->hw->wiphy->interface_modes |=
BIT(NL80211_IFTYPE_ADHOC) |
BIT(NL80211_IFTYPE_AP) |
- BIT(NL80211_IFTYPE_MESH_POINT) |
BIT(NL80211_IFTYPE_WDS);
+ /*
+ * The bss_info_changed() callback function is not
+ * allowed to sleep in mesh mode. As a result, we
+ * can't support Mesh mode for the USB drivers.
+ */
+ if (!rt2x00_is_usb(rt2x00dev))
+ rt2x00dev->hw->wiphy->interface_modes |=
+ BIT(NL80211_IFTYPE_MESH_POINT);
+ }
+
/*
* Let the driver probe the device to detect the capabilities.
*/