set freq in ieee80211_rx_status

This patch fixes the RX handler in adm8211 and p54 to report the current 
frequency and channel. Should probably be handled in d80211 instead, but this 
will fix things for now. It also eliminates some definitions in adm8211.h 
that are no longer necessary.

Signed-off-by: Michael Wu <[EMAIL PROTECTED]>

---

 drivers/net/wireless/d80211/adm8211/adm8211.c   |    3 ++
 drivers/net/wireless/d80211/adm8211/adm8211.h   |   42 
++++++++---------------
 drivers/net/wireless/d80211/p54/prism54.h       |    1 +
 drivers/net/wireless/d80211/p54/prism54common.c |    6 +++
 4 files changed, 24 insertions(+), 28 deletions(-)

diff --git a/drivers/net/wireless/d80211/adm8211/adm8211.c 
b/drivers/net/wireless/d80211/adm8211/adm8211.c
index 3bce55f..9f965d3 100644
--- a/drivers/net/wireless/d80211/adm8211/adm8211.c
+++ b/drivers/net/wireless/d80211/adm8211/adm8211.c
@@ -551,6 +551,9 @@ static void adm8211_interrupt_rci(struct
                        if (rate <= 4)
                                rx_status.rate = rate_tbl[rate];
 
+                       rx_status.channel = priv->channel;
+                       rx_status.freq = adm8211_channels[priv->channel - 
1].freq;
+
                        /* remove FCS */
                        /* TODO: remove this and set flag in ieee80211_hw 
instead? */
                        if (dev->flags & IFF_PROMISC)
diff --git a/drivers/net/wireless/d80211/adm8211/adm8211.h 
b/drivers/net/wireless/d80211/adm8211/adm8211.h
index 89e0fdf..a579a90 100644
--- a/drivers/net/wireless/d80211/adm8211/adm8211.h
+++ b/drivers/net/wireless/d80211/adm8211/adm8211.h
@@ -590,47 +590,33 @@ static const struct ieee80211_chan_range
 
 static const struct ieee80211_channel adm8211_channels[] = {
        { .chan = 1,
-         .freq = 2412,
-         .flag = IEEE80211_CHAN_W_SCAN | IEEE80211_CHAN_W_ACTIVE_SCAN | 
IEEE80211_CHAN_W_IBSS},
+         .freq = 2412},
        { .chan = 2,
-         .freq = 2417,
-         .flag = IEEE80211_CHAN_W_SCAN | IEEE80211_CHAN_W_ACTIVE_SCAN | 
IEEE80211_CHAN_W_IBSS},
+         .freq = 2417},
        { .chan = 3,
-         .freq = 2422,
-         .flag = IEEE80211_CHAN_W_SCAN | IEEE80211_CHAN_W_ACTIVE_SCAN | 
IEEE80211_CHAN_W_IBSS},
+         .freq = 2422},
        { .chan = 4,
-         .freq = 2427,
-         .flag = IEEE80211_CHAN_W_SCAN | IEEE80211_CHAN_W_ACTIVE_SCAN | 
IEEE80211_CHAN_W_IBSS},
+         .freq = 2427},
        { .chan = 5,
-         .freq = 2432,
-         .flag = IEEE80211_CHAN_W_SCAN | IEEE80211_CHAN_W_ACTIVE_SCAN | 
IEEE80211_CHAN_W_IBSS},
+         .freq = 2432},
        { .chan = 6,
-         .freq = 2437,
-         .flag = IEEE80211_CHAN_W_SCAN | IEEE80211_CHAN_W_ACTIVE_SCAN | 
IEEE80211_CHAN_W_IBSS},
+         .freq = 2437},
        { .chan = 7,
-         .freq = 2442,
-         .flag = IEEE80211_CHAN_W_SCAN | IEEE80211_CHAN_W_ACTIVE_SCAN | 
IEEE80211_CHAN_W_IBSS},
+         .freq = 2442},
        { .chan = 8,
-         .freq = 2447,
-         .flag = IEEE80211_CHAN_W_SCAN | IEEE80211_CHAN_W_ACTIVE_SCAN | 
IEEE80211_CHAN_W_IBSS},
+         .freq = 2447},
        { .chan = 9,
-         .freq = 2452,
-         .flag = IEEE80211_CHAN_W_SCAN | IEEE80211_CHAN_W_ACTIVE_SCAN | 
IEEE80211_CHAN_W_IBSS},
+         .freq = 2452},
        { .chan = 10,
-         .freq = 2457,
-         .flag = IEEE80211_CHAN_W_SCAN | IEEE80211_CHAN_W_ACTIVE_SCAN | 
IEEE80211_CHAN_W_IBSS},
+         .freq = 2457},
        { .chan = 11,
-         .freq = 2462,
-         .flag = IEEE80211_CHAN_W_SCAN | IEEE80211_CHAN_W_ACTIVE_SCAN | 
IEEE80211_CHAN_W_IBSS},
+         .freq = 2462},
        { .chan = 12,
-         .freq = 2467,
-         .flag = IEEE80211_CHAN_W_SCAN | IEEE80211_CHAN_W_ACTIVE_SCAN | 
IEEE80211_CHAN_W_IBSS},
+         .freq = 2467},
        { .chan = 13,
-         .freq = 2472,
-         .flag = IEEE80211_CHAN_W_SCAN | IEEE80211_CHAN_W_ACTIVE_SCAN | 
IEEE80211_CHAN_W_IBSS},
+         .freq = 2472},
        { .chan = 14,
-         .freq = 2484,
-         .flag = IEEE80211_CHAN_W_SCAN | IEEE80211_CHAN_W_ACTIVE_SCAN | 
IEEE80211_CHAN_W_IBSS}
+         .freq = 2484},
 };
 
 #endif /* ADM8211_H */
diff --git a/drivers/net/wireless/d80211/p54/prism54.h 
b/drivers/net/wireless/d80211/p54/prism54.h
index a165cc5..f2aaafe 100644
--- a/drivers/net/wireless/d80211/p54/prism54.h
+++ b/drivers/net/wireless/d80211/p54/prism54.h
@@ -53,6 +53,7 @@ struct p54_common {
        int (*open)(struct net_device *dev);
        void (*stop)(struct net_device *dev);
        int mode;
+       int channel;
        struct pda_iq_autocal_entry *iq_autocal;
        unsigned int iq_autocal_len;
        struct pda_channel_output_limit *output_limit;
diff --git a/drivers/net/wireless/d80211/p54/prism54common.c 
b/drivers/net/wireless/d80211/p54/prism54common.c
index a96a4fc..34bccee 100644
--- a/drivers/net/wireless/d80211/p54/prism54common.c
+++ b/drivers/net/wireless/d80211/p54/prism54common.c
@@ -206,11 +206,14 @@ EXPORT_SYMBOL_GPL(p54_parse_eeprom);
 
 static void p54_rx_data(struct net_device *dev, struct sk_buff *skb)
 {
+       struct p54_common *priv = ieee80211_dev_hw_data(skb->dev);
        struct p54_rx_hdr *hdr = (struct p54_rx_hdr *) skb->data;
        struct ieee80211_rx_status rx_status = {0};
 
        rx_status.ssi = hdr->rssi;      /* TODO: check this */
        rx_status.rate = min(hdr->rate + 1, 12);        /* TODO: check this */
+       rx_status.channel = priv->channel;
+       rx_status.freq = p54_channels[priv->channel - 1].freq;
 
        skb_pull(skb, sizeof(*hdr));
        skb_trim(skb, le16_to_cpu(hdr->len));
@@ -579,6 +582,8 @@ static void p54_remove_interface(struct 
 
 static int p54_config(struct net_device *dev, struct ieee80211_conf *conf)
 {
+       struct p54_common *priv = ieee80211_dev_hw_data(dev);
+       priv->channel = conf->channel;
        p54_set_freq(dev, cpu_to_le16(conf->freq));
        return 0;
 }
@@ -611,6 +616,7 @@ void p54_init_common(struct net_device *
        struct ieee80211_hw *hw = &priv->hw;
 
        priv->mode = IEEE80211_IF_TYPE_MGMT;
+       priv->channel = 1;
        skb_queue_head_init(&priv->tx_queue);
        memcpy(priv->channels, p54_channels, sizeof(p54_channels));
        memcpy(priv->rates, p54_rates, sizeof(p54_rates));

Attachment: pgprBCWw6O4J4.pgp
Description: PGP signature

Reply via email to