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>
This commit is contained in:
committed by
John W. Linville
parent
8b3408f8ee
commit
560124095f
@@ -2028,6 +2028,7 @@ static int iwlagn_mac_suspend(struct ieee80211_hw *hw,
|
|||||||
.tkip = &tkip_cmd,
|
.tkip = &tkip_cmd,
|
||||||
.use_tkip = false,
|
.use_tkip = false,
|
||||||
};
|
};
|
||||||
|
struct iwlagn_d3_config_cmd d3_cfg_cmd = {};
|
||||||
int ret, i;
|
int ret, i;
|
||||||
u16 seq;
|
u16 seq;
|
||||||
|
|
||||||
@@ -2085,13 +2086,14 @@ static int iwlagn_mac_suspend(struct ieee80211_hw *hw,
|
|||||||
if (wowlan->four_way_handshake)
|
if (wowlan->four_way_handshake)
|
||||||
wakeup_filter_cmd.enabled |=
|
wakeup_filter_cmd.enabled |=
|
||||||
cpu_to_le32(IWLAGN_WOWLAN_WAKEUP_4WAY_HANDSHAKE);
|
cpu_to_le32(IWLAGN_WOWLAN_WAKEUP_4WAY_HANDSHAKE);
|
||||||
if (wowlan->rfkill_release)
|
|
||||||
wakeup_filter_cmd.enabled |=
|
|
||||||
cpu_to_le32(IWLAGN_WOWLAN_WAKEUP_RFKILL);
|
|
||||||
if (wowlan->n_patterns)
|
if (wowlan->n_patterns)
|
||||||
wakeup_filter_cmd.enabled |=
|
wakeup_filter_cmd.enabled |=
|
||||||
cpu_to_le32(IWLAGN_WOWLAN_WAKEUP_PATTERN_MATCH);
|
cpu_to_le32(IWLAGN_WOWLAN_WAKEUP_PATTERN_MATCH);
|
||||||
|
|
||||||
|
if (wowlan->rfkill_release)
|
||||||
|
d3_cfg_cmd.wakeup_flags |=
|
||||||
|
cpu_to_le32(IWLAGN_D3_WAKEUP_RFKILL);
|
||||||
|
|
||||||
iwl_scan_cancel_timeout(priv, 200);
|
iwl_scan_cancel_timeout(priv, 200);
|
||||||
|
|
||||||
memcpy(&rxon, &ctx->active, sizeof(rxon));
|
memcpy(&rxon, &ctx->active, sizeof(rxon));
|
||||||
@@ -2179,6 +2181,11 @@ static int iwlagn_mac_suspend(struct ieee80211_hw *hw,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret = iwl_trans_send_cmd_pdu(trans(priv), REPLY_D3_CONFIG, CMD_SYNC,
|
||||||
|
sizeof(d3_cfg_cmd), &d3_cfg_cmd);
|
||||||
|
if (ret)
|
||||||
|
goto error;
|
||||||
|
|
||||||
ret = iwl_trans_send_cmd_pdu(trans(priv), REPLY_WOWLAN_WAKEUP_FILTER,
|
ret = iwl_trans_send_cmd_pdu(trans(priv), REPLY_WOWLAN_WAKEUP_FILTER,
|
||||||
CMD_SYNC, sizeof(wakeup_filter_cmd),
|
CMD_SYNC, sizeof(wakeup_filter_cmd),
|
||||||
&wakeup_filter_cmd);
|
&wakeup_filter_cmd);
|
||||||
|
@@ -198,6 +198,7 @@ enum {
|
|||||||
REPLY_WOWLAN_TKIP_PARAMS = 0xe3,
|
REPLY_WOWLAN_TKIP_PARAMS = 0xe3,
|
||||||
REPLY_WOWLAN_KEK_KCK_MATERIAL = 0xe4,
|
REPLY_WOWLAN_KEK_KCK_MATERIAL = 0xe4,
|
||||||
REPLY_WOWLAN_GET_STATUS = 0xe5,
|
REPLY_WOWLAN_GET_STATUS = 0xe5,
|
||||||
|
REPLY_D3_CONFIG = 0xd3,
|
||||||
|
|
||||||
REPLY_MAX = 0xff
|
REPLY_MAX = 0xff
|
||||||
};
|
};
|
||||||
@@ -3800,6 +3801,19 @@ struct iwl_bt_coex_prot_env_cmd {
|
|||||||
u8 reserved[2];
|
u8 reserved[2];
|
||||||
} __attribute__((packed));
|
} __attribute__((packed));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* REPLY_D3_CONFIG
|
||||||
|
*/
|
||||||
|
enum iwlagn_d3_wakeup_filters {
|
||||||
|
IWLAGN_D3_WAKEUP_RFKILL = BIT(0),
|
||||||
|
IWLAGN_D3_WAKEUP_SYSASSERT = BIT(1),
|
||||||
|
};
|
||||||
|
|
||||||
|
struct iwlagn_d3_config_cmd {
|
||||||
|
__le32 min_sleep_time;
|
||||||
|
__le32 wakeup_flags;
|
||||||
|
} __packed;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* REPLY_WOWLAN_PATTERNS
|
* REPLY_WOWLAN_PATTERNS
|
||||||
*/
|
*/
|
||||||
@@ -3830,19 +3844,16 @@ enum iwlagn_wowlan_wakeup_filters {
|
|||||||
IWLAGN_WOWLAN_WAKEUP_BEACON_MISS = BIT(2),
|
IWLAGN_WOWLAN_WAKEUP_BEACON_MISS = BIT(2),
|
||||||
IWLAGN_WOWLAN_WAKEUP_LINK_CHANGE = BIT(3),
|
IWLAGN_WOWLAN_WAKEUP_LINK_CHANGE = BIT(3),
|
||||||
IWLAGN_WOWLAN_WAKEUP_GTK_REKEY_FAIL = BIT(4),
|
IWLAGN_WOWLAN_WAKEUP_GTK_REKEY_FAIL = BIT(4),
|
||||||
IWLAGN_WOWLAN_WAKEUP_RFKILL = BIT(5),
|
IWLAGN_WOWLAN_WAKEUP_EAP_IDENT_REQ = BIT(5),
|
||||||
IWLAGN_WOWLAN_WAKEUP_UCODE_ERROR = BIT(6),
|
IWLAGN_WOWLAN_WAKEUP_4WAY_HANDSHAKE = BIT(6),
|
||||||
IWLAGN_WOWLAN_WAKEUP_EAP_IDENT_REQ = BIT(7),
|
IWLAGN_WOWLAN_WAKEUP_ALWAYS = BIT(7),
|
||||||
IWLAGN_WOWLAN_WAKEUP_4WAY_HANDSHAKE = BIT(8),
|
IWLAGN_WOWLAN_WAKEUP_ENABLE_NET_DETECT = BIT(8),
|
||||||
IWLAGN_WOWLAN_WAKEUP_ALWAYS = BIT(9),
|
|
||||||
IWLAGN_WOWLAN_WAKEUP_ENABLE_NET_DETECT = BIT(10),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct iwlagn_wowlan_wakeup_filter_cmd {
|
struct iwlagn_wowlan_wakeup_filter_cmd {
|
||||||
__le32 enabled;
|
__le32 enabled;
|
||||||
__le16 non_qos_seq;
|
__le16 non_qos_seq;
|
||||||
u8 min_sleep_seconds;
|
__le16 reserved;
|
||||||
u8 reserved;
|
|
||||||
__le16 qos_seq[8];
|
__le16 qos_seq[8];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user