Changeset 36344


Ignore:
Timestamp:
2013-04-16T12:53:02+02:00 (5 years ago)
Author:
nbd
Message:

ath9k: change the BSSID mask calculation to fix setting arbitrary MAC address on interfaces

Signed-off-by: Felix Fietkau <nbd@…>

Location:
trunk/package/mac80211/patches
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/package/mac80211/patches/300-pending_work.patch

    r36334 r36344  
    608608        if (!ath9k_hw_set_reset_reg(ah, reset_type)) 
    609609                return false; 
     610@@ -1876,13 +1878,12 @@ int ath9k_hw_reset(struct ath_hw *ah, st 
     611  
     612        ENABLE_REGWRITE_BUFFER(ah); 
     613  
     614-       REG_WRITE(ah, AR_STA_ID0, get_unaligned_le32(common->macaddr)); 
     615-       REG_WRITE(ah, AR_STA_ID1, get_unaligned_le16(common->macaddr + 4) 
     616-                 | macStaId1 
     617+       REG_RMW(ah, AR_STA_ID1, macStaId1 
     618                  | AR_STA_ID1_RTS_USE_DEF 
     619                  | (ah->config. 
     620                     ack_6mb ? AR_STA_ID1_ACKCTS_6MB : 0) 
     621-                 | ah->sta_id1_defaults); 
     622+                 | ah->sta_id1_defaults, 
     623+                 ~AR_STA_ID1_SADH_MASK); 
     624        ath_hw_setbssidmask(common); 
     625        REG_WRITE(ah, AR_DEF_ANTENNA, saveDefAntenna); 
     626        ath9k_hw_write_associd(ah); 
    610627--- a/drivers/net/wireless/rt2x00/rt2x00dev.c 
    611628+++ b/drivers/net/wireless/rt2x00/rt2x00dev.c 
     
    16301647                p += sprintf(p, "  %6u.%1u   %6u.%1u   %6u.%1u        " 
    16311648                                "%3u(%3u)   %8llu    %8llu\n", 
     1649--- a/drivers/net/wireless/ath/ath9k/ath9k.h 
     1650+++ b/drivers/net/wireless/ath/ath9k/ath9k.h 
     1651@@ -657,11 +657,10 @@ enum sc_op_flags { 
     1652 struct ath_rate_table; 
     1653  
     1654 struct ath9k_vif_iter_data { 
     1655-       const u8 *hw_macaddr; /* phy's hardware address, set 
     1656-                              * before starting iteration for 
     1657-                              * valid bssid mask. 
     1658-                              */ 
     1659+       u8 hw_macaddr[ETH_ALEN]; /* address of the first vif */ 
     1660        u8 mask[ETH_ALEN]; /* bssid mask */ 
     1661+       bool has_hw_macaddr; 
     1662+ 
     1663        int naps;      /* number of AP vifs */ 
     1664        int nmeshes;   /* number of mesh vifs */ 
     1665        int nstations; /* number of station vifs */ 
     1666--- a/drivers/net/wireless/ath/ath9k/main.c 
     1667+++ b/drivers/net/wireless/ath/ath9k/main.c 
     1668@@ -835,10 +835,14 @@ static void ath9k_vif_iter(void *data, u 
     1669        struct ath9k_vif_iter_data *iter_data = data; 
     1670        int i; 
     1671  
     1672-       if (iter_data->hw_macaddr) 
     1673+       if (iter_data->has_hw_macaddr) { 
     1674                for (i = 0; i < ETH_ALEN; i++) 
     1675                        iter_data->mask[i] &= 
     1676                                ~(iter_data->hw_macaddr[i] ^ mac[i]); 
     1677+       } else { 
     1678+               memcpy(iter_data->hw_macaddr, mac, ETH_ALEN); 
     1679+               iter_data->has_hw_macaddr = true; 
     1680+       } 
     1681  
     1682        switch (vif->type) { 
     1683        case NL80211_IFTYPE_AP: 
     1684@@ -887,7 +891,6 @@ void ath9k_calculate_iter_data(struct ie 
     1685         * together with the BSSID mask when matching addresses. 
     1686         */ 
     1687        memset(iter_data, 0, sizeof(*iter_data)); 
     1688-       iter_data->hw_macaddr = common->macaddr; 
     1689        memset(&iter_data->mask, 0xff, ETH_ALEN); 
     1690  
     1691        if (vif) 
     1692@@ -897,6 +900,8 @@ void ath9k_calculate_iter_data(struct ie 
     1693        ieee80211_iterate_active_interfaces_atomic( 
     1694                sc->hw, IEEE80211_IFACE_ITER_RESUME_ALL, 
     1695                ath9k_vif_iter, iter_data); 
     1696+ 
     1697+       memcpy(common->macaddr, iter_data->hw_macaddr, ETH_ALEN); 
     1698 } 
     1699  
     1700 /* Called with sc->mutex held. */ 
     1701--- a/drivers/net/wireless/ath/ath9k/reg.h 
     1702+++ b/drivers/net/wireless/ath/ath9k/reg.h 
     1703@@ -1493,9 +1493,6 @@ enum { 
     1704 #define AR9271_RADIO_RF_RST                    0x20 
     1705 #define AR9271_GATE_MAC_CTL                    0x4000 
     1706  
     1707-#define AR_STA_ID0                 0x8000 
     1708-#define AR_STA_ID1                 0x8004 
     1709-#define AR_STA_ID1_SADH_MASK       0x0000FFFF 
     1710 #define AR_STA_ID1_STA_AP          0x00010000 
     1711 #define AR_STA_ID1_ADHOC           0x00020000 
     1712 #define AR_STA_ID1_PWR_SAV         0x00040000 
     1713--- a/drivers/net/wireless/ath/hw.c 
     1714+++ b/drivers/net/wireless/ath/hw.c 
     1715@@ -118,6 +118,12 @@ 
     1716 void ath_hw_setbssidmask(struct ath_common *common) 
     1717 { 
     1718        void *ah = common->ah; 
     1719+       u32 id1; 
     1720+ 
     1721+       REG_WRITE(ah, AR_STA_ID0, get_unaligned_le32(common->macaddr)); 
     1722+       id1 = REG_READ(ah, AR_STA_ID1) & ~AR_STA_ID1_SADH_MASK; 
     1723+       id1 |= get_unaligned_le16(common->macaddr + 4); 
     1724+       REG_WRITE(ah, AR_STA_ID1, id1); 
     1725  
     1726        REG_WRITE(ah, AR_BSSMSKL, get_unaligned_le32(common->bssidmask)); 
     1727        REG_WRITE(ah, AR_BSSMSKU, get_unaligned_le16(common->bssidmask + 4)); 
     1728--- a/drivers/net/wireless/ath/reg.h 
     1729+++ b/drivers/net/wireless/ath/reg.h 
     1730@@ -23,6 +23,10 @@ 
     1731 #define AR_MIBC_CMC            0x00000004 
     1732 #define AR_MIBC_MCS            0x00000008 
     1733  
     1734+#define AR_STA_ID0             0x8000 
     1735+#define AR_STA_ID1             0x8004 
     1736+#define AR_STA_ID1_SADH_MASK   0x0000ffff 
     1737+ 
     1738 /* 
     1739  * BSSID mask registers. See ath_hw_set_bssid_mask() 
     1740  * for detailed documentation about these registers. 
  • trunk/package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch

    r35785 r36344  
    11--- a/drivers/net/wireless/ath/ath9k/hw.c 
    22+++ b/drivers/net/wireless/ath/ath9k/hw.c 
    3 @@ -1947,8 +1947,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st 
     3@@ -1946,8 +1946,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st 
    44                REG_WRITE(ah, AR_OBS, 8); 
    55  
  • trunk/package/mac80211/patches/512-ath9k_channelbw_debugfs.patch

    r35753 r36344  
    11--- a/drivers/net/wireless/ath/ath9k/ath9k.h 
    22+++ b/drivers/net/wireless/ath/ath9k/ath9k.h 
    3 @@ -690,6 +690,7 @@ struct ath_softc { 
     3@@ -689,6 +689,7 @@ struct ath_softc { 
    44        struct ieee80211_hw *hw; 
    55        struct device *dev; 
     
    99        struct survey_info survey[ATH9K_NUM_CHANNELS]; 
    1010  
    11 @@ -894,6 +895,7 @@ struct fft_sample_ht20 { 
     11@@ -893,6 +894,7 @@ struct fft_sample_ht20 { 
    1212        u8 data[SPECTRAL_HT20_NUM_BINS]; 
    1313 } __packed; 
     
    8181--- a/drivers/net/wireless/ath/ath9k/main.c 
    8282+++ b/drivers/net/wireless/ath/ath9k/main.c 
    83 @@ -1131,7 +1131,7 @@ int ath9k_spectral_scan_config(struct ie 
     83@@ -1136,7 +1136,7 @@ int ath9k_spectral_scan_config(struct ie 
    8484        return 0; 
    8585 } 
     
    9090        struct ath_softc *sc = hw->priv; 
    9191        struct ath_hw *ah = sc->sc_ah; 
    92 @@ -1185,9 +1185,11 @@ static int ath9k_config(struct ieee80211 
     92@@ -1190,9 +1190,11 @@ static int ath9k_config(struct ieee80211 
    9393  
    9494        if ((changed & IEEE80211_CONF_CHANGE_CHANNEL) || reset_channel) { 
     
    102102                if (ah->curchan) 
    103103                        old_pos = ah->curchan - &ah->channels[0]; 
    104 @@ -1230,7 +1232,23 @@ static int ath9k_config(struct ieee80211 
     104@@ -1235,7 +1237,23 @@ static int ath9k_config(struct ieee80211 
    105105                        memset(&sc->survey[pos], 0, sizeof(struct survey_info)); 
    106106                } 
  • trunk/package/mac80211/patches/521-ath9k_cur_txpower.patch

    r35753 r36344  
    11--- a/drivers/net/wireless/ath/ath9k/main.c 
    22+++ b/drivers/net/wireless/ath/ath9k/main.c 
    3 @@ -1255,6 +1255,8 @@ int ath9k_config(struct ieee80211_hw *hw 
     3@@ -1260,6 +1260,8 @@ int ath9k_config(struct ieee80211_hw *hw 
    44                        return -EINVAL; 
    55                } 
     
    1010                 * The most recent snapshot of channel->noisefloor for the old 
    1111                 * channel is only available after the hardware reset. Copy it to 
    12 @@ -1274,6 +1276,7 @@ int ath9k_config(struct ieee80211_hw *hw 
     12@@ -1279,6 +1281,7 @@ int ath9k_config(struct ieee80211_hw *hw 
    1313                sc->config.txpowlimit = 2 * conf->power_level; 
    1414                ath9k_cmn_update_txpow(ah, sc->curtxpow, 
  • trunk/package/mac80211/patches/524-ath9k_use_configured_antenna_gain.patch

    r35785 r36344  
    1111--- a/drivers/net/wireless/ath/ath9k/hw.c 
    1212+++ b/drivers/net/wireless/ath/ath9k/hw.c 
    13 @@ -2818,7 +2818,7 @@ void ath9k_hw_apply_txpower(struct ath_h 
     13@@ -2817,7 +2817,7 @@ void ath9k_hw_apply_txpower(struct ath_h 
    1414        channel = chan->chan; 
    1515        chan_pwr = min_t(int, channel->max_power * 2, MAX_RATE_POWER); 
     
    2222--- a/drivers/net/wireless/ath/ath9k/main.c 
    2323+++ b/drivers/net/wireless/ath/ath9k/main.c 
    24 @@ -1272,7 +1272,10 @@ int ath9k_config(struct ieee80211_hw *hw 
     24@@ -1277,7 +1277,10 @@ int ath9k_config(struct ieee80211_hw *hw 
    2525        } 
    2626  
  • trunk/package/mac80211/patches/530-ath9k_extra_leds.patch

    r36265 r36344  
    1111 static inline void ath_init_leds(struct ath_softc *sc) 
    1212 { 
    13 @@ -686,6 +689,13 @@ enum spectral_mode { 
     13@@ -685,6 +688,13 @@ enum spectral_mode { 
    1414        SPECTRAL_CHANSCAN, 
    1515 }; 
     
    2525        struct ieee80211_hw *hw; 
    2626        struct device *dev; 
    27 @@ -727,9 +737,8 @@ struct ath_softc { 
     27@@ -726,9 +736,8 @@ struct ath_softc { 
    2828        struct ieee80211_supported_band sbands[IEEE80211_NUM_BANDS]; 
    2929  
  • trunk/package/mac80211/patches/553-ath9k_debugfs_diag.patch

    r35785 r36344  
    116116                   struct ath9k_hw_cal_data *caldata, bool fastcc) 
    117117 { 
    118 @@ -2024,6 +2038,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st 
     118@@ -2023,6 +2037,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st 
    119119        } 
    120120  
  • trunk/package/mac80211/patches/555-ath9k-allow-to-disable-bands-via-platform-data.patch

    r35785 r36344  
    1313--- a/drivers/net/wireless/ath/ath9k/hw.c 
    1414+++ b/drivers/net/wireless/ath/ath9k/hw.c 
    15 @@ -2414,17 +2414,25 @@ int ath9k_hw_fill_cap_info(struct ath_hw 
     15@@ -2413,17 +2413,25 @@ int ath9k_hw_fill_cap_info(struct ath_hw 
    1616        } 
    1717  
Note: See TracChangeset for help on using the changeset viewer.