aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2011-10-14 15:54:43 -0400
committerJohn W. Linville <linville@tuxdriver.com>2011-11-08 15:53:53 -0500
commit560124095f467c9920c25fa215ab1397dc37d0d6 (patch)
treea9581b4c69752611ffdf864f7aa9ffaae9821c3e /drivers
parent8b3408f8ee994973869d8ba32c5bf482bc4ddca4 (diff)
iwlagn: update wowlan API
The WoWLAN API changed due to netdetect and we now have a more generic "D3 configuration" command that enables the sysassert & rfkill wakeup triggers. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn.c13
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-commands.h27
2 files changed, 29 insertions, 11 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
index ccba69b7f8a7..47dbcca56431 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
@@ -2028,6 +2028,7 @@ static int iwlagn_mac_suspend(struct ieee80211_hw *hw,
2028 .tkip = &tkip_cmd, 2028 .tkip = &tkip_cmd,
2029 .use_tkip = false, 2029 .use_tkip = false,
2030 }; 2030 };
2031 struct iwlagn_d3_config_cmd d3_cfg_cmd = {};
2031 int ret, i; 2032 int ret, i;
2032 u16 seq; 2033 u16 seq;
2033 2034
@@ -2085,13 +2086,14 @@ static int iwlagn_mac_suspend(struct ieee80211_hw *hw,
2085 if (wowlan->four_way_handshake) 2086 if (wowlan->four_way_handshake)
2086 wakeup_filter_cmd.enabled |= 2087 wakeup_filter_cmd.enabled |=
2087 cpu_to_le32(IWLAGN_WOWLAN_WAKEUP_4WAY_HANDSHAKE); 2088 cpu_to_le32(IWLAGN_WOWLAN_WAKEUP_4WAY_HANDSHAKE);
2088 if (wowlan->rfkill_release)
2089 wakeup_filter_cmd.enabled |=
2090 cpu_to_le32(IWLAGN_WOWLAN_WAKEUP_RFKILL);
2091 if (wowlan->n_patterns) 2089 if (wowlan->n_patterns)
2092 wakeup_filter_cmd.enabled |= 2090 wakeup_filter_cmd.enabled |=
2093 cpu_to_le32(IWLAGN_WOWLAN_WAKEUP_PATTERN_MATCH); 2091 cpu_to_le32(IWLAGN_WOWLAN_WAKEUP_PATTERN_MATCH);
2094 2092
2093 if (wowlan->rfkill_release)
2094 d3_cfg_cmd.wakeup_flags |=
2095 cpu_to_le32(IWLAGN_D3_WAKEUP_RFKILL);
2096
2095 iwl_scan_cancel_timeout(priv, 200); 2097 iwl_scan_cancel_timeout(priv, 200);
2096 2098
2097 memcpy(&rxon, &ctx->active, sizeof(rxon)); 2099 memcpy(&rxon, &ctx->active, sizeof(rxon));
@@ -2179,6 +2181,11 @@ static int iwlagn_mac_suspend(struct ieee80211_hw *hw,
2179 } 2181 }
2180 } 2182 }
2181 2183
2184 ret = iwl_trans_send_cmd_pdu(trans(priv), REPLY_D3_CONFIG, CMD_SYNC,
2185 sizeof(d3_cfg_cmd), &d3_cfg_cmd);
2186 if (ret)
2187 goto error;
2188
2182 ret = iwl_trans_send_cmd_pdu(trans(priv), REPLY_WOWLAN_WAKEUP_FILTER, 2189 ret = iwl_trans_send_cmd_pdu(trans(priv), REPLY_WOWLAN_WAKEUP_FILTER,
2183 CMD_SYNC, sizeof(wakeup_filter_cmd), 2190 CMD_SYNC, sizeof(wakeup_filter_cmd),
2184 &wakeup_filter_cmd); 2191 &wakeup_filter_cmd);
diff --git a/drivers/net/wireless/iwlwifi/iwl-commands.h b/drivers/net/wireless/iwlwifi/iwl-commands.h
index 69d5f85d11e2..f4eccf583775 100644
--- a/drivers/net/wireless/iwlwifi/iwl-commands.h
+++ b/drivers/net/wireless/iwlwifi/iwl-commands.h
@@ -198,6 +198,7 @@ enum {
198 REPLY_WOWLAN_TKIP_PARAMS = 0xe3, 198 REPLY_WOWLAN_TKIP_PARAMS = 0xe3,
199 REPLY_WOWLAN_KEK_KCK_MATERIAL = 0xe4, 199 REPLY_WOWLAN_KEK_KCK_MATERIAL = 0xe4,
200 REPLY_WOWLAN_GET_STATUS = 0xe5, 200 REPLY_WOWLAN_GET_STATUS = 0xe5,
201 REPLY_D3_CONFIG = 0xd3,
201 202
202 REPLY_MAX = 0xff 203 REPLY_MAX = 0xff
203}; 204};
@@ -3801,6 +3802,19 @@ struct iwl_bt_coex_prot_env_cmd {
3801} __attribute__((packed)); 3802} __attribute__((packed));
3802 3803
3803/* 3804/*
3805 * REPLY_D3_CONFIG
3806 */
3807enum iwlagn_d3_wakeup_filters {
3808 IWLAGN_D3_WAKEUP_RFKILL = BIT(0),
3809 IWLAGN_D3_WAKEUP_SYSASSERT = BIT(1),
3810};
3811
3812struct iwlagn_d3_config_cmd {
3813 __le32 min_sleep_time;
3814 __le32 wakeup_flags;
3815} __packed;
3816
3817/*
3804 * REPLY_WOWLAN_PATTERNS 3818 * REPLY_WOWLAN_PATTERNS
3805 */ 3819 */
3806#define IWLAGN_WOWLAN_MIN_PATTERN_LEN 16 3820#define IWLAGN_WOWLAN_MIN_PATTERN_LEN 16
@@ -3830,19 +3844,16 @@ enum iwlagn_wowlan_wakeup_filters {
3830 IWLAGN_WOWLAN_WAKEUP_BEACON_MISS = BIT(2), 3844 IWLAGN_WOWLAN_WAKEUP_BEACON_MISS = BIT(2),
3831 IWLAGN_WOWLAN_WAKEUP_LINK_CHANGE = BIT(3), 3845 IWLAGN_WOWLAN_WAKEUP_LINK_CHANGE = BIT(3),
3832 IWLAGN_WOWLAN_WAKEUP_GTK_REKEY_FAIL = BIT(4), 3846 IWLAGN_WOWLAN_WAKEUP_GTK_REKEY_FAIL = BIT(4),
3833 IWLAGN_WOWLAN_WAKEUP_RFKILL = BIT(5), 3847 IWLAGN_WOWLAN_WAKEUP_EAP_IDENT_REQ = BIT(5),
3834 IWLAGN_WOWLAN_WAKEUP_UCODE_ERROR = BIT(6), 3848 IWLAGN_WOWLAN_WAKEUP_4WAY_HANDSHAKE = BIT(6),
3835 IWLAGN_WOWLAN_WAKEUP_EAP_IDENT_REQ = BIT(7), 3849 IWLAGN_WOWLAN_WAKEUP_ALWAYS = BIT(7),
3836 IWLAGN_WOWLAN_WAKEUP_4WAY_HANDSHAKE = BIT(8), 3850 IWLAGN_WOWLAN_WAKEUP_ENABLE_NET_DETECT = BIT(8),
3837 IWLAGN_WOWLAN_WAKEUP_ALWAYS = BIT(9),
3838 IWLAGN_WOWLAN_WAKEUP_ENABLE_NET_DETECT = BIT(10),
3839}; 3851};
3840 3852
3841struct iwlagn_wowlan_wakeup_filter_cmd { 3853struct iwlagn_wowlan_wakeup_filter_cmd {
3842 __le32 enabled; 3854 __le32 enabled;
3843 __le16 non_qos_seq; 3855 __le16 non_qos_seq;
3844 u8 min_sleep_seconds; 3856 __le16 reserved;
3845 u8 reserved;
3846 __le16 qos_seq[8]; 3857 __le16 qos_seq[8];
3847}; 3858};
3848 3859