1 /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ 2 /* 3 * Copyright (C) 2024 Intel Corporation 4 */ 5 #ifndef __iwl_mld_d3_h__ 6 #define __iwl_mld_d3_h__ 7 8 #include "fw/api/d3.h" 9 10 struct iwl_mld_rekey_data { 11 bool valid; 12 u8 kck[NL80211_KCK_EXT_LEN]; 13 u8 kek[NL80211_KEK_EXT_LEN]; 14 size_t kck_len; 15 size_t kek_len; 16 __le64 replay_ctr; 17 u32 akm; 18 }; 19 20 /** 21 * struct iwl_mld_wowlan_data - data used by the wowlan suspend flow 22 * 23 * @target_ipv6_addrs: IPv6 addresses on this interface for offload 24 * @tentative_addrs: bitmap of tentative IPv6 addresses in @target_ipv6_addrs 25 * @num_target_ipv6_addrs: number of @target_ipv6_addrs 26 * @rekey_data: security key data used for rekeying during D3 27 */ 28 struct iwl_mld_wowlan_data { 29 #if IS_ENABLED(CONFIG_IPV6) 30 struct in6_addr target_ipv6_addrs[IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_MAX]; 31 unsigned long tentative_addrs[BITS_TO_LONGS(IWL_PROTO_OFFLOAD_NUM_IPV6_ADDRS_MAX)]; 32 int num_target_ipv6_addrs; 33 #endif 34 struct iwl_mld_rekey_data rekey_data; 35 }; 36 37 int iwl_mld_no_wowlan_resume(struct iwl_mld *mld); 38 int iwl_mld_no_wowlan_suspend(struct iwl_mld *mld); 39 int iwl_mld_wowlan_suspend(struct iwl_mld *mld, 40 struct cfg80211_wowlan *wowlan); 41 int iwl_mld_wowlan_resume(struct iwl_mld *mld); 42 void iwl_mld_set_rekey_data(struct ieee80211_hw *hw, 43 struct ieee80211_vif *vif, 44 struct cfg80211_gtk_rekey_data *data); 45 #if IS_ENABLED(CONFIG_IPV6) 46 void iwl_mld_ipv6_addr_change(struct ieee80211_hw *hw, 47 struct ieee80211_vif *vif, 48 struct inet6_dev *idev); 49 #endif 50 51 #endif /* __iwl_mld_d3_h__ */ 52