diff options
Diffstat (limited to 'drivers/net/wireless/ath/carl9170/fw.c')
-rw-r--r-- | drivers/net/wireless/ath/carl9170/fw.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/drivers/net/wireless/ath/carl9170/fw.c b/drivers/net/wireless/ath/carl9170/fw.c index 9517ede9e2df..221957c5d373 100644 --- a/drivers/net/wireless/ath/carl9170/fw.c +++ b/drivers/net/wireless/ath/carl9170/fw.c | |||
@@ -151,6 +151,7 @@ static int carl9170_fw(struct ar9170 *ar, const __u8 *data, size_t len) | |||
151 | const struct carl9170fw_chk_desc *chk_desc; | 151 | const struct carl9170fw_chk_desc *chk_desc; |
152 | const struct carl9170fw_last_desc *last_desc; | 152 | const struct carl9170fw_last_desc *last_desc; |
153 | const struct carl9170fw_txsq_desc *txsq_desc; | 153 | const struct carl9170fw_txsq_desc *txsq_desc; |
154 | u16 if_comb_types; | ||
154 | 155 | ||
155 | last_desc = carl9170_fw_find_desc(ar, LAST_MAGIC, | 156 | last_desc = carl9170_fw_find_desc(ar, LAST_MAGIC, |
156 | sizeof(*last_desc), CARL9170FW_LAST_DESC_CUR_VER); | 157 | sizeof(*last_desc), CARL9170FW_LAST_DESC_CUR_VER); |
@@ -268,6 +269,9 @@ static int carl9170_fw(struct ar9170 *ar, const __u8 *data, size_t len) | |||
268 | if (SUPP(CARL9170FW_WOL)) | 269 | if (SUPP(CARL9170FW_WOL)) |
269 | device_set_wakeup_enable(&ar->udev->dev, true); | 270 | device_set_wakeup_enable(&ar->udev->dev, true); |
270 | 271 | ||
272 | if_comb_types = BIT(NL80211_IFTYPE_STATION) | | ||
273 | BIT(NL80211_IFTYPE_P2P_CLIENT); | ||
274 | |||
271 | ar->fw.vif_num = otus_desc->vif_num; | 275 | ar->fw.vif_num = otus_desc->vif_num; |
272 | ar->fw.cmd_bufs = otus_desc->cmd_bufs; | 276 | ar->fw.cmd_bufs = otus_desc->cmd_bufs; |
273 | ar->fw.address = le32_to_cpu(otus_desc->fw_address); | 277 | ar->fw.address = le32_to_cpu(otus_desc->fw_address); |
@@ -294,12 +298,25 @@ static int carl9170_fw(struct ar9170 *ar, const __u8 *data, size_t len) | |||
294 | ar->hw->wiphy->interface_modes |= BIT(NL80211_IFTYPE_ADHOC); | 298 | ar->hw->wiphy->interface_modes |= BIT(NL80211_IFTYPE_ADHOC); |
295 | 299 | ||
296 | if (SUPP(CARL9170FW_WLANTX_CAB)) { | 300 | if (SUPP(CARL9170FW_WLANTX_CAB)) { |
297 | ar->hw->wiphy->interface_modes |= | 301 | if_comb_types |= |
298 | BIT(NL80211_IFTYPE_AP) | | 302 | BIT(NL80211_IFTYPE_AP) | |
299 | BIT(NL80211_IFTYPE_P2P_GO); | 303 | BIT(NL80211_IFTYPE_P2P_GO); |
300 | } | 304 | } |
301 | } | 305 | } |
302 | 306 | ||
307 | ar->if_comb_limits[0].max = ar->fw.vif_num; | ||
308 | ar->if_comb_limits[0].types = if_comb_types; | ||
309 | |||
310 | ar->if_combs[0].num_different_channels = 1; | ||
311 | ar->if_combs[0].max_interfaces = ar->fw.vif_num; | ||
312 | ar->if_combs[0].limits = ar->if_comb_limits; | ||
313 | ar->if_combs[0].n_limits = ARRAY_SIZE(ar->if_comb_limits); | ||
314 | |||
315 | ar->hw->wiphy->iface_combinations = ar->if_combs; | ||
316 | ar->hw->wiphy->n_iface_combinations = ARRAY_SIZE(ar->if_combs); | ||
317 | |||
318 | ar->hw->wiphy->interface_modes |= if_comb_types; | ||
319 | |||
303 | txsq_desc = carl9170_fw_find_desc(ar, TXSQ_MAGIC, | 320 | txsq_desc = carl9170_fw_find_desc(ar, TXSQ_MAGIC, |
304 | sizeof(*txsq_desc), CARL9170FW_TXSQ_DESC_CUR_VER); | 321 | sizeof(*txsq_desc), CARL9170FW_TXSQ_DESC_CUR_VER); |
305 | 322 | ||