iwlwifi: fixes RTS / CTS support
[deliverable/linux.git] / drivers / net / wireless / iwlwifi / iwl4965-base.c
index 7f65d9123b2ac01944f0cff56c947a2608b99a3c..516508f5fd49cdf161ee1a5891ac2911e7569433 100644 (file)
@@ -250,6 +250,9 @@ static int iwl4965_commit_rxon(struct iwl_priv *priv)
 
        /* always get timestamp with Rx frame */
        priv->staging_rxon.flags |= RXON_FLG_TSF2HOST_MSK;
+       /* allow CTS-to-self if possible. this is relevant only for
+        * 5000, but will not damage 4965 */
+       priv->staging_rxon.flags |= RXON_FLG_SELF_CTS_EN;
 
        ret = iwl4965_check_rxon_cmd(&priv->staging_rxon);
        if (ret) {
@@ -2912,6 +2915,9 @@ static void iwl4965_config_ap(struct iwl_priv *priv)
         * clear sta table, add BCAST sta... */
 }
 
+/* temporary */
+static int iwl4965_mac_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb);
+
 static int iwl4965_mac_config_interface(struct ieee80211_hw *hw,
                                        struct ieee80211_vif *vif,
                                    struct ieee80211_if_conf *conf)
@@ -2929,8 +2935,18 @@ static int iwl4965_mac_config_interface(struct ieee80211_hw *hw,
                return 0;
        }
 
+       if (priv->iw_mode == IEEE80211_IF_TYPE_IBSS &&
+           conf->changed & IEEE80211_IFCC_BEACON) {
+               struct sk_buff *beacon = ieee80211_beacon_get(hw, vif);
+               if (!beacon)
+                       return -ENOMEM;
+               rc = iwl4965_mac_beacon_update(hw, beacon);
+               if (rc)
+                       return rc;
+       }
+
        if ((priv->iw_mode == IEEE80211_IF_TYPE_AP) &&
-           (!conf->beacon || !conf->ssid_len)) {
+           (!conf->ssid_len)) {
                IWL_DEBUG_MAC80211
                    ("Leaving in AP mode because HostAPD is not ready.\n");
                return 0;
@@ -2962,7 +2978,7 @@ static int iwl4965_mac_config_interface(struct ieee80211_hw *hw,
                if (priv->ibss_beacon)
                        dev_kfree_skb(priv->ibss_beacon);
 
-               priv->ibss_beacon = conf->beacon;
+               priv->ibss_beacon = ieee80211_beacon_get(hw, vif);
        }
 
        if (iwl_is_rfkill(priv))
@@ -4090,7 +4106,6 @@ static struct ieee80211_ops iwl4965_hw_ops = {
        .get_tx_stats = iwl4965_mac_get_tx_stats,
        .conf_tx = iwl4965_mac_conf_tx,
        .reset_tsf = iwl4965_mac_reset_tsf,
-       .beacon_update = iwl4965_mac_beacon_update,
        .bss_info_changed = iwl4965_bss_info_changed,
        .ampdu_action = iwl4965_mac_ampdu_action,
        .hw_scan = iwl4965_mac_hw_scan
@@ -4409,8 +4424,16 @@ static struct pci_device_id iwl_hw_card_ids[] = {
        {IWL_PCI_DEVICE(0x4229, PCI_ANY_ID, iwl4965_agn_cfg)},
        {IWL_PCI_DEVICE(0x4230, PCI_ANY_ID, iwl4965_agn_cfg)},
 #ifdef CONFIG_IWL5000
-       {IWL_PCI_DEVICE(0x4235, PCI_ANY_ID, iwl5300_agn_cfg)},
+       {IWL_PCI_DEVICE(0x4232, 0x1205, iwl5100_bg_cfg)},
+       {IWL_PCI_DEVICE(0x4232, 0x1305, iwl5100_bg_cfg)},
+       {IWL_PCI_DEVICE(0x4232, 0x1206, iwl5100_abg_cfg)},
+       {IWL_PCI_DEVICE(0x4232, 0x1306, iwl5100_abg_cfg)},
+       {IWL_PCI_DEVICE(0x4232, 0x1326, iwl5100_abg_cfg)},
+       {IWL_PCI_DEVICE(0x4237, 0x1216, iwl5100_abg_cfg)},
        {IWL_PCI_DEVICE(0x4232, PCI_ANY_ID, iwl5100_agn_cfg)},
+       {IWL_PCI_DEVICE(0x4235, PCI_ANY_ID, iwl5300_agn_cfg)},
+       {IWL_PCI_DEVICE(0x4236, PCI_ANY_ID, iwl5300_agn_cfg)},
+       {IWL_PCI_DEVICE(0x4237, PCI_ANY_ID, iwl5100_agn_cfg)},
        {IWL_PCI_DEVICE(0x423A, PCI_ANY_ID, iwl5350_agn_cfg)},
 #endif /* CONFIG_IWL5000 */
        {0}
This page took 0.0264 seconds and 5 git commands to generate.