diff options
author | Naveen Gangadharan <ngangadh@qca.qualcomm.com> | 2012-02-08 20:51:36 -0500 |
---|---|---|
committer | Kalle Valo <kvalo@qca.qualcomm.com> | 2012-02-27 08:49:06 -0500 |
commit | d0ff7383a3164adff7072719717d574436ec1677 (patch) | |
tree | 82608cf36a386bf7874f6e4c8fd43397c2467dc8 /drivers/net/wireless/ath/ath6kl/wmi.c | |
parent | 3b96d49a79021ce4c1ca26aecd784d16aeb91a7c (diff) |
ath6kl: Add unicast mgmt frame buffering
PS buffering of unicast Action frames that are sent in a context
of a BSS. In AP mode when the recepient station goes to powersave
and PS_POLL flag is not set, we would buffer the frames. Send out
unicast mgmt bufferred frame when PS_POLL is received.
This fixes a bug in P2P GO behavior when sending a GO Discoverability
Request to a client that is in sleep mode.
kvalo: indentation fixes
Signed-off-by: Thirumalai Pachamuthu <tpachamu@qca.qualcomm.com>
Signed-off-by: Naveen Gangadharan <ngangadh@qca.qualcomm.com>
Signed-off-by: Aarthi Thiruvengadam <athiruve@qca.qualcomm.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
Diffstat (limited to 'drivers/net/wireless/ath/ath6kl/wmi.c')
-rw-r--r-- | drivers/net/wireless/ath/ath6kl/wmi.c | 37 |
1 files changed, 32 insertions, 5 deletions
diff --git a/drivers/net/wireless/ath/ath6kl/wmi.c b/drivers/net/wireless/ath/ath6kl/wmi.c index bbbe0a74d3c3..fce29f7f2e5c 100644 --- a/drivers/net/wireless/ath/ath6kl/wmi.c +++ b/drivers/net/wireless/ath/ath6kl/wmi.c | |||
@@ -3182,8 +3182,9 @@ int ath6kl_wmi_remain_on_chnl_cmd(struct wmi *wmi, u8 if_idx, u32 freq, u32 dur) | |||
3182 | * ath6kl_wmi_send_mgmt_cmd instead. The new function supports P2P | 3182 | * ath6kl_wmi_send_mgmt_cmd instead. The new function supports P2P |
3183 | * mgmt operations using station interface. | 3183 | * mgmt operations using station interface. |
3184 | */ | 3184 | */ |
3185 | int ath6kl_wmi_send_action_cmd(struct wmi *wmi, u8 if_idx, u32 id, u32 freq, | 3185 | static int ath6kl_wmi_send_action_cmd(struct wmi *wmi, u8 if_idx, u32 id, |
3186 | u32 wait, const u8 *data, u16 data_len) | 3186 | u32 freq, u32 wait, const u8 *data, |
3187 | u16 data_len) | ||
3187 | { | 3188 | { |
3188 | struct sk_buff *skb; | 3189 | struct sk_buff *skb; |
3189 | struct wmi_send_action_cmd *p; | 3190 | struct wmi_send_action_cmd *p; |
@@ -3219,9 +3220,9 @@ int ath6kl_wmi_send_action_cmd(struct wmi *wmi, u8 if_idx, u32 id, u32 freq, | |||
3219 | NO_SYNC_WMIFLAG); | 3220 | NO_SYNC_WMIFLAG); |
3220 | } | 3221 | } |
3221 | 3222 | ||
3222 | int ath6kl_wmi_send_mgmt_cmd(struct wmi *wmi, u8 if_idx, u32 id, u32 freq, | 3223 | static int __ath6kl_wmi_send_mgmt_cmd(struct wmi *wmi, u8 if_idx, u32 id, |
3223 | u32 wait, const u8 *data, u16 data_len, | 3224 | u32 freq, u32 wait, const u8 *data, |
3224 | u32 no_cck) | 3225 | u16 data_len, u32 no_cck) |
3225 | { | 3226 | { |
3226 | struct sk_buff *skb; | 3227 | struct sk_buff *skb; |
3227 | struct wmi_send_mgmt_cmd *p; | 3228 | struct wmi_send_mgmt_cmd *p; |
@@ -3258,6 +3259,32 @@ int ath6kl_wmi_send_mgmt_cmd(struct wmi *wmi, u8 if_idx, u32 id, u32 freq, | |||
3258 | NO_SYNC_WMIFLAG); | 3259 | NO_SYNC_WMIFLAG); |
3259 | } | 3260 | } |
3260 | 3261 | ||
3262 | int ath6kl_wmi_send_mgmt_cmd(struct wmi *wmi, u8 if_idx, u32 id, u32 freq, | ||
3263 | u32 wait, const u8 *data, u16 data_len, | ||
3264 | u32 no_cck) | ||
3265 | { | ||
3266 | int status; | ||
3267 | struct ath6kl *ar = wmi->parent_dev; | ||
3268 | |||
3269 | if (test_bit(ATH6KL_FW_CAPABILITY_STA_P2PDEV_DUPLEX, | ||
3270 | ar->fw_capabilities)) { | ||
3271 | /* | ||
3272 | * If capable of doing P2P mgmt operations using | ||
3273 | * station interface, send additional information like | ||
3274 | * supported rates to advertise and xmit rates for | ||
3275 | * probe requests | ||
3276 | */ | ||
3277 | status = __ath6kl_wmi_send_mgmt_cmd(ar->wmi, if_idx, id, freq, | ||
3278 | wait, data, data_len, | ||
3279 | no_cck); | ||
3280 | } else { | ||
3281 | status = ath6kl_wmi_send_action_cmd(ar->wmi, if_idx, id, freq, | ||
3282 | wait, data, data_len); | ||
3283 | } | ||
3284 | |||
3285 | return status; | ||
3286 | } | ||
3287 | |||
3261 | int ath6kl_wmi_send_probe_response_cmd(struct wmi *wmi, u8 if_idx, u32 freq, | 3288 | int ath6kl_wmi_send_probe_response_cmd(struct wmi *wmi, u8 if_idx, u32 freq, |
3262 | const u8 *dst, const u8 *data, | 3289 | const u8 *dst, const u8 *data, |
3263 | u16 data_len) | 3290 | u16 data_len) |