Commit 78d57eb2 authored by Christian Lamparter's avatar Christian Lamparter Committed by John W. Linville

p54: add more rx filters

This patch adds new filters settings to make the card more useful in monitor mode.
Signed-off-by: default avatarChristian Lamparter <chunkeey@web.de>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent a0db663f
...@@ -80,6 +80,7 @@ struct p54_common { ...@@ -80,6 +80,7 @@ struct p54_common {
struct pda_channel_output_limit *output_limit; struct pda_channel_output_limit *output_limit;
unsigned int output_limit_len; unsigned int output_limit_len;
struct pda_pa_curve_data *curve_data; struct pda_pa_curve_data *curve_data;
unsigned int filter_flags;
u16 rxhw; u16 rxhw;
u8 version; u8 version;
u8 rx_antenna; u8 rx_antenna;
......
...@@ -433,6 +433,13 @@ static int p54_rx_data(struct ieee80211_hw *dev, struct sk_buff *skb) ...@@ -433,6 +433,13 @@ static int p54_rx_data(struct ieee80211_hw *dev, struct sk_buff *skb)
size_t header_len = sizeof(*hdr); size_t header_len = sizeof(*hdr);
u32 tsf32; u32 tsf32;
if (!(hdr->magic & cpu_to_le16(0x0001))) {
if (priv->filter_flags & FIF_FCSFAIL)
rx_status.flag |= RX_FLAG_FAILED_FCS_CRC;
else
return 0;
}
rx_status.signal = hdr->rssi; rx_status.signal = hdr->rssi;
/* XX correct? */ /* XX correct? */
rx_status.qual = (100 * hdr->rssi) / 127; rx_status.qual = (100 * hdr->rssi) / 127;
...@@ -1127,13 +1134,26 @@ static void p54_configure_filter(struct ieee80211_hw *dev, ...@@ -1127,13 +1134,26 @@ static void p54_configure_filter(struct ieee80211_hw *dev,
{ {
struct p54_common *priv = dev->priv; struct p54_common *priv = dev->priv;
*total_flags &= FIF_BCN_PRBRESP_PROMISC; *total_flags &= FIF_BCN_PRBRESP_PROMISC |
FIF_PROMISC_IN_BSS |
FIF_FCSFAIL;
priv->filter_flags = *total_flags;
if (changed_flags & FIF_BCN_PRBRESP_PROMISC) { if (changed_flags & FIF_BCN_PRBRESP_PROMISC) {
if (*total_flags & FIF_BCN_PRBRESP_PROMISC) if (*total_flags & FIF_BCN_PRBRESP_PROMISC)
p54_set_filter(dev, 0, NULL); p54_set_filter(dev, priv->filter_type, NULL);
else
p54_set_filter(dev, priv->filter_type, priv->bssid);
}
if (changed_flags & FIF_PROMISC_IN_BSS) {
if (*total_flags & FIF_PROMISC_IN_BSS)
p54_set_filter(dev, priv->filter_type |
cpu_to_le16(0x8), NULL);
else else
p54_set_filter(dev, 0, priv->bssid); p54_set_filter(dev, priv->filter_type &
~cpu_to_le16(0x8), priv->bssid);
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment