2007-08-31 04:58:56

by Michael Wu

[permalink] [raw]
Subject: [PATCH 4/6] adm8211: Use IEEE80211_HW_DEFAULT_REG_DOMAIN_CONFIGURED

From: Michael Wu <[email protected]>

This makes it possible to use channels > 11.

Signed-off-by: Michael Wu <[email protected]>
---

drivers/net/wireless/adm8211.c | 25 ++++++++--------
drivers/net/wireless/adm8211.h | 63 ++++++++++++++++++++--------------------
2 files changed, 45 insertions(+), 43 deletions(-)

diff --git a/drivers/net/wireless/adm8211.c b/drivers/net/wireless/adm8211.c
index 575182e..4af3008 100644
--- a/drivers/net/wireless/adm8211.c
+++ b/drivers/net/wireless/adm8211.c
@@ -85,7 +85,7 @@ static void adm8211_eeprom_register_write(struct eeprom_93cx6 *eeprom)
static int adm8211_read_eeprom(struct ieee80211_hw *dev)
{
struct adm8211_priv *priv = dev->priv;
- unsigned int words, channels;
+ unsigned int words, i;
struct ieee80211_chan_range chan_range;
u16 cr49;
struct eeprom_93cx6 eeprom = {
@@ -160,17 +160,17 @@ static int adm8211_read_eeprom(struct ieee80211_hw *dev)
printk(KERN_DEBUG "%s (adm8211): Channel range: %d - %d\n",
pci_name(priv->pdev), (int)chan_range.min, (int)chan_range.max);

- channels = chan_range.max - chan_range.min + 1;
- priv->modes[0].num_channels = channels;
- priv->modes[0].channels = kmalloc(sizeof(struct ieee80211_channel) *
- channels, GFP_KERNEL);
- if (!priv->modes[0].channels) {
- kfree(priv->eeprom);
- return -ENOMEM;
- }
+ priv->modes[0].num_channels = chan_range.max - chan_range.min + 1;
+ priv->modes[0].channels = priv->channels;
+
+ memcpy(priv->channels, adm8211_channels, sizeof(adm8211_channels));

- memcpy(priv->modes[0].channels, &adm8211_channels[chan_range.min - 1],
- sizeof(struct ieee80211_channel) * channels);
+ for (i = 1; i <= ARRAY_SIZE(adm8211_channels); i++)
+ if (i >= chan_range.min && i <= chan_range.max)
+ priv->channels[i - 1].flag =
+ IEEE80211_CHAN_W_SCAN |
+ IEEE80211_CHAN_W_ACTIVE_SCAN |
+ IEEE80211_CHAN_W_IBSS;

switch (priv->eeprom->specific_bbptype) {
case ADM8211_BBP_RFMD3000:
@@ -1877,7 +1877,8 @@ static int __devinit adm8211_probe(struct pci_dev *pdev,
SET_IEEE80211_PERM_ADDR(dev, perm_addr);

dev->extra_tx_headroom = sizeof(struct adm8211_tx_hdr);
- dev->flags = IEEE80211_HW_WEP_INCLUDE_IV;
+ dev->flags = IEEE80211_HW_WEP_INCLUDE_IV |
+ IEEE80211_HW_DEFAULT_REG_DOMAIN_CONFIGURED;
/* IEEE80211_HW_RX_INCLUDES_FCS in promisc mode */

dev->channel_change_time = 1000;
diff --git a/drivers/net/wireless/adm8211.h b/drivers/net/wireless/adm8211.h
index 35f4658..926c66d 100644
--- a/drivers/net/wireless/adm8211.h
+++ b/drivers/net/wireless/adm8211.h
@@ -558,6 +558,37 @@ struct ieee80211_chan_range {
u8 max;
};

+static const struct ieee80211_channel adm8211_channels[] = {
+ { .chan = 1,
+ .freq = 2412},
+ { .chan = 2,
+ .freq = 2417},
+ { .chan = 3,
+ .freq = 2422},
+ { .chan = 4,
+ .freq = 2427},
+ { .chan = 5,
+ .freq = 2432},
+ { .chan = 6,
+ .freq = 2437},
+ { .chan = 7,
+ .freq = 2442},
+ { .chan = 8,
+ .freq = 2447},
+ { .chan = 9,
+ .freq = 2452},
+ { .chan = 10,
+ .freq = 2457},
+ { .chan = 11,
+ .freq = 2462},
+ { .chan = 12,
+ .freq = 2467},
+ { .chan = 13,
+ .freq = 2472},
+ { .chan = 14,
+ .freq = 2484},
+};
+
struct adm8211_priv {
struct pci_dev *pdev;
spinlock_t lock;
@@ -573,6 +604,7 @@ struct adm8211_priv {

struct ieee80211_low_level_stats stats;
struct ieee80211_hw_mode modes[1];
+ struct ieee80211_channel channels[ARRAY_SIZE(adm8211_channels)];
struct ieee80211_rate rates[ARRAY_SIZE(adm8211_rates)];
int mode;

@@ -624,35 +656,4 @@ static const struct ieee80211_chan_range cranges[] = {
{1, 14}, /* MMK2 */
};

-static const struct ieee80211_channel adm8211_channels[] = {
- { .chan = 1,
- .freq = 2412},
- { .chan = 2,
- .freq = 2417},
- { .chan = 3,
- .freq = 2422},
- { .chan = 4,
- .freq = 2427},
- { .chan = 5,
- .freq = 2432},
- { .chan = 6,
- .freq = 2437},
- { .chan = 7,
- .freq = 2442},
- { .chan = 8,
- .freq = 2447},
- { .chan = 9,
- .freq = 2452},
- { .chan = 10,
- .freq = 2457},
- { .chan = 11,
- .freq = 2462},
- { .chan = 12,
- .freq = 2467},
- { .chan = 13,
- .freq = 2472},
- { .chan = 14,
- .freq = 2484},
-};
-
#endif /* ADM8211_H */