Skip to content

Commit

Permalink
iwlagn: update wowlan API
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Johannes Berg authored and John W. Linville committed Nov 8, 2011
1 parent 8b3408f commit 5601240
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 11 deletions.
13 changes: 10 additions & 3 deletions drivers/net/wireless/iwlwifi/iwl-agn.c
Original file line number Diff line number Diff line change
Expand Up @@ -2028,6 +2028,7 @@ static int iwlagn_mac_suspend(struct ieee80211_hw *hw,
.tkip = &tkip_cmd,
.use_tkip = false,
};
struct iwlagn_d3_config_cmd d3_cfg_cmd = {};
int ret, i;
u16 seq;

Expand Down Expand Up @@ -2085,13 +2086,14 @@ static int iwlagn_mac_suspend(struct ieee80211_hw *hw,
if (wowlan->four_way_handshake)
wakeup_filter_cmd.enabled |=
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)
wakeup_filter_cmd.enabled |=
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);

memcpy(&rxon, &ctx->active, sizeof(rxon));
Expand Down Expand Up @@ -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,
CMD_SYNC, sizeof(wakeup_filter_cmd),
&wakeup_filter_cmd);
Expand Down
27 changes: 19 additions & 8 deletions drivers/net/wireless/iwlwifi/iwl-commands.h
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,7 @@ enum {
REPLY_WOWLAN_TKIP_PARAMS = 0xe3,
REPLY_WOWLAN_KEK_KCK_MATERIAL = 0xe4,
REPLY_WOWLAN_GET_STATUS = 0xe5,
REPLY_D3_CONFIG = 0xd3,

REPLY_MAX = 0xff
};
Expand Down Expand Up @@ -3800,6 +3801,19 @@ struct iwl_bt_coex_prot_env_cmd {
u8 reserved[2];
} __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
*/
Expand Down Expand Up @@ -3830,19 +3844,16 @@ enum iwlagn_wowlan_wakeup_filters {
IWLAGN_WOWLAN_WAKEUP_BEACON_MISS = BIT(2),
IWLAGN_WOWLAN_WAKEUP_LINK_CHANGE = BIT(3),
IWLAGN_WOWLAN_WAKEUP_GTK_REKEY_FAIL = BIT(4),
IWLAGN_WOWLAN_WAKEUP_RFKILL = BIT(5),
IWLAGN_WOWLAN_WAKEUP_UCODE_ERROR = BIT(6),
IWLAGN_WOWLAN_WAKEUP_EAP_IDENT_REQ = BIT(7),
IWLAGN_WOWLAN_WAKEUP_4WAY_HANDSHAKE = BIT(8),
IWLAGN_WOWLAN_WAKEUP_ALWAYS = BIT(9),
IWLAGN_WOWLAN_WAKEUP_ENABLE_NET_DETECT = BIT(10),
IWLAGN_WOWLAN_WAKEUP_EAP_IDENT_REQ = BIT(5),
IWLAGN_WOWLAN_WAKEUP_4WAY_HANDSHAKE = BIT(6),
IWLAGN_WOWLAN_WAKEUP_ALWAYS = BIT(7),
IWLAGN_WOWLAN_WAKEUP_ENABLE_NET_DETECT = BIT(8),
};

struct iwlagn_wowlan_wakeup_filter_cmd {
__le32 enabled;
__le16 non_qos_seq;
u8 min_sleep_seconds;
u8 reserved;
__le16 reserved;
__le16 qos_seq[8];
};

Expand Down

0 comments on commit 5601240

Please sign in to comment.