diff options
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn.c | 45 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-core.c | 45 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-core.h | 3 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl3945-base.c | 51 |
4 files changed, 94 insertions, 50 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c index c1882fd8345d..10d7b9b7f064 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c | |||
| @@ -3667,6 +3667,49 @@ out_exit: | |||
| 3667 | IWL_DEBUG_MAC80211(priv, "leave\n"); | 3667 | IWL_DEBUG_MAC80211(priv, "leave\n"); |
| 3668 | } | 3668 | } |
| 3669 | 3669 | ||
| 3670 | static void iwlagn_configure_filter(struct ieee80211_hw *hw, | ||
| 3671 | unsigned int changed_flags, | ||
| 3672 | unsigned int *total_flags, | ||
| 3673 | u64 multicast) | ||
| 3674 | { | ||
| 3675 | struct iwl_priv *priv = hw->priv; | ||
| 3676 | __le32 filter_or = 0, filter_nand = 0; | ||
| 3677 | |||
| 3678 | #define CHK(test, flag) do { \ | ||
| 3679 | if (*total_flags & (test)) \ | ||
| 3680 | filter_or |= (flag); \ | ||
| 3681 | else \ | ||
| 3682 | filter_nand |= (flag); \ | ||
| 3683 | } while (0) | ||
| 3684 | |||
| 3685 | IWL_DEBUG_MAC80211(priv, "Enter: changed: 0x%x, total: 0x%x\n", | ||
| 3686 | changed_flags, *total_flags); | ||
| 3687 | |||
| 3688 | CHK(FIF_OTHER_BSS | FIF_PROMISC_IN_BSS, RXON_FILTER_PROMISC_MSK); | ||
| 3689 | CHK(FIF_CONTROL, RXON_FILTER_CTL2HOST_MSK); | ||
| 3690 | CHK(FIF_BCN_PRBRESP_PROMISC, RXON_FILTER_BCON_AWARE_MSK); | ||
| 3691 | |||
| 3692 | #undef CHK | ||
| 3693 | |||
| 3694 | mutex_lock(&priv->mutex); | ||
| 3695 | |||
| 3696 | priv->staging_rxon.filter_flags &= ~filter_nand; | ||
| 3697 | priv->staging_rxon.filter_flags |= filter_or; | ||
| 3698 | |||
| 3699 | iwlcore_commit_rxon(priv); | ||
| 3700 | |||
| 3701 | mutex_unlock(&priv->mutex); | ||
| 3702 | |||
| 3703 | /* | ||
| 3704 | * Receiving all multicast frames is always enabled by the | ||
| 3705 | * default flags setup in iwl_connection_init_rx_config() | ||
| 3706 | * since we currently do not support programming multicast | ||
| 3707 | * filters into the device. | ||
| 3708 | */ | ||
| 3709 | *total_flags &= FIF_OTHER_BSS | FIF_ALLMULTI | FIF_PROMISC_IN_BSS | | ||
| 3710 | FIF_BCN_PRBRESP_PROMISC | FIF_CONTROL; | ||
| 3711 | } | ||
| 3712 | |||
| 3670 | static void iwl_mac_flush(struct ieee80211_hw *hw, bool drop) | 3713 | static void iwl_mac_flush(struct ieee80211_hw *hw, bool drop) |
| 3671 | { | 3714 | { |
| 3672 | struct iwl_priv *priv = hw->priv; | 3715 | struct iwl_priv *priv = hw->priv; |
| @@ -3867,7 +3910,7 @@ static struct ieee80211_ops iwl_hw_ops = { | |||
| 3867 | .add_interface = iwl_mac_add_interface, | 3910 | .add_interface = iwl_mac_add_interface, |
| 3868 | .remove_interface = iwl_mac_remove_interface, | 3911 | .remove_interface = iwl_mac_remove_interface, |
| 3869 | .config = iwl_mac_config, | 3912 | .config = iwl_mac_config, |
| 3870 | .configure_filter = iwl_configure_filter, | 3913 | .configure_filter = iwlagn_configure_filter, |
| 3871 | .set_key = iwl_mac_set_key, | 3914 | .set_key = iwl_mac_set_key, |
| 3872 | .update_tkip_key = iwl_mac_update_tkip_key, | 3915 | .update_tkip_key = iwl_mac_update_tkip_key, |
| 3873 | .conf_tx = iwl_mac_conf_tx, | 3916 | .conf_tx = iwl_mac_conf_tx, |
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c index 2c03c6e20a72..07dbc2796448 100644 --- a/drivers/net/wireless/iwlwifi/iwl-core.c +++ b/drivers/net/wireless/iwlwifi/iwl-core.c | |||
| @@ -1328,51 +1328,6 @@ out: | |||
| 1328 | EXPORT_SYMBOL(iwl_apm_init); | 1328 | EXPORT_SYMBOL(iwl_apm_init); |
| 1329 | 1329 | ||
| 1330 | 1330 | ||
| 1331 | |||
| 1332 | void iwl_configure_filter(struct ieee80211_hw *hw, | ||
| 1333 | unsigned int changed_flags, | ||
| 1334 | unsigned int *total_flags, | ||
| 1335 | u64 multicast) | ||
| 1336 | { | ||
| 1337 | struct iwl_priv *priv = hw->priv; | ||
| 1338 | __le32 filter_or = 0, filter_nand = 0; | ||
| 1339 | |||
| 1340 | #define CHK(test, flag) do { \ | ||
| 1341 | if (*total_flags & (test)) \ | ||
| 1342 | filter_or |= (flag); \ | ||
| 1343 | else \ | ||
| 1344 | filter_nand |= (flag); \ | ||
| 1345 | } while (0) | ||
| 1346 | |||
| 1347 | IWL_DEBUG_MAC80211(priv, "Enter: changed: 0x%x, total: 0x%x\n", | ||
| 1348 | changed_flags, *total_flags); | ||
| 1349 | |||
| 1350 | CHK(FIF_OTHER_BSS | FIF_PROMISC_IN_BSS, RXON_FILTER_PROMISC_MSK); | ||
| 1351 | CHK(FIF_CONTROL, RXON_FILTER_CTL2HOST_MSK); | ||
| 1352 | CHK(FIF_BCN_PRBRESP_PROMISC, RXON_FILTER_BCON_AWARE_MSK); | ||
| 1353 | |||
| 1354 | #undef CHK | ||
| 1355 | |||
| 1356 | mutex_lock(&priv->mutex); | ||
| 1357 | |||
| 1358 | priv->staging_rxon.filter_flags &= ~filter_nand; | ||
| 1359 | priv->staging_rxon.filter_flags |= filter_or; | ||
| 1360 | |||
| 1361 | iwlcore_commit_rxon(priv); | ||
| 1362 | |||
| 1363 | mutex_unlock(&priv->mutex); | ||
| 1364 | |||
| 1365 | /* | ||
| 1366 | * Receiving all multicast frames is always enabled by the | ||
| 1367 | * default flags setup in iwl_connection_init_rx_config() | ||
| 1368 | * since we currently do not support programming multicast | ||
| 1369 | * filters into the device. | ||
| 1370 | */ | ||
| 1371 | *total_flags &= FIF_OTHER_BSS | FIF_ALLMULTI | FIF_PROMISC_IN_BSS | | ||
| 1372 | FIF_BCN_PRBRESP_PROMISC | FIF_CONTROL; | ||
| 1373 | } | ||
| 1374 | EXPORT_SYMBOL(iwl_configure_filter); | ||
| 1375 | |||
| 1376 | int iwl_set_hw_params(struct iwl_priv *priv) | 1331 | int iwl_set_hw_params(struct iwl_priv *priv) |
| 1377 | { | 1332 | { |
| 1378 | priv->hw_params.max_rxq_size = RX_QUEUE_SIZE; | 1333 | priv->hw_params.max_rxq_size = RX_QUEUE_SIZE; |
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.h b/drivers/net/wireless/iwlwifi/iwl-core.h index 4a71dfb10a15..5e6ee3da6bbf 100644 --- a/drivers/net/wireless/iwlwifi/iwl-core.h +++ b/drivers/net/wireless/iwlwifi/iwl-core.h | |||
| @@ -372,9 +372,6 @@ int iwl_set_decrypted_flag(struct iwl_priv *priv, | |||
| 372 | u32 decrypt_res, | 372 | u32 decrypt_res, |
| 373 | struct ieee80211_rx_status *stats); | 373 | struct ieee80211_rx_status *stats); |
| 374 | void iwl_irq_handle_error(struct iwl_priv *priv); | 374 | void iwl_irq_handle_error(struct iwl_priv *priv); |
| 375 | void iwl_configure_filter(struct ieee80211_hw *hw, | ||
| 376 | unsigned int changed_flags, | ||
| 377 | unsigned int *total_flags, u64 multicast); | ||
| 378 | int iwl_set_hw_params(struct iwl_priv *priv); | 375 | int iwl_set_hw_params(struct iwl_priv *priv); |
| 379 | void iwl_post_associate(struct iwl_priv *priv, struct ieee80211_vif *vif); | 376 | void iwl_post_associate(struct iwl_priv *priv, struct ieee80211_vif *vif); |
| 380 | void iwl_bss_info_changed(struct ieee80211_hw *hw, | 377 | void iwl_bss_info_changed(struct ieee80211_hw *hw, |
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c index 70c4b8fba0ee..59a308b02f95 100644 --- a/drivers/net/wireless/iwlwifi/iwl3945-base.c +++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c | |||
| @@ -3391,6 +3391,55 @@ static int iwl3945_mac_sta_add(struct ieee80211_hw *hw, | |||
| 3391 | 3391 | ||
| 3392 | return 0; | 3392 | return 0; |
| 3393 | } | 3393 | } |
| 3394 | |||
| 3395 | static void iwl3945_configure_filter(struct ieee80211_hw *hw, | ||
| 3396 | unsigned int changed_flags, | ||
| 3397 | unsigned int *total_flags, | ||
| 3398 | u64 multicast) | ||
| 3399 | { | ||
| 3400 | struct iwl_priv *priv = hw->priv; | ||
| 3401 | __le32 filter_or = 0, filter_nand = 0; | ||
| 3402 | |||
| 3403 | #define CHK(test, flag) do { \ | ||
| 3404 | if (*total_flags & (test)) \ | ||
| 3405 | filter_or |= (flag); \ | ||
| 3406 | else \ | ||
| 3407 | filter_nand |= (flag); \ | ||
| 3408 | } while (0) | ||
| 3409 | |||
| 3410 | IWL_DEBUG_MAC80211(priv, "Enter: changed: 0x%x, total: 0x%x\n", | ||
| 3411 | changed_flags, *total_flags); | ||
| 3412 | |||
| 3413 | CHK(FIF_OTHER_BSS | FIF_PROMISC_IN_BSS, RXON_FILTER_PROMISC_MSK); | ||
| 3414 | CHK(FIF_CONTROL, RXON_FILTER_CTL2HOST_MSK); | ||
| 3415 | CHK(FIF_BCN_PRBRESP_PROMISC, RXON_FILTER_BCON_AWARE_MSK); | ||
| 3416 | |||
| 3417 | #undef CHK | ||
| 3418 | |||
| 3419 | mutex_lock(&priv->mutex); | ||
| 3420 | |||
| 3421 | priv->staging_rxon.filter_flags &= ~filter_nand; | ||
| 3422 | priv->staging_rxon.filter_flags |= filter_or; | ||
| 3423 | |||
| 3424 | /* | ||
| 3425 | * Committing directly here breaks for some reason, | ||
| 3426 | * but we'll eventually commit the filter flags | ||
| 3427 | * change anyway. | ||
| 3428 | */ | ||
| 3429 | |||
| 3430 | mutex_unlock(&priv->mutex); | ||
| 3431 | |||
| 3432 | /* | ||
| 3433 | * Receiving all multicast frames is always enabled by the | ||
| 3434 | * default flags setup in iwl_connection_init_rx_config() | ||
| 3435 | * since we currently do not support programming multicast | ||
| 3436 | * filters into the device. | ||
| 3437 | */ | ||
| 3438 | *total_flags &= FIF_OTHER_BSS | FIF_ALLMULTI | FIF_PROMISC_IN_BSS | | ||
| 3439 | FIF_BCN_PRBRESP_PROMISC | FIF_CONTROL; | ||
| 3440 | } | ||
| 3441 | |||
| 3442 | |||
| 3394 | /***************************************************************************** | 3443 | /***************************************************************************** |
| 3395 | * | 3444 | * |
| 3396 | * sysfs attributes | 3445 | * sysfs attributes |
| @@ -3796,7 +3845,7 @@ static struct ieee80211_ops iwl3945_hw_ops = { | |||
| 3796 | .add_interface = iwl_mac_add_interface, | 3845 | .add_interface = iwl_mac_add_interface, |
| 3797 | .remove_interface = iwl_mac_remove_interface, | 3846 | .remove_interface = iwl_mac_remove_interface, |
| 3798 | .config = iwl_mac_config, | 3847 | .config = iwl_mac_config, |
| 3799 | .configure_filter = iwl_configure_filter, | 3848 | .configure_filter = iwl3945_configure_filter, |
| 3800 | .set_key = iwl3945_mac_set_key, | 3849 | .set_key = iwl3945_mac_set_key, |
| 3801 | .conf_tx = iwl_mac_conf_tx, | 3850 | .conf_tx = iwl_mac_conf_tx, |
| 3802 | .reset_tsf = iwl_mac_reset_tsf, | 3851 | .reset_tsf = iwl_mac_reset_tsf, |
