]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/net/wireless/hostap/hostap_80211_rx.c
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
[linux-2.6-omap-h63xx.git] / drivers / net / wireless / hostap / hostap_80211_rx.c
index 020f450e9dba9cd7f903e7c5b380a5f0600d1c04..f106bc1585a45bbeacb1c1a6f2716e2ac8dfc1b0 100644 (file)
@@ -78,6 +78,9 @@ int prism2_rx_80211(struct net_device *dev, struct sk_buff *skb,
                        prism_header = 2;
                        phdrlen = sizeof(struct linux_wlan_ng_cap_hdr);
                }
+       } else if (dev->type == ARPHRD_IEEE80211_RADIOTAP) {
+               prism_header = 3;
+               phdrlen = sizeof(struct hostap_radiotap_rx);
        } else {
                prism_header = 0;
                phdrlen = 0;
@@ -165,6 +168,24 @@ hdr->f.status = s; hdr->f.len = l; hdr->f.data = d
                hdr->ssi_noise  = htonl(rx_stats->noise);
                hdr->preamble   = htonl(0); /* unknown */
                hdr->encoding   = htonl(1); /* cck */
+       } else if (prism_header == 3) {
+               struct hostap_radiotap_rx *hdr;
+               hdr = (struct hostap_radiotap_rx *)skb_push(skb, phdrlen);
+               memset(hdr, 0, phdrlen);
+               hdr->hdr.it_len = cpu_to_le16(phdrlen);
+               hdr->hdr.it_present =
+                       cpu_to_le32((1 << IEEE80211_RADIOTAP_TSFT) |
+                                   (1 << IEEE80211_RADIOTAP_CHANNEL) |
+                                   (1 << IEEE80211_RADIOTAP_RATE) |
+                                   (1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL) |
+                                   (1 << IEEE80211_RADIOTAP_DBM_ANTNOISE));
+               hdr->tsft = cpu_to_le64(rx_stats->mac_time);
+               hdr->chan_freq = cpu_to_le16(freq_list[local->channel - 1]);
+               hdr->chan_flags = cpu_to_le16(IEEE80211_CHAN_CCK |
+                                                IEEE80211_CHAN_2GHZ);
+               hdr->rate = rx_stats->rate / 5;
+               hdr->dbm_antsignal = rx_stats->signal;
+               hdr->dbm_antnoise = rx_stats->noise;
        }
 
        ret = skb->len - phdrlen;