diff options
author | Raja Mani <rmani@qca.qualcomm.com> | 2011-11-07 15:52:45 -0500 |
---|---|---|
committer | Kalle Valo <kvalo@qca.qualcomm.com> | 2011-11-11 05:59:59 -0500 |
commit | 5c9b4fa19a488de48f1cc2268a7b7b247723568a (patch) | |
tree | 89b7eb7fbc6cc73e4ab71b567aebf3cd0675cbb4 /drivers | |
parent | f3e61eceb20a993ea2b375e82503ab8a1efa31d9 (diff) |
ath6kl: Add wmi functions to add/delete WOW patterns
These commands will be used in WOW suspend/resume functions
to configure WOW parameters like patterns to be matched
and it's mask value, etc.
Signed-off-by: Raja Mani <rmani@qca.qualcomm.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/wireless/ath/ath6kl/wmi.c | 56 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath6kl/wmi.h | 17 |
2 files changed, 73 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/ath6kl/wmi.c b/drivers/net/wireless/ath/ath6kl/wmi.c index 612326d96070..925ef4c9bec9 100644 --- a/drivers/net/wireless/ath/ath6kl/wmi.c +++ b/drivers/net/wireless/ath/ath6kl/wmi.c | |||
@@ -2412,6 +2412,62 @@ int ath6kl_wmi_set_ip_cmd(struct wmi *wmi, struct wmi_set_ip_cmd *ip_cmd) | |||
2412 | return ret; | 2412 | return ret; |
2413 | } | 2413 | } |
2414 | 2414 | ||
2415 | int ath6kl_wmi_add_wow_pattern_cmd(struct wmi *wmi, u8 if_idx, | ||
2416 | u8 list_id, u8 filter_size, | ||
2417 | u8 filter_offset, u8 *filter, u8 *mask) | ||
2418 | { | ||
2419 | struct sk_buff *skb; | ||
2420 | struct wmi_add_wow_pattern_cmd *cmd; | ||
2421 | u16 size; | ||
2422 | u8 *filter_mask; | ||
2423 | int ret; | ||
2424 | |||
2425 | /* | ||
2426 | * Allocate additional memory in the buffer to hold | ||
2427 | * filter and mask value, which is twice of filter_size. | ||
2428 | */ | ||
2429 | size = sizeof(*cmd) + (2 * filter_size); | ||
2430 | |||
2431 | skb = ath6kl_wmi_get_new_buf(size); | ||
2432 | if (!skb) | ||
2433 | return -ENOMEM; | ||
2434 | |||
2435 | cmd = (struct wmi_add_wow_pattern_cmd *) skb->data; | ||
2436 | cmd->filter_list_id = list_id; | ||
2437 | cmd->filter_size = filter_size; | ||
2438 | cmd->filter_offset = filter_offset; | ||
2439 | |||
2440 | memcpy(cmd->filter, filter, filter_size); | ||
2441 | |||
2442 | filter_mask = (u8 *) (cmd->filter + filter_size); | ||
2443 | memcpy(filter_mask, mask, filter_size); | ||
2444 | |||
2445 | ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_ADD_WOW_PATTERN_CMDID, | ||
2446 | NO_SYNC_WMIFLAG); | ||
2447 | |||
2448 | return ret; | ||
2449 | } | ||
2450 | |||
2451 | int ath6kl_wmi_del_wow_pattern_cmd(struct wmi *wmi, u8 if_idx, | ||
2452 | u16 list_id, u16 filter_id) | ||
2453 | { | ||
2454 | struct sk_buff *skb; | ||
2455 | struct wmi_del_wow_pattern_cmd *cmd; | ||
2456 | int ret; | ||
2457 | |||
2458 | skb = ath6kl_wmi_get_new_buf(sizeof(*cmd)); | ||
2459 | if (!skb) | ||
2460 | return -ENOMEM; | ||
2461 | |||
2462 | cmd = (struct wmi_del_wow_pattern_cmd *) skb->data; | ||
2463 | cmd->filter_list_id = cpu_to_le16(list_id); | ||
2464 | cmd->filter_id = cpu_to_le16(filter_id); | ||
2465 | |||
2466 | ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_DEL_WOW_PATTERN_CMDID, | ||
2467 | NO_SYNC_WMIFLAG); | ||
2468 | return ret; | ||
2469 | } | ||
2470 | |||
2415 | static int ath6kl_wmi_get_wow_list_event_rx(struct wmi *wmi, u8 * datap, | 2471 | static int ath6kl_wmi_get_wow_list_event_rx(struct wmi *wmi, u8 * datap, |
2416 | int len) | 2472 | int len) |
2417 | { | 2473 | { |
diff --git a/drivers/net/wireless/ath/ath6kl/wmi.h b/drivers/net/wireless/ath/ath6kl/wmi.h index 1d458f05ace0..df42e4be876a 100644 --- a/drivers/net/wireless/ath/ath6kl/wmi.h +++ b/drivers/net/wireless/ath/ath6kl/wmi.h | |||
@@ -1818,6 +1818,18 @@ struct wmi_set_ip_cmd { | |||
1818 | __le32 ips[MAX_IP_ADDRS]; | 1818 | __le32 ips[MAX_IP_ADDRS]; |
1819 | } __packed; | 1819 | } __packed; |
1820 | 1820 | ||
1821 | struct wmi_add_wow_pattern_cmd { | ||
1822 | u8 filter_list_id; | ||
1823 | u8 filter_size; | ||
1824 | u8 filter_offset; | ||
1825 | u8 filter[0]; | ||
1826 | } __packed; | ||
1827 | |||
1828 | struct wmi_del_wow_pattern_cmd { | ||
1829 | __le16 filter_list_id; | ||
1830 | __le16 filter_id; | ||
1831 | } __packed; | ||
1832 | |||
1821 | /* WMI_GET_WOW_LIST_CMD reply */ | 1833 | /* WMI_GET_WOW_LIST_CMD reply */ |
1822 | struct wmi_get_wow_list_reply { | 1834 | struct wmi_get_wow_list_reply { |
1823 | /* number of patterns in reply */ | 1835 | /* number of patterns in reply */ |
@@ -2273,6 +2285,11 @@ int ath6kl_wmi_test_cmd(struct wmi *wmi, void *buf, size_t len); | |||
2273 | s32 ath6kl_wmi_get_rate(s8 rate_index); | 2285 | s32 ath6kl_wmi_get_rate(s8 rate_index); |
2274 | 2286 | ||
2275 | int ath6kl_wmi_set_ip_cmd(struct wmi *wmi, struct wmi_set_ip_cmd *ip_cmd); | 2287 | int ath6kl_wmi_set_ip_cmd(struct wmi *wmi, struct wmi_set_ip_cmd *ip_cmd); |
2288 | int ath6kl_wmi_add_wow_pattern_cmd(struct wmi *wmi, u8 if_idx, | ||
2289 | u8 list_id, u8 filter_size, | ||
2290 | u8 filter_offset, u8 *filter, u8 *mask); | ||
2291 | int ath6kl_wmi_del_wow_pattern_cmd(struct wmi *wmi, u8 if_idx, | ||
2292 | u16 list_id, u16 filter_id); | ||
2276 | int ath6kl_wmi_set_roam_lrssi_cmd(struct wmi *wmi, u8 lrssi); | 2293 | int ath6kl_wmi_set_roam_lrssi_cmd(struct wmi *wmi, u8 lrssi); |
2277 | int ath6kl_wmi_force_roam_cmd(struct wmi *wmi, const u8 *bssid); | 2294 | int ath6kl_wmi_force_roam_cmd(struct wmi *wmi, const u8 *bssid); |
2278 | int ath6kl_wmi_set_roam_mode_cmd(struct wmi *wmi, enum wmi_roam_mode mode); | 2295 | int ath6kl_wmi_set_roam_mode_cmd(struct wmi *wmi, enum wmi_roam_mode mode); |