aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorRaja Mani <rmani@qca.qualcomm.com>2011-11-07 15:52:45 -0500
committerKalle Valo <kvalo@qca.qualcomm.com>2011-11-11 05:59:59 -0500
commit5c9b4fa19a488de48f1cc2268a7b7b247723568a (patch)
tree89b7eb7fbc6cc73e4ab71b567aebf3cd0675cbb4 /drivers
parentf3e61eceb20a993ea2b375e82503ab8a1efa31d9 (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.c56
-rw-r--r--drivers/net/wireless/ath/ath6kl/wmi.h17
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
2415int 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
2451int 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
2415static int ath6kl_wmi_get_wow_list_event_rx(struct wmi *wmi, u8 * datap, 2471static 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
1821struct 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
1828struct 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 */
1822struct wmi_get_wow_list_reply { 1834struct 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);
2273s32 ath6kl_wmi_get_rate(s8 rate_index); 2285s32 ath6kl_wmi_get_rate(s8 rate_index);
2274 2286
2275int ath6kl_wmi_set_ip_cmd(struct wmi *wmi, struct wmi_set_ip_cmd *ip_cmd); 2287int ath6kl_wmi_set_ip_cmd(struct wmi *wmi, struct wmi_set_ip_cmd *ip_cmd);
2288int 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);
2291int ath6kl_wmi_del_wow_pattern_cmd(struct wmi *wmi, u8 if_idx,
2292 u16 list_id, u16 filter_id);
2276int ath6kl_wmi_set_roam_lrssi_cmd(struct wmi *wmi, u8 lrssi); 2293int ath6kl_wmi_set_roam_lrssi_cmd(struct wmi *wmi, u8 lrssi);
2277int ath6kl_wmi_force_roam_cmd(struct wmi *wmi, const u8 *bssid); 2294int ath6kl_wmi_force_roam_cmd(struct wmi *wmi, const u8 *bssid);
2278int ath6kl_wmi_set_roam_mode_cmd(struct wmi *wmi, enum wmi_roam_mode mode); 2295int ath6kl_wmi_set_roam_mode_cmd(struct wmi *wmi, enum wmi_roam_mode mode);