summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/carl9170/cmd.h
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 19:35:21 +0200
commit5c895691944862e782c285a871f5d3466797b4ef (patch)
tree7d49f76b23d23253b2c54a1794beb0676c66c615 /drivers/net/wireless/ath/carl9170/cmd.h
parentmac80211: fix rx monitor filter refcounters (diff)
downloadlinux-5c895691944862e782c285a871f5d3466797b4ef.tar.xz
linux-5c895691944862e782c285a871f5d3466797b4ef.zip
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/cmd.h')
-rw-r--r--drivers/net/wireless/ath/carl9170/cmd.h10
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/carl9170/cmd.h b/drivers/net/wireless/ath/carl9170/cmd.h
index 0fc83d2336fd..f78728c38294 100644
--- a/drivers/net/wireless/ath/carl9170/cmd.h
+++ b/drivers/net/wireless/ath/carl9170/cmd.h
@@ -59,6 +59,16 @@ static inline int carl9170_flush_cab(struct ar9170 *ar,
return carl9170_bcn_ctrl(ar, vif_id, CARL9170_BCN_CTRL_DRAIN, 0, 0);
}
+static inline int carl9170_rx_filter(struct ar9170 *ar,
+ const unsigned int _rx_filter)
+{
+ __le32 rx_filter = cpu_to_le32(_rx_filter);
+
+ return carl9170_exec_cmd(ar, CARL9170_CMD_RX_FILTER,
+ sizeof(rx_filter), (u8 *)&rx_filter,
+ 0, NULL);
+}
+
struct carl9170_cmd *carl9170_cmd_buf(struct ar9170 *ar,
const enum carl9170_cmd_oids cmd, const unsigned int len);