summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/carl9170/fw.c
diff options
context:
space:
mode:
authorChristian Lamparter <chunkeey@googlemail.com>2010-09-28 23:00:59 +0200
committerJohn W. Linville <linville@tuxdriver.com>2010-10-05 13:35:21 -0400
commit5c895691944862e782c285a871f5d3466797b4ef (patch)
tree7d49f76b23d23253b2c54a1794beb0676c66c615 /drivers/net/wireless/ath/carl9170/fw.c
parent85416a4fa193754ef36e12b20bb02fe661cb7f17 (diff)
downloadop-kernel-dev-5c895691944862e782c285a871f5d3466797b4ef.zip
op-kernel-dev-5c895691944862e782c285a871f5d3466797b4ef.tar.gz
carl9170: support firmware-based rx filter
The hardware rx-filter was essentially disabled, because of a serve, yet unidentifiable problem with iwlagn. Due to these circumstances the driver and mac80211 were left with the job of filtering. This is very unfortunate and has proven to be expensive in terms of latency, memory and load. Therefore the new 1.8.8.3 firmware introduces a flexible filtering infrastructure which allows the driver to offload some of the checks (FCS & PLCP crc check, RA match, control frame filter, etc...) whenever possible. Note: This patch also includes all changes to the shared headers files since the inclusion. Signed-off-by: Christian Lamparter <chunkeey@googlemail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/ath/carl9170/fw.c')
-rw-r--r--drivers/net/wireless/ath/carl9170/fw.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/carl9170/fw.c b/drivers/net/wireless/ath/carl9170/fw.c
index 3661546..ae6c006 100644
--- a/drivers/net/wireless/ath/carl9170/fw.c
+++ b/drivers/net/wireless/ath/carl9170/fw.c
@@ -257,6 +257,13 @@ static int carl9170_fw(struct ar9170 *ar, const __u8 *data, size_t len)
if (SUPP(CARL9170FW_USB_UP_STREAM))
ar->fw.rx_stream = true;
+ if (SUPP(CARL9170FW_RX_FILTER)) {
+ ar->fw.rx_filter = true;
+ ar->rx_filter_caps = FIF_FCSFAIL | FIF_PLCPFAIL |
+ FIF_CONTROL | FIF_PSPOLL | FIF_OTHER_BSS |
+ FIF_PROMISC_IN_BSS;
+ }
+
ar->fw.vif_num = otus_desc->vif_num;
ar->fw.cmd_bufs = otus_desc->cmd_bufs;
ar->fw.address = le32_to_cpu(otus_desc->fw_address);
OpenPOWER on IntegriCloud