/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ /* * Copyright (C) 2024 Intel Corporation */ #ifndef __iwl_mld_d3_h__ #define __iwl_mld_d3_h__ #include "fw/api/d3.h" struct iwl_mld_rekey_data { bool valid; u8 kck[NL80211_KCK_EXT_LEN]; u8 kek[NL80211_KEK_EXT_LEN]; size_t kck_len; size_t kek_len; __le64 replay_ctr; u32 akm; }; /** * struct iwl_mld_wowlan_data - data used by the wowlan suspend flow * * @target_ipv6_addrs: IPv6 addresses on this interface for offload * @tentative_addrs: bitmap of tentative IPv6 addresses in @target_ipv6_addrs * @num_target_ipv6_addrs: number of @target_ipv6_addrs * @rekey_data: security key data used for rekeying during D3 */ struct iwl_mld_wowlan_data { #if IS_ENABLED(CONFIG_IPV6) struct in6_addr target_ipv6_addrs[IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_MAX]; unsigned long tentative_addrs[BITS_TO_LONGS(IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_MAX)]; int num_target_ipv6_addrs; #endif struct iwl_mld_rekey_data rekey_data; }; int iwl_mld_no_wowlan_resume(struct iwl_mld *mld); int iwl_mld_no_wowlan_suspend(struct iwl_mld *mld); int iwl_mld_wowlan_suspend(struct iwl_mld *mld, struct cfg80211_wowlan *wowlan); int iwl_mld_wowlan_resume(struct iwl_mld *mld); void iwl_mld_set_rekey_data(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct cfg80211_gtk_rekey_data *data); #if IS_ENABLED(CONFIG_IPV6) void iwl_mld_ipv6_addr_change(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct inet6_dev *idev); #endif #endif /* __iwl_mld_d3_h__ */