From: Gertjan van Wingerde <gwingerde@gmail.com>
To: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Cc: linux-wireless@vger.kernel.org, Ivo van Doorn <ivdoorn@gmail.com>
Subject: Re: [PATCH 6/9] rt2800: unify rt2800*_probe_hw_mode()
Date: Sun, 08 Nov 2009 15:36:45 +0100 [thread overview]
Message-ID: <4AF6D77D.30105@gmail.com> (raw)
In-Reply-To: <20091108133932.23584.75230.sendpatchset@localhost.localdomain>
On 11/08/09 14:39, Bartlomiej Zolnierkiewicz wrote:
> From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
> Subject: [PATCH] rt2800: unify rt2800*_probe_hw_mode()
>
> Add rf_vals tables and rt2800_probe_hw_mode() to rt2800lib.
>
> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
> ---
> drivers/net/wireless/rt2x00/rt2800lib.c | 218 ++++++++++++++++++++++++++++++++
> drivers/net/wireless/rt2x00/rt2800lib.h | 1
> drivers/net/wireless/rt2x00/rt2800pci.c | 190 ---------------------------
> drivers/net/wireless/rt2x00/rt2800usb.c | 211 ------------------------------
> 4 files changed, 221 insertions(+), 399 deletions(-)
>
> Index: b/drivers/net/wireless/rt2x00/rt2800lib.c
> ===================================================================
> --- a/drivers/net/wireless/rt2x00/rt2800lib.c
> +++ b/drivers/net/wireless/rt2x00/rt2800lib.c
> @@ -1859,6 +1859,224 @@ int rt2800_init_eeprom(struct rt2x00_dev
> EXPORT_SYMBOL_GPL(rt2800_init_eeprom);
>
> /*
> + * RF value list for rt28x0
> + * Supports: 2.4 GHz (all) & 5.2 GHz (RF2850 & RF2750)
> + */
> +static const struct rf_channel rf_vals[] = {
> + { 1, 0x18402ecc, 0x184c0786, 0x1816b455, 0x1800510b },
> + { 2, 0x18402ecc, 0x184c0786, 0x18168a55, 0x1800519f },
> + { 3, 0x18402ecc, 0x184c078a, 0x18168a55, 0x1800518b },
> + { 4, 0x18402ecc, 0x184c078a, 0x18168a55, 0x1800519f },
> + { 5, 0x18402ecc, 0x184c078e, 0x18168a55, 0x1800518b },
> + { 6, 0x18402ecc, 0x184c078e, 0x18168a55, 0x1800519f },
> + { 7, 0x18402ecc, 0x184c0792, 0x18168a55, 0x1800518b },
> + { 8, 0x18402ecc, 0x184c0792, 0x18168a55, 0x1800519f },
> + { 9, 0x18402ecc, 0x184c0796, 0x18168a55, 0x1800518b },
> + { 10, 0x18402ecc, 0x184c0796, 0x18168a55, 0x1800519f },
> + { 11, 0x18402ecc, 0x184c079a, 0x18168a55, 0x1800518b },
> + { 12, 0x18402ecc, 0x184c079a, 0x18168a55, 0x1800519f },
> + { 13, 0x18402ecc, 0x184c079e, 0x18168a55, 0x1800518b },
> + { 14, 0x18402ecc, 0x184c07a2, 0x18168a55, 0x18005193 },
> +
> + /* 802.11 UNI / HyperLan 2 */
> + { 36, 0x18402ecc, 0x184c099a, 0x18158a55, 0x180ed1a3 },
> + { 38, 0x18402ecc, 0x184c099e, 0x18158a55, 0x180ed193 },
> + { 40, 0x18402ec8, 0x184c0682, 0x18158a55, 0x180ed183 },
> + { 44, 0x18402ec8, 0x184c0682, 0x18158a55, 0x180ed1a3 },
> + { 46, 0x18402ec8, 0x184c0686, 0x18158a55, 0x180ed18b },
> + { 48, 0x18402ec8, 0x184c0686, 0x18158a55, 0x180ed19b },
> + { 52, 0x18402ec8, 0x184c068a, 0x18158a55, 0x180ed193 },
> + { 54, 0x18402ec8, 0x184c068a, 0x18158a55, 0x180ed1a3 },
> + { 56, 0x18402ec8, 0x184c068e, 0x18158a55, 0x180ed18b },
> + { 60, 0x18402ec8, 0x184c0692, 0x18158a55, 0x180ed183 },
> + { 62, 0x18402ec8, 0x184c0692, 0x18158a55, 0x180ed193 },
> + { 64, 0x18402ec8, 0x184c0692, 0x18158a55, 0x180ed1a3 },
> +
> + /* 802.11 HyperLan 2 */
> + { 100, 0x18402ec8, 0x184c06b2, 0x18178a55, 0x180ed783 },
> + { 102, 0x18402ec8, 0x184c06b2, 0x18578a55, 0x180ed793 },
> + { 104, 0x18402ec8, 0x185c06b2, 0x18578a55, 0x180ed1a3 },
> + { 108, 0x18402ecc, 0x185c0a32, 0x18578a55, 0x180ed193 },
> + { 110, 0x18402ecc, 0x184c0a36, 0x18178a55, 0x180ed183 },
> + { 112, 0x18402ecc, 0x184c0a36, 0x18178a55, 0x180ed19b },
> + { 116, 0x18402ecc, 0x184c0a3a, 0x18178a55, 0x180ed1a3 },
> + { 118, 0x18402ecc, 0x184c0a3e, 0x18178a55, 0x180ed193 },
> + { 120, 0x18402ec4, 0x184c0382, 0x18178a55, 0x180ed183 },
> + { 124, 0x18402ec4, 0x184c0382, 0x18178a55, 0x180ed193 },
> + { 126, 0x18402ec4, 0x184c0382, 0x18178a55, 0x180ed15b },
> + { 128, 0x18402ec4, 0x184c0382, 0x18178a55, 0x180ed1a3 },
> + { 132, 0x18402ec4, 0x184c0386, 0x18178a55, 0x180ed18b },
> + { 134, 0x18402ec4, 0x184c0386, 0x18178a55, 0x180ed193 },
> + { 136, 0x18402ec4, 0x184c0386, 0x18178a55, 0x180ed19b },
> + { 140, 0x18402ec4, 0x184c038a, 0x18178a55, 0x180ed183 },
> +
> + /* 802.11 UNII */
> + { 149, 0x18402ec4, 0x184c038a, 0x18178a55, 0x180ed1a7 },
> + { 151, 0x18402ec4, 0x184c038e, 0x18178a55, 0x180ed187 },
> + { 153, 0x18402ec4, 0x184c038e, 0x18178a55, 0x180ed18f },
> + { 157, 0x18402ec4, 0x184c038e, 0x18178a55, 0x180ed19f },
> + { 159, 0x18402ec4, 0x184c038e, 0x18178a55, 0x180ed1a7 },
> + { 161, 0x18402ec4, 0x184c0392, 0x18178a55, 0x180ed187 },
> + { 165, 0x18402ec4, 0x184c0392, 0x18178a55, 0x180ed197 },
> + { 167, 0x18402ec4, 0x184c03d2, 0x18179855, 0x1815531f },
> + { 169, 0x18402ec4, 0x184c03d2, 0x18179855, 0x18155327 },
> + { 171, 0x18402ec4, 0x184c03d6, 0x18179855, 0x18155307 },
> + { 173, 0x18402ec4, 0x184c03d6, 0x18179855, 0x1815530f },
> +
> + /* 802.11 Japan */
> + { 184, 0x15002ccc, 0x1500491e, 0x1509be55, 0x150c0a0b },
> + { 188, 0x15002ccc, 0x15004922, 0x1509be55, 0x150c0a13 },
> + { 192, 0x15002ccc, 0x15004926, 0x1509be55, 0x150c0a1b },
> + { 196, 0x15002ccc, 0x1500492a, 0x1509be55, 0x150c0a23 },
> + { 208, 0x15002ccc, 0x1500493a, 0x1509be55, 0x150c0a13 },
> + { 212, 0x15002ccc, 0x1500493e, 0x1509be55, 0x150c0a1b },
> + { 216, 0x15002ccc, 0x15004982, 0x1509be55, 0x150c0a23 },
> +};
> +
> +/*
> + * RF value list for rt3070
> + * Supports: 2.4 GHz
> + */
> +static const struct rf_channel rf_vals_3070[] = {
> + {1, 241, 2, 2 },
> + {2, 241, 2, 7 },
> + {3, 242, 2, 2 },
> + {4, 242, 2, 7 },
> + {5, 243, 2, 2 },
> + {6, 243, 2, 7 },
> + {7, 244, 2, 2 },
> + {8, 244, 2, 7 },
> + {9, 245, 2, 2 },
> + {10, 245, 2, 7 },
> + {11, 246, 2, 2 },
> + {12, 246, 2, 7 },
> + {13, 247, 2, 2 },
> + {14, 248, 2, 4 },
> +};
> +
> +int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
> +{
> + struct rt2x00_chip *chip = &rt2x00dev->chip;
> + struct hw_mode_spec *spec = &rt2x00dev->spec;
> + struct channel_info *info;
> + char *tx_power1;
> + char *tx_power2;
> + unsigned int i;
> + u16 eeprom;
> +
> + /*
> + * Initialize all hw fields.
> + */
> + rt2x00dev->hw->flags =
> + IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING |
> + IEEE80211_HW_SIGNAL_DBM |
> + IEEE80211_HW_SUPPORTS_PS |
> + IEEE80211_HW_PS_NULLFUNC_STACK;
> +
> + if (rt2x00_intf_is_usb(rt2x00dev))
> + rt2x00dev->hw->extra_tx_headroom =
> + TXINFO_DESC_SIZE + TXWI_DESC_SIZE;
> + else if (rt2x00_intf_is_pci(rt2x00dev))
> + rt2x00dev->hw->extra_tx_headroom = TXWI_DESC_SIZE;
> +
> + SET_IEEE80211_DEV(rt2x00dev->hw, rt2x00dev->dev);
> + SET_IEEE80211_PERM_ADDR(rt2x00dev->hw,
> + rt2x00_eeprom_addr(rt2x00dev,
> + EEPROM_MAC_ADDR_0));
> +
> + rt2x00_eeprom_read(rt2x00dev, EEPROM_ANTENNA, &eeprom);
> +
> + /*
> + * Initialize hw_mode information.
> + */
> + spec->supported_bands = SUPPORT_BAND_2GHZ;
> + spec->supported_rates = SUPPORT_RATE_CCK | SUPPORT_RATE_OFDM;
> +
> + if (rt2x00_rf(chip, RF2820) ||
> + rt2x00_rf(chip, RF2720) ||
> + (rt2x00_intf_is_pci(rt2x00dev) &&
> + (rt2x00_rf(chip, RF3020) ||
> + rt2x00_rf(chip, RF3021) ||
> + rt2x00_rf(chip, RF3022) ||
> + rt2x00_rf(chip, RF2020) ||
> + rt2x00_rf(chip, RF3052)))) {
> + spec->num_channels = 14;
> + spec->channels = rf_vals;
> + } else if (rt2x00_rf(chip, RF2850) ||
> + rt2x00_rf(chip, RF2750)) {
> + spec->supported_bands |= SUPPORT_BAND_5GHZ;
> + spec->num_channels = ARRAY_SIZE(rf_vals);
> + spec->channels = rf_vals;
> + } else if (rt2x00_intf_is_usb(rt2x00dev) &&
> + (rt2x00_rf(chip, RF3020) ||
> + rt2x00_rf(chip, RF2020))) {
> + spec->num_channels = ARRAY_SIZE(rf_vals_3070);
> + spec->channels = rf_vals_3070;
> + }
> +
> + /*
> + * Initialize HT information.
> + */
> + spec->ht.ht_supported = true;
> + spec->ht.cap =
> + IEEE80211_HT_CAP_SUP_WIDTH_20_40 |
> + IEEE80211_HT_CAP_GRN_FLD |
> + IEEE80211_HT_CAP_SGI_20 |
> + IEEE80211_HT_CAP_SGI_40 |
> + IEEE80211_HT_CAP_TX_STBC |
> + IEEE80211_HT_CAP_RX_STBC |
> + IEEE80211_HT_CAP_PSMP_SUPPORT;
> + spec->ht.ampdu_factor = 3;
> + spec->ht.ampdu_density = 4;
> + spec->ht.mcs.tx_params =
> + IEEE80211_HT_MCS_TX_DEFINED |
> + IEEE80211_HT_MCS_TX_RX_DIFF |
> + ((rt2x00_get_field16(eeprom, EEPROM_ANTENNA_TXPATH) - 1) <<
> + IEEE80211_HT_MCS_TX_MAX_STREAMS_SHIFT);
> +
> + switch (rt2x00_get_field16(eeprom, EEPROM_ANTENNA_RXPATH)) {
> + case 3:
> + spec->ht.mcs.rx_mask[2] = 0xff;
> + case 2:
> + spec->ht.mcs.rx_mask[1] = 0xff;
> + case 1:
> + spec->ht.mcs.rx_mask[0] = 0xff;
> + spec->ht.mcs.rx_mask[4] = 0x1; /* MCS32 */
> + break;
> + }
> +
> + /*
> + * Create channel information array
> + */
> + info = kzalloc(spec->num_channels * sizeof(*info), GFP_KERNEL);
> + if (!info)
> + return -ENOMEM;
> +
> + spec->channels_info = info;
> +
> + tx_power1 = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_BG1);
> + tx_power2 = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_BG2);
> +
> + for (i = 0; i < 14; i++) {
> + info[i].tx_power1 = TXPOWER_G_FROM_DEV(tx_power1[i]);
> + info[i].tx_power2 = TXPOWER_G_FROM_DEV(tx_power2[i]);
> + }
> +
> + if (spec->num_channels > 14) {
> + tx_power1 = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_A1);
> + tx_power2 = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_A2);
> +
> + for (i = 14; i < spec->num_channels; i++) {
> + info[i].tx_power1 = TXPOWER_A_FROM_DEV(tx_power1[i]);
> + info[i].tx_power2 = TXPOWER_A_FROM_DEV(tx_power2[i]);
> + }
> + }
> +
> + return 0;
> +}
> +EXPORT_SYMBOL_GPL(rt2800_probe_hw_mode);
> +
> +/*
> * IEEE80211 stack callback functions.
> */
> static void rt2800_get_tkip_seq(struct ieee80211_hw *hw, u8 hw_key_idx,
> Index: b/drivers/net/wireless/rt2x00/rt2800lib.h
> ===================================================================
> --- a/drivers/net/wireless/rt2x00/rt2800lib.h
> +++ b/drivers/net/wireless/rt2x00/rt2800lib.h
> @@ -131,6 +131,7 @@ int rt2800_init_rfcsr(struct rt2x00_dev
>
> int rt2800_validate_eeprom(struct rt2x00_dev *rt2x00dev);
> int rt2800_init_eeprom(struct rt2x00_dev *rt2x00dev);
> +int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev);
>
> extern const struct ieee80211_ops rt2800_mac80211_ops;
>
> Index: b/drivers/net/wireless/rt2x00/rt2800pci.c
> ===================================================================
> --- a/drivers/net/wireless/rt2x00/rt2800pci.c
> +++ b/drivers/net/wireless/rt2x00/rt2800pci.c
> @@ -1098,194 +1098,6 @@ static int rt2800pci_validate_eeprom(str
> return rt2800_validate_eeprom(rt2x00dev);
> }
>
> -/*
> - * RF value list for rt2860
> - * Supports: 2.4 GHz (all) & 5.2 GHz (RF2850 & RF2750)
> - */
> -static const struct rf_channel rf_vals[] = {
> - { 1, 0x18402ecc, 0x184c0786, 0x1816b455, 0x1800510b },
> - { 2, 0x18402ecc, 0x184c0786, 0x18168a55, 0x1800519f },
> - { 3, 0x18402ecc, 0x184c078a, 0x18168a55, 0x1800518b },
> - { 4, 0x18402ecc, 0x184c078a, 0x18168a55, 0x1800519f },
> - { 5, 0x18402ecc, 0x184c078e, 0x18168a55, 0x1800518b },
> - { 6, 0x18402ecc, 0x184c078e, 0x18168a55, 0x1800519f },
> - { 7, 0x18402ecc, 0x184c0792, 0x18168a55, 0x1800518b },
> - { 8, 0x18402ecc, 0x184c0792, 0x18168a55, 0x1800519f },
> - { 9, 0x18402ecc, 0x184c0796, 0x18168a55, 0x1800518b },
> - { 10, 0x18402ecc, 0x184c0796, 0x18168a55, 0x1800519f },
> - { 11, 0x18402ecc, 0x184c079a, 0x18168a55, 0x1800518b },
> - { 12, 0x18402ecc, 0x184c079a, 0x18168a55, 0x1800519f },
> - { 13, 0x18402ecc, 0x184c079e, 0x18168a55, 0x1800518b },
> - { 14, 0x18402ecc, 0x184c07a2, 0x18168a55, 0x18005193 },
> -
> - /* 802.11 UNI / HyperLan 2 */
> - { 36, 0x18402ecc, 0x184c099a, 0x18158a55, 0x180ed1a3 },
> - { 38, 0x18402ecc, 0x184c099e, 0x18158a55, 0x180ed193 },
> - { 40, 0x18402ec8, 0x184c0682, 0x18158a55, 0x180ed183 },
> - { 44, 0x18402ec8, 0x184c0682, 0x18158a55, 0x180ed1a3 },
> - { 46, 0x18402ec8, 0x184c0686, 0x18158a55, 0x180ed18b },
> - { 48, 0x18402ec8, 0x184c0686, 0x18158a55, 0x180ed19b },
> - { 52, 0x18402ec8, 0x184c068a, 0x18158a55, 0x180ed193 },
> - { 54, 0x18402ec8, 0x184c068a, 0x18158a55, 0x180ed1a3 },
> - { 56, 0x18402ec8, 0x184c068e, 0x18158a55, 0x180ed18b },
> - { 60, 0x18402ec8, 0x184c0692, 0x18158a55, 0x180ed183 },
> - { 62, 0x18402ec8, 0x184c0692, 0x18158a55, 0x180ed193 },
> - { 64, 0x18402ec8, 0x184c0692, 0x18158a55, 0x180ed1a3 },
> -
> - /* 802.11 HyperLan 2 */
> - { 100, 0x18402ec8, 0x184c06b2, 0x18178a55, 0x180ed783 },
> - { 102, 0x18402ec8, 0x184c06b2, 0x18578a55, 0x180ed793 },
> - { 104, 0x18402ec8, 0x185c06b2, 0x18578a55, 0x180ed1a3 },
> - { 108, 0x18402ecc, 0x185c0a32, 0x18578a55, 0x180ed193 },
> - { 110, 0x18402ecc, 0x184c0a36, 0x18178a55, 0x180ed183 },
> - { 112, 0x18402ecc, 0x184c0a36, 0x18178a55, 0x180ed19b },
> - { 116, 0x18402ecc, 0x184c0a3a, 0x18178a55, 0x180ed1a3 },
> - { 118, 0x18402ecc, 0x184c0a3e, 0x18178a55, 0x180ed193 },
> - { 120, 0x18402ec4, 0x184c0382, 0x18178a55, 0x180ed183 },
> - { 124, 0x18402ec4, 0x184c0382, 0x18178a55, 0x180ed193 },
> - { 126, 0x18402ec4, 0x184c0382, 0x18178a55, 0x180ed15b },
> - { 128, 0x18402ec4, 0x184c0382, 0x18178a55, 0x180ed1a3 },
> - { 132, 0x18402ec4, 0x184c0386, 0x18178a55, 0x180ed18b },
> - { 134, 0x18402ec4, 0x184c0386, 0x18178a55, 0x180ed193 },
> - { 136, 0x18402ec4, 0x184c0386, 0x18178a55, 0x180ed19b },
> - { 140, 0x18402ec4, 0x184c038a, 0x18178a55, 0x180ed183 },
> -
> - /* 802.11 UNII */
> - { 149, 0x18402ec4, 0x184c038a, 0x18178a55, 0x180ed1a7 },
> - { 151, 0x18402ec4, 0x184c038e, 0x18178a55, 0x180ed187 },
> - { 153, 0x18402ec4, 0x184c038e, 0x18178a55, 0x180ed18f },
> - { 157, 0x18402ec4, 0x184c038e, 0x18178a55, 0x180ed19f },
> - { 159, 0x18402ec4, 0x184c038e, 0x18178a55, 0x180ed1a7 },
> - { 161, 0x18402ec4, 0x184c0392, 0x18178a55, 0x180ed187 },
> - { 165, 0x18402ec4, 0x184c0392, 0x18178a55, 0x180ed197 },
> - { 167, 0x18402ec4, 0x184c03d2, 0x18179855, 0x1815531f },
> - { 169, 0x18402ec4, 0x184c03d2, 0x18179855, 0x18155327 },
> - { 171, 0x18402ec4, 0x184c03d6, 0x18179855, 0x18155307 },
> - { 173, 0x18402ec4, 0x184c03d6, 0x18179855, 0x1815530f },
> -
> - /* 802.11 Japan */
> - { 184, 0x15002ccc, 0x1500491e, 0x1509be55, 0x150c0a0b },
> - { 188, 0x15002ccc, 0x15004922, 0x1509be55, 0x150c0a13 },
> - { 192, 0x15002ccc, 0x15004926, 0x1509be55, 0x150c0a1b },
> - { 196, 0x15002ccc, 0x1500492a, 0x1509be55, 0x150c0a23 },
> - { 208, 0x15002ccc, 0x1500493a, 0x1509be55, 0x150c0a13 },
> - { 212, 0x15002ccc, 0x1500493e, 0x1509be55, 0x150c0a1b },
> - { 216, 0x15002ccc, 0x15004982, 0x1509be55, 0x150c0a23 },
> -};
> -
> -static int rt2800pci_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
> -{
> - struct rt2x00_chip *chip = &rt2x00dev->chip;
> - struct hw_mode_spec *spec = &rt2x00dev->spec;
> - struct channel_info *info;
> - char *tx_power1;
> - char *tx_power2;
> - unsigned int i;
> - u16 eeprom;
> -
> - /*
> - * Initialize all hw fields.
> - */
> - rt2x00dev->hw->flags =
> - IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING |
> - IEEE80211_HW_SIGNAL_DBM |
> - IEEE80211_HW_SUPPORTS_PS |
> - IEEE80211_HW_PS_NULLFUNC_STACK;
> -
> - if (rt2x00_intf_is_pci(rt2x00dev))
> - rt2x00dev->hw->extra_tx_headroom = TXWI_DESC_SIZE;
> -
> - SET_IEEE80211_DEV(rt2x00dev->hw, rt2x00dev->dev);
> - SET_IEEE80211_PERM_ADDR(rt2x00dev->hw,
> - rt2x00_eeprom_addr(rt2x00dev,
> - EEPROM_MAC_ADDR_0));
> -
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_ANTENNA, &eeprom);
> -
> - /*
> - * Initialize hw_mode information.
> - */
> - spec->supported_bands = SUPPORT_BAND_2GHZ;
> - spec->supported_rates = SUPPORT_RATE_CCK | SUPPORT_RATE_OFDM;
> -
> - if (rt2x00_rf(chip, RF2820) ||
> - rt2x00_rf(chip, RF2720) ||
> - (rt2x00_intf_is_pci(rt2x00dev) &&
> - (rt2x00_rf(chip, RF3020) ||
> - rt2x00_rf(chip, RF3021) ||
> - rt2x00_rf(chip, RF3022) ||
> - rt2x00_rf(chip, RF2020) ||
> - rt2x00_rf(chip, RF3052)))) {
> - spec->num_channels = 14;
> - spec->channels = rf_vals;
> - } else if (rt2x00_rf(chip, RF2850) ||
> - rt2x00_rf(chip, RF2750)) {
> - spec->supported_bands |= SUPPORT_BAND_5GHZ;
> - spec->num_channels = ARRAY_SIZE(rf_vals);
> - spec->channels = rf_vals;
> - }
> -
> - /*
> - * Initialize HT information.
> - */
> - spec->ht.ht_supported = true;
> - spec->ht.cap =
> - IEEE80211_HT_CAP_SUP_WIDTH_20_40 |
> - IEEE80211_HT_CAP_GRN_FLD |
> - IEEE80211_HT_CAP_SGI_20 |
> - IEEE80211_HT_CAP_SGI_40 |
> - IEEE80211_HT_CAP_TX_STBC |
> - IEEE80211_HT_CAP_RX_STBC |
> - IEEE80211_HT_CAP_PSMP_SUPPORT;
> - spec->ht.ampdu_factor = 3;
> - spec->ht.ampdu_density = 4;
> - spec->ht.mcs.tx_params =
> - IEEE80211_HT_MCS_TX_DEFINED |
> - IEEE80211_HT_MCS_TX_RX_DIFF |
> - ((rt2x00_get_field16(eeprom, EEPROM_ANTENNA_TXPATH) - 1) <<
> - IEEE80211_HT_MCS_TX_MAX_STREAMS_SHIFT);
> -
> - switch (rt2x00_get_field16(eeprom, EEPROM_ANTENNA_RXPATH)) {
> - case 3:
> - spec->ht.mcs.rx_mask[2] = 0xff;
> - case 2:
> - spec->ht.mcs.rx_mask[1] = 0xff;
> - case 1:
> - spec->ht.mcs.rx_mask[0] = 0xff;
> - spec->ht.mcs.rx_mask[4] = 0x1; /* MCS32 */
> - break;
> - }
> -
> - /*
> - * Create channel information array
> - */
> - info = kzalloc(spec->num_channels * sizeof(*info), GFP_KERNEL);
> - if (!info)
> - return -ENOMEM;
> -
> - spec->channels_info = info;
> -
> - tx_power1 = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_BG1);
> - tx_power2 = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_BG2);
> -
> - for (i = 0; i < 14; i++) {
> - info[i].tx_power1 = TXPOWER_G_FROM_DEV(tx_power1[i]);
> - info[i].tx_power2 = TXPOWER_G_FROM_DEV(tx_power2[i]);
> - }
> -
> - if (spec->num_channels > 14) {
> - tx_power1 = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_A1);
> - tx_power2 = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_A2);
> -
> - for (i = 14; i < spec->num_channels; i++) {
> - info[i].tx_power1 = TXPOWER_A_FROM_DEV(tx_power1[i]);
> - info[i].tx_power2 = TXPOWER_A_FROM_DEV(tx_power2[i]);
> - }
> - }
> -
> - return 0;
> -}
> -
> static const struct rt2800_ops rt2800pci_rt2800_ops = {
> .register_read = rt2x00pci_register_read,
> .register_write = rt2x00pci_register_write,
> @@ -1319,7 +1131,7 @@ static int rt2800pci_probe_hw(struct rt2
> /*
> * Initialize hw specifications.
> */
> - retval = rt2800pci_probe_hw_mode(rt2x00dev);
> + retval = rt2800_probe_hw_mode(rt2x00dev);
> if (retval)
> return retval;
>
> Index: b/drivers/net/wireless/rt2x00/rt2800usb.c
> ===================================================================
> --- a/drivers/net/wireless/rt2x00/rt2800usb.c
> +++ b/drivers/net/wireless/rt2x00/rt2800usb.c
> @@ -672,215 +672,6 @@ static int rt2800usb_validate_eeprom(str
> return rt2800_validate_eeprom(rt2x00dev);
> }
>
> -/*
> - * RF value list for rt2870
> - * Supports: 2.4 GHz (all) & 5.2 GHz (RF2850 & RF2750)
> - */
> -static const struct rf_channel rf_vals[] = {
> - { 1, 0x18402ecc, 0x184c0786, 0x1816b455, 0x1800510b },
> - { 2, 0x18402ecc, 0x184c0786, 0x18168a55, 0x1800519f },
> - { 3, 0x18402ecc, 0x184c078a, 0x18168a55, 0x1800518b },
> - { 4, 0x18402ecc, 0x184c078a, 0x18168a55, 0x1800519f },
> - { 5, 0x18402ecc, 0x184c078e, 0x18168a55, 0x1800518b },
> - { 6, 0x18402ecc, 0x184c078e, 0x18168a55, 0x1800519f },
> - { 7, 0x18402ecc, 0x184c0792, 0x18168a55, 0x1800518b },
> - { 8, 0x18402ecc, 0x184c0792, 0x18168a55, 0x1800519f },
> - { 9, 0x18402ecc, 0x184c0796, 0x18168a55, 0x1800518b },
> - { 10, 0x18402ecc, 0x184c0796, 0x18168a55, 0x1800519f },
> - { 11, 0x18402ecc, 0x184c079a, 0x18168a55, 0x1800518b },
> - { 12, 0x18402ecc, 0x184c079a, 0x18168a55, 0x1800519f },
> - { 13, 0x18402ecc, 0x184c079e, 0x18168a55, 0x1800518b },
> - { 14, 0x18402ecc, 0x184c07a2, 0x18168a55, 0x18005193 },
> -
> - /* 802.11 UNI / HyperLan 2 */
> - { 36, 0x18402ecc, 0x184c099a, 0x18158a55, 0x180ed1a3 },
> - { 38, 0x18402ecc, 0x184c099e, 0x18158a55, 0x180ed193 },
> - { 40, 0x18402ec8, 0x184c0682, 0x18158a55, 0x180ed183 },
> - { 44, 0x18402ec8, 0x184c0682, 0x18158a55, 0x180ed1a3 },
> - { 46, 0x18402ec8, 0x184c0686, 0x18158a55, 0x180ed18b },
> - { 48, 0x18402ec8, 0x184c0686, 0x18158a55, 0x180ed19b },
> - { 52, 0x18402ec8, 0x184c068a, 0x18158a55, 0x180ed193 },
> - { 54, 0x18402ec8, 0x184c068a, 0x18158a55, 0x180ed1a3 },
> - { 56, 0x18402ec8, 0x184c068e, 0x18158a55, 0x180ed18b },
> - { 60, 0x18402ec8, 0x184c0692, 0x18158a55, 0x180ed183 },
> - { 62, 0x18402ec8, 0x184c0692, 0x18158a55, 0x180ed193 },
> - { 64, 0x18402ec8, 0x184c0692, 0x18158a55, 0x180ed1a3 },
> -
> - /* 802.11 HyperLan 2 */
> - { 100, 0x18402ec8, 0x184c06b2, 0x18178a55, 0x180ed783 },
> - { 102, 0x18402ec8, 0x184c06b2, 0x18578a55, 0x180ed793 },
> - { 104, 0x18402ec8, 0x185c06b2, 0x18578a55, 0x180ed1a3 },
> - { 108, 0x18402ecc, 0x185c0a32, 0x18578a55, 0x180ed193 },
> - { 110, 0x18402ecc, 0x184c0a36, 0x18178a55, 0x180ed183 },
> - { 112, 0x18402ecc, 0x184c0a36, 0x18178a55, 0x180ed19b },
> - { 116, 0x18402ecc, 0x184c0a3a, 0x18178a55, 0x180ed1a3 },
> - { 118, 0x18402ecc, 0x184c0a3e, 0x18178a55, 0x180ed193 },
> - { 120, 0x18402ec4, 0x184c0382, 0x18178a55, 0x180ed183 },
> - { 124, 0x18402ec4, 0x184c0382, 0x18178a55, 0x180ed193 },
> - { 126, 0x18402ec4, 0x184c0382, 0x18178a55, 0x180ed15b },
> - { 128, 0x18402ec4, 0x184c0382, 0x18178a55, 0x180ed1a3 },
> - { 132, 0x18402ec4, 0x184c0386, 0x18178a55, 0x180ed18b },
> - { 134, 0x18402ec4, 0x184c0386, 0x18178a55, 0x180ed193 },
> - { 136, 0x18402ec4, 0x184c0386, 0x18178a55, 0x180ed19b },
> - { 140, 0x18402ec4, 0x184c038a, 0x18178a55, 0x180ed183 },
> -
> - /* 802.11 UNII */
> - { 149, 0x18402ec4, 0x184c038a, 0x18178a55, 0x180ed1a7 },
> - { 151, 0x18402ec4, 0x184c038e, 0x18178a55, 0x180ed187 },
> - { 153, 0x18402ec4, 0x184c038e, 0x18178a55, 0x180ed18f },
> - { 157, 0x18402ec4, 0x184c038e, 0x18178a55, 0x180ed19f },
> - { 159, 0x18402ec4, 0x184c038e, 0x18178a55, 0x180ed1a7 },
> - { 161, 0x18402ec4, 0x184c0392, 0x18178a55, 0x180ed187 },
> - { 165, 0x18402ec4, 0x184c0392, 0x18178a55, 0x180ed197 },
> - { 167, 0x18402ec4, 0x184c03d2, 0x18179855, 0x1815531f },
> - { 169, 0x18402ec4, 0x184c03d2, 0x18179855, 0x18155327 },
> - { 171, 0x18402ec4, 0x184c03d6, 0x18179855, 0x18155307 },
> - { 173, 0x18402ec4, 0x184c03d6, 0x18179855, 0x1815530f },
> -
> - /* 802.11 Japan */
> - { 184, 0x15002ccc, 0x1500491e, 0x1509be55, 0x150c0a0b },
> - { 188, 0x15002ccc, 0x15004922, 0x1509be55, 0x150c0a13 },
> - { 192, 0x15002ccc, 0x15004926, 0x1509be55, 0x150c0a1b },
> - { 196, 0x15002ccc, 0x1500492a, 0x1509be55, 0x150c0a23 },
> - { 208, 0x15002ccc, 0x1500493a, 0x1509be55, 0x150c0a13 },
> - { 212, 0x15002ccc, 0x1500493e, 0x1509be55, 0x150c0a1b },
> - { 216, 0x15002ccc, 0x15004982, 0x1509be55, 0x150c0a23 },
> -};
> -
> -/*
> - * RF value list for rt3070
> - * Supports: 2.4 GHz
> - */
> -static const struct rf_channel rf_vals_3070[] = {
> - {1, 241, 2, 2 },
> - {2, 241, 2, 7 },
> - {3, 242, 2, 2 },
> - {4, 242, 2, 7 },
> - {5, 243, 2, 2 },
> - {6, 243, 2, 7 },
> - {7, 244, 2, 2 },
> - {8, 244, 2, 7 },
> - {9, 245, 2, 2 },
> - {10, 245, 2, 7 },
> - {11, 246, 2, 2 },
> - {12, 246, 2, 7 },
> - {13, 247, 2, 2 },
> - {14, 248, 2, 4 },
> -};
> -
> -static int rt2800usb_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
> -{
> - struct rt2x00_chip *chip = &rt2x00dev->chip;
> - struct hw_mode_spec *spec = &rt2x00dev->spec;
> - struct channel_info *info;
> - char *tx_power1;
> - char *tx_power2;
> - unsigned int i;
> - u16 eeprom;
> -
> - /*
> - * Initialize all hw fields.
> - */
> - rt2x00dev->hw->flags =
> - IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING |
> - IEEE80211_HW_SIGNAL_DBM |
> - IEEE80211_HW_SUPPORTS_PS |
> - IEEE80211_HW_PS_NULLFUNC_STACK;
> -
> - if (rt2x00_intf_is_usb(rt2x00dev))
> - rt2x00dev->hw->extra_tx_headroom =
> - TXINFO_DESC_SIZE + TXWI_DESC_SIZE;
> -
> - SET_IEEE80211_DEV(rt2x00dev->hw, rt2x00dev->dev);
> - SET_IEEE80211_PERM_ADDR(rt2x00dev->hw,
> - rt2x00_eeprom_addr(rt2x00dev,
> - EEPROM_MAC_ADDR_0));
> -
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_ANTENNA, &eeprom);
> -
> - /*
> - * Initialize hw_mode information.
> - */
> - spec->supported_bands = SUPPORT_BAND_2GHZ;
> - spec->supported_rates = SUPPORT_RATE_CCK | SUPPORT_RATE_OFDM;
> -
> - if (rt2x00_rf(chip, RF2820) ||
> - rt2x00_rf(chip, RF2720)) {
> - spec->num_channels = 14;
> - spec->channels = rf_vals;
> - } else if (rt2x00_rf(chip, RF2850) ||
> - rt2x00_rf(chip, RF2750)) {
> - spec->supported_bands |= SUPPORT_BAND_5GHZ;
> - spec->num_channels = ARRAY_SIZE(rf_vals);
> - spec->channels = rf_vals;
> - } else if (rt2x00_intf_is_usb(rt2x00dev) &&
> - (rt2x00_rf(chip, RF3020) ||
> - rt2x00_rf(chip, RF2020))) {
> - spec->num_channels = ARRAY_SIZE(rf_vals_3070);
> - spec->channels = rf_vals_3070;
> - }
> -
> - /*
> - * Initialize HT information.
> - */
> - spec->ht.ht_supported = true;
> - spec->ht.cap =
> - IEEE80211_HT_CAP_SUP_WIDTH_20_40 |
> - IEEE80211_HT_CAP_GRN_FLD |
> - IEEE80211_HT_CAP_SGI_20 |
> - IEEE80211_HT_CAP_SGI_40 |
> - IEEE80211_HT_CAP_TX_STBC |
> - IEEE80211_HT_CAP_RX_STBC |
> - IEEE80211_HT_CAP_PSMP_SUPPORT;
> - spec->ht.ampdu_factor = 3;
> - spec->ht.ampdu_density = 4;
> - spec->ht.mcs.tx_params =
> - IEEE80211_HT_MCS_TX_DEFINED |
> - IEEE80211_HT_MCS_TX_RX_DIFF |
> - ((rt2x00_get_field16(eeprom, EEPROM_ANTENNA_TXPATH) - 1) <<
> - IEEE80211_HT_MCS_TX_MAX_STREAMS_SHIFT);
> -
> - switch (rt2x00_get_field16(eeprom, EEPROM_ANTENNA_RXPATH)) {
> - case 3:
> - spec->ht.mcs.rx_mask[2] = 0xff;
> - case 2:
> - spec->ht.mcs.rx_mask[1] = 0xff;
> - case 1:
> - spec->ht.mcs.rx_mask[0] = 0xff;
> - spec->ht.mcs.rx_mask[4] = 0x1; /* MCS32 */
> - break;
> - }
> -
> - /*
> - * Create channel information array
> - */
> - info = kzalloc(spec->num_channels * sizeof(*info), GFP_KERNEL);
> - if (!info)
> - return -ENOMEM;
> -
> - spec->channels_info = info;
> -
> - tx_power1 = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_BG1);
> - tx_power2 = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_BG2);
> -
> - for (i = 0; i < 14; i++) {
> - info[i].tx_power1 = TXPOWER_G_FROM_DEV(tx_power1[i]);
> - info[i].tx_power2 = TXPOWER_G_FROM_DEV(tx_power2[i]);
> - }
> -
> - if (spec->num_channels > 14) {
> - tx_power1 = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_A1);
> - tx_power2 = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_A2);
> -
> - for (i = 14; i < spec->num_channels; i++) {
> - info[i].tx_power1 = TXPOWER_A_FROM_DEV(tx_power1[i]);
> - info[i].tx_power2 = TXPOWER_A_FROM_DEV(tx_power2[i]);
> - }
> - }
> -
> - return 0;
> -}
> -
> static const struct rt2800_ops rt2800usb_rt2800_ops = {
> .register_read = rt2x00usb_register_read,
> .register_write = rt2x00usb_register_write,
> @@ -914,7 +705,7 @@ static int rt2800usb_probe_hw(struct rt2
> /*
> * Initialize hw specifications.
> */
> - retval = rt2800usb_probe_hw_mode(rt2x00dev);
> + retval = rt2800_probe_hw_mode(rt2x00dev);
> if (retval)
> return retval;
>
>
See comments to [PATCH 5/9]. Once that is fixed then this one is OK too.
---
Gertjan.
next prev parent reply other threads:[~2009-11-08 14:36 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-11-08 13:38 [PATCH 1/9] rt2800: prepare for unification of EEPROM support code Bartlomiej Zolnierkiewicz
2009-11-08 13:39 ` [PATCH 2/9] rt2800: unify " Bartlomiej Zolnierkiewicz
2009-11-08 13:51 ` Ivo van Doorn
2009-11-08 14:19 ` Gertjan van Wingerde
2009-11-08 13:39 ` [PATCH 3/9] rt2800pci: add missing RF values to rf_vals table Bartlomiej Zolnierkiewicz
2009-11-08 13:51 ` Ivo van Doorn
2009-11-08 14:20 ` Gertjan van Wingerde
2009-11-08 13:39 ` [PATCH 4/9] rt2800usb: reorganize code in rt2800usb_probe_hw_mode() Bartlomiej Zolnierkiewicz
2009-11-08 13:52 ` Ivo van Doorn
2009-11-08 14:20 ` Gertjan van Wingerde
2009-11-08 13:39 ` [PATCH 5/9] rt2800: prepare for rt2800*_probe_hw_mode() unification Bartlomiej Zolnierkiewicz
2009-11-08 13:53 ` Ivo van Doorn
2009-11-08 14:35 ` Gertjan van Wingerde
2009-11-08 17:48 ` Bartlomiej Zolnierkiewicz
2009-11-08 19:09 ` Gertjan van Wingerde
2009-11-08 13:39 ` [PATCH 6/9] rt2800: unify rt2800*_probe_hw_mode() Bartlomiej Zolnierkiewicz
2009-11-08 13:53 ` Ivo van Doorn
2009-11-08 14:36 ` Gertjan van Wingerde [this message]
2009-11-08 13:39 ` [PATCH 7/9] rt2800usb: fix RX descriptor naming Bartlomiej Zolnierkiewicz
2009-11-08 13:54 ` Ivo van Doorn
2009-11-08 14:37 ` Gertjan van Wingerde
2009-11-08 13:39 ` [PATCH 8/9] rt2800: add eFuse EEPROM support code to rt2800lib Bartlomiej Zolnierkiewicz
2009-11-08 13:55 ` Ivo van Doorn
2009-11-08 17:34 ` Bartlomiej Zolnierkiewicz
2009-11-08 18:08 ` Ivo van Doorn
2009-11-08 18:13 ` Bartlomiej Zolnierkiewicz
2009-11-08 18:27 ` Ivo van Doorn
2009-11-08 18:32 ` Bartlomiej Zolnierkiewicz
2009-11-08 18:40 ` Ivo van Doorn
2009-11-08 18:47 ` Bartlomiej Zolnierkiewicz
2009-11-08 19:14 ` Kalle Valo
2009-11-08 19:21 ` Bartlomiej Zolnierkiewicz
2009-11-08 19:35 ` Ivo van Doorn
2009-11-08 19:38 ` Bartlomiej Zolnierkiewicz
2009-11-08 19:25 ` Ivo van Doorn
2009-11-08 19:34 ` Bartlomiej Zolnierkiewicz
2009-11-08 14:38 ` Gertjan van Wingerde
2009-11-08 13:39 ` [PATCH 9/9] rt2800usb: add eFuse EEPROM support Bartlomiej Zolnierkiewicz
2009-11-08 13:56 ` Ivo van Doorn
2009-11-08 14:41 ` Gertjan van Wingerde
2009-11-08 13:50 ` [PATCH 1/9] rt2800: prepare for unification of EEPROM support code Ivo van Doorn
2009-11-08 14:16 ` Gertjan van Wingerde
2009-11-08 17:41 ` Bartlomiej Zolnierkiewicz
2009-11-08 19:07 ` Gertjan van Wingerde
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4AF6D77D.30105@gmail.com \
--to=gwingerde@gmail.com \
--cc=bzolnier@gmail.com \
--cc=ivdoorn@gmail.com \
--cc=linux-wireless@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).