diff options
author | Amitkumar Karwar <akarwar@marvell.com> | 2013-08-06 05:52:00 +0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2013-08-09 23:57:51 +0400 |
commit | 562fc5b30f228d4a8c1dad90c82897a5440d7a0b (patch) | |
tree | 663df0f0777f30e83ba56cbce05ee25be3c5c28a /drivers/net/wireless/mwifiex/ioctl.h | |
parent | afd84de47309cbdf96ea80d073233834f28393a5 (diff) | |
download | linux-562fc5b30f228d4a8c1dad90c82897a5440d7a0b.tar.xz |
mwifiex: add packet coalesce support
Coalesce filters are configured in firmware based on settings
received from cfg80211.
Packet type which is required by firmware is determined based on
provided patterns in a rule:
Unicast: if pattern '01' with offset 0 is found
Multicast: if pattern '33:33' or '01:00:5e' with offset 0 is found
Broadcast: if pattern 'ff:ff:ff:ff' with offset 0 is found
Some example coalesce configuration files:
1) Coalesce Rx data packets from 192.168.0.88
mac address of our device is 00:50:43:21:53:7A
Source IP address offset comes out as 52 after following
calculations:
32 bytes of HW 802.11 header + 8 bytes LLC +
12 bytes in IPV4 header till source IP address
Destination mac is at offset 6 in HW header.
delay=100
condition=1
patterns=01,6+00:50:43:22,10+53:7A,52+c0:a8:00:58
2) Coalesce all broadcast and multicast packets(Multiple packet
types are not allowed in a single rule. Hence created separate
rules)
delay=400
condition=1
patterns=33:33
delay=400
condition=1
patterns=ff:ff:ff:ff
Signed-off-by: Amitkumar Karwar <akarwar@marvell.com>
Signed-off-by: Bing Zhao <bzhao@marvell.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/mwifiex/ioctl.h')
-rw-r--r-- | drivers/net/wireless/mwifiex/ioctl.h | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/drivers/net/wireless/mwifiex/ioctl.h b/drivers/net/wireless/mwifiex/ioctl.h index 5ecda453f832..00a95f4c6a6c 100644 --- a/drivers/net/wireless/mwifiex/ioctl.h +++ b/drivers/net/wireless/mwifiex/ioctl.h @@ -397,4 +397,39 @@ enum { MWIFIEX_FUNC_SHUTDOWN, }; +enum COALESCE_OPERATION { + RECV_FILTER_MATCH_TYPE_EQ = 0x80, + RECV_FILTER_MATCH_TYPE_NE, +}; + +enum COALESCE_PACKET_TYPE { + PACKET_TYPE_UNICAST = 1, + PACKET_TYPE_MULTICAST = 2, + PACKET_TYPE_BROADCAST = 3 +}; + +#define MWIFIEX_COALESCE_MAX_RULES 8 +#define MWIFIEX_COALESCE_MAX_BYTESEQ 4 /* non-adjustable */ +#define MWIFIEX_COALESCE_MAX_FILTERS 4 +#define MWIFIEX_MAX_COALESCING_DELAY 100 /* in msecs */ + +struct filt_field_param { + u8 operation; + u8 operand_len; + u16 offset; + u8 operand_byte_stream[MWIFIEX_COALESCE_MAX_BYTESEQ]; +}; + +struct mwifiex_coalesce_rule { + u16 max_coalescing_delay; + u8 num_of_fields; + u8 pkt_type; + struct filt_field_param params[MWIFIEX_COALESCE_MAX_FILTERS]; +}; + +struct mwifiex_ds_coalesce_cfg { + u16 num_of_rules; + struct mwifiex_coalesce_rule rule[MWIFIEX_COALESCE_MAX_RULES]; +}; + #endif /* !_MWIFIEX_IOCTL_H_ */ |