1a5487a68SSean Wang /* SPDX-License-Identifier: BSD-3-Clause-Clear */ 2a5487a68SSean Wang /* Copyright (C) 2025-2026 MediaTek Inc. */ 3a5487a68SSean Wang 4a5487a68SSean Wang #ifndef __MT7925_NAN_H 5a5487a68SSean Wang #define __MT7925_NAN_H 6a5487a68SSean Wang 7a5487a68SSean Wang #include <linux/if_ether.h> 8a5487a68SSean Wang #include <linux/types.h> 9a5487a68SSean Wang 10a5487a68SSean Wang #include "../mt76_connac_mcu.h" 11a5487a68SSean Wang 12a5487a68SSean Wang #define NAN_MAX_SOCIAL_CHANNELS 3 13a5487a68SSean Wang #define NAN_ANCHOR_MASTER_RANK_NUM 8 14a5487a68SSean Wang #define NAN_5G_LOW_DISC_CHANNEL 44 15a5487a68SSean Wang #define NAN_5G_HIGH_DISC_CHANNEL 149 16a5487a68SSean Wang #define NAN_MAX_MASTER_PREFERENCE 255 17a5487a68SSean Wang #define NAN_DEFAULT_DW_INTERVAL 1 18a5487a68SSean Wang #define NAN_DEFAULT_DISC_BCN_INTERVAL 100 19a5487a68SSean Wang #define NAN_TOTAL_DW 16 20a5487a68SSean Wang #define NAN_SUPPORTED_2G_FAW_CH_NUM 4 21a5487a68SSean Wang #define NAN_SUPPORTED_5G_FAW_CH_NUM 4 22a5487a68SSean Wang #define NAN_TIMELINE_MGMT_SIZE 2 23a5487a68SSean Wang #define NAN_TIMELINE_MGMT_CHNL_LIST_NUM \ 24a5487a68SSean Wang ((NAN_SUPPORTED_2G_FAW_CH_NUM + \ 25a5487a68SSean Wang NAN_SUPPORTED_5G_FAW_CH_NUM) / NAN_TIMELINE_MGMT_SIZE) 26a5487a68SSean Wang #define NAN_NUM_AVAIL_DB 2 27a5487a68SSean Wang #define NAN_NDC_ATTRIBUTE_ID_LENGTH 6 28a5487a68SSean Wang #define NAN_MAX_CONN_CFG 8 29a5487a68SSean Wang #define NAN_MAX_NDP_CXT 4 30a5487a68SSean Wang 31a5487a68SSean Wang #define MT7925_NAN_CONF_MAX_SIZE \ 32a5487a68SSean Wang (sizeof(struct mt7925_nan_common_hdr) + \ 33a5487a68SSean Wang sizeof(struct mt7925_nan_master_preference_tlv) + \ 34a5487a68SSean Wang sizeof(struct mt7925_nan_dw_interval_tlv) + \ 35a5487a68SSean Wang sizeof(struct mt7925_nan_cluster_id_tlv) + \ 36a5487a68SSean Wang sizeof(struct mt7925_nan_sync_rssi_tlv)) 37a5487a68SSean Wang 38a5487a68SSean Wang #define MT7925_NAN_AVAIL_MAX_SIZE \ 39a5487a68SSean Wang (sizeof(struct mt7925_nan_common_hdr) + \ 40a5487a68SSean Wang sizeof(struct mt7925_nan_avail_ctrl_tlv) + \ 41a5487a68SSean Wang sizeof(struct mt7925_nan_avail_entry_tlv)) 42a5487a68SSean Wang 43a5487a68SSean Wang #define MT7925_NAN_PEER_MAX_SIZE \ 44a5487a68SSean Wang (sizeof(struct mt7925_nan_common_hdr) + \ 45a5487a68SSean Wang sizeof(struct mt7925_nan_sched_manage_peer_rec_tlv) + \ 46a5487a68SSean Wang sizeof(struct mt7925_nan_sched_update_peer_cap_tlv) + \ 47a5487a68SSean Wang sizeof(struct mt7925_nan_sched_update_crb_tlv)) 48a5487a68SSean Wang 49a5487a68SSean Wang /* NAN Availability Attribute */ 50a5487a68SSean Wang #define NAN_AVAIL_ATTR_ID_OFFSET 0 51a5487a68SSean Wang #define NAN_AVAIL_ATTR_LEN_OFFSET 1 52a5487a68SSean Wang #define NAN_AVAIL_SEQ_ID_OFFSET 3 53a5487a68SSean Wang #define NAN_AVAIL_ATTR_CTRL_OFFSET 4 54a5487a68SSean Wang 55a5487a68SSean Wang /* NAN Availability Attribute - Attribute Control Field */ 56a5487a68SSean Wang #define NAN_AVAIL_CTRL_MAPID GENMASK(3, 0) 57a5487a68SSean Wang #define NAN_AVAIL_CTRL_COMMIT_CHANGED BIT(4) 58a5487a68SSean Wang #define NAN_AVAIL_CTRL_POTN_CHANGED BIT(5) 59a5487a68SSean Wang #define NAN_AVAIL_CTRL_PUBLIC_AVAIL_CHANGED BIT(6) 60a5487a68SSean Wang #define NAN_AVAIL_CTRL_NDC_CHANGED BIT(7) 61a5487a68SSean Wang #define NAN_AVAIL_CTRL_CHECK_FOR_CHANGED GENMASK(7, 4) 62a5487a68SSean Wang 63a5487a68SSean Wang #define UNII1_LOWER_BOUND 36 64a5487a68SSean Wang #define UNII1_UPPER_BOUND 50 65a5487a68SSean Wang #define UNII3_LOWER_BOUND 149 66a5487a68SSean Wang #define UNII3_UPPER_BOUND 165 67a5487a68SSean Wang 68a5487a68SSean Wang enum nan_uni_cmd_tag { 69a5487a68SSean Wang NAN_UNI_CMD_SET_MASTER_PREFERENCE = 0, 70a5487a68SSean Wang NAN_UNI_CMD_ENABLE_REQUEST = 7, 71a5487a68SSean Wang NAN_UNI_CMD_DISABLE_REQUEST = 8, 72a5487a68SSean Wang NAN_UNI_CMD_UPDATE_AVAILABILITY = 9, 73a5487a68SSean Wang NAN_UNI_CMD_UPDATE_CRB = 10, 74a5487a68SSean Wang NAN_UNI_CMD_MANAGE_PEER_SCH_RECORD = 12, 75a5487a68SSean Wang NAN_UNI_CMD_MAP_STA_RECORD = 13, 76a5487a68SSean Wang NAN_UNI_CMD_UPDATE_AVAILABILITY_CTRL = 20, 77a5487a68SSean Wang NAN_UNI_CMD_UPDATE_PEER_CAPABILITY = 21, 78a5487a68SSean Wang NAN_UNI_CMD_CHANGE_NMI_ADDRESS = 24, 79a5487a68SSean Wang NAN_UNI_CMD_SET_DW_INTERVAL = 26, 80a5487a68SSean Wang NAN_UNI_CMD_SET_SYNC_RSSI = 39, 81a5487a68SSean Wang NAN_UNI_CMD_SET_CLUSTER_ID = 40, 82a5487a68SSean Wang NAN_UNI_CMD_KEY_MANAGEMENT = 53, 83a5487a68SSean Wang }; 84a5487a68SSean Wang 85a5487a68SSean Wang enum nan_uni_event_tag { 86a5487a68SSean Wang NAN_UNI_EVENT_ID_DE_EVENT_IND = 19, 87a5487a68SSean Wang NAN_UNI_EVENT_REPORT_DW_END = 60, 88a5487a68SSean Wang }; 89a5487a68SSean Wang 90a5487a68SSean Wang enum nan_disc_event_type { 91a5487a68SSean Wang NAN_EVENT_ID_DISC_MAC_ADDR = 0, 92a5487a68SSean Wang NAN_EVENT_ID_JOINED_CLUSTER = 2, 93a5487a68SSean Wang }; 94a5487a68SSean Wang 95a5487a68SSean Wang /* NAN 4.0 Table 79. Device Capability attribute format, Supported Bands */ 96a5487a68SSean Wang enum nan_supported_bands { 97a5487a68SSean Wang NAN_SUPPORTED_BAND_ID_2P4G = 2, 98a5487a68SSean Wang NAN_SUPPORTED_BAND_ID_5G = 4, 99a5487a68SSean Wang NAN_PROPRIETARY_BAND_ID_6G = 6, 100a5487a68SSean Wang NAN_SUPPORTED_BAND_ID_6G = 7, 101a5487a68SSean Wang }; 102a5487a68SSean Wang 103a5487a68SSean Wang enum nan_peer_supported_bands { 104a5487a68SSean Wang NAN_SUPPORTED_BN_2G = 0, 105a5487a68SSean Wang NAN_SUPPORTED_BN_5G_LOW, 106a5487a68SSean Wang NAN_SUPPORTED_BN_5G_HIGH, 107a5487a68SSean Wang NAN_SUPPORTED_BN_6G, 108a5487a68SSean Wang NAN_SUPPORTED_BN_NUM 109a5487a68SSean Wang }; 110a5487a68SSean Wang 111a5487a68SSean Wang #define NAN_CH_CTRL_OP_CLASS GENMASK(15, 8) 112a5487a68SSean Wang #define NAN_CH_CTRL_PRIMARY_CH GENMASK(23, 16) 113a5487a68SSean Wang 114a5487a68SSean Wang #define NAN_CRB_USE_DATA_PATH BIT(0) 115a5487a68SSean Wang #define NAN_CRB_AVAIL_6G_FORMAT GENMASK(2, 1) 116a5487a68SSean Wang 117a5487a68SSean Wang struct mt7925_nan_social_ch_scan_params { 118a5487a68SSean Wang u8 dwell_time[NAN_MAX_SOCIAL_CHANNELS]; 119a5487a68SSean Wang __le16 scan_period[NAN_MAX_SOCIAL_CHANNELS]; 120a5487a68SSean Wang } __packed; 121a5487a68SSean Wang 122a5487a68SSean Wang /* Firmware-reported NAN device information */ 123a5487a68SSean Wang struct nan_dev_info_evt { 124a5487a68SSean Wang u8 is_enabled; 125a5487a68SSean Wang u8 my_addr[ETH_ALEN]; 126a5487a68SSean Wang u8 en_fw_election; 127a5487a68SSean Wang __le32 nan_dev_role; 128a5487a68SSean Wang __le32 nan_dev_state; 129a5487a68SSean Wang u8 mst_preference; 130a5487a68SSean Wang u8 random_factor; 131a5487a68SSean Wang u8 cnt_hop; 132a5487a68SSean Wang u8 cluster_id[ETH_ALEN]; 133a5487a68SSean Wang u8 anchor_mst_addr[ETH_ALEN]; 134a5487a68SSean Wang u8 am_preference; 135a5487a68SSean Wang u8 am_random_factor; 136a5487a68SSean Wang u8 parent_mac[ETH_ALEN]; 137a5487a68SSean Wang u8 parent_am_preference; 138a5487a68SSean Wang u8 parent_am_factor; 139a5487a68SSean Wang __le32 ambtt; 140a5487a68SSean Wang __le32 tsf[2]; 141a5487a68SSean Wang u8 pn_igtk[6]; 142a5487a68SSean Wang u8 pn_bigtk[6]; 143a5487a68SSean Wang }; 144a5487a68SSean Wang 145a5487a68SSean Wang /* Firmware NAN discovery window event */ 146a5487a68SSean Wang struct nan_rpt_dw_evt { 147a5487a68SSean Wang struct nan_dev_info_evt device_info; 148a5487a68SSean Wang __le32 expected_tsf_h; 149a5487a68SSean Wang __le32 expected_tsf_l; 150a5487a68SSean Wang __le32 actual_tsf_h; 151a5487a68SSean Wang __le32 actual_tsf_l; 152a5487a68SSean Wang __le16 channel; 153a5487a68SSean Wang __le16 dw_num; 154a5487a68SSean Wang }; 155a5487a68SSean Wang 156a5487a68SSean Wang struct mt7925_nan_conf_dw { 157a5487a68SSean Wang u8 config_2dot4g_dw_band; 158a5487a68SSean Wang __le32 dw_2dot4g_interval_val; 159a5487a68SSean Wang 160a5487a68SSean Wang u8 config_5g_dw_band; 161a5487a68SSean Wang __le32 dw_5g_interval_val; 162a5487a68SSean Wang } __packed; 163a5487a68SSean Wang 164a5487a68SSean Wang struct mt7925_nan_enable_req_tlv { 165a5487a68SSean Wang __le16 tag; 166a5487a68SSean Wang __le16 len; 167a5487a68SSean Wang 168a5487a68SSean Wang u8 master_pref; 169a5487a68SSean Wang __le16 cluster_low; 170a5487a68SSean Wang __le16 cluster_high; 171a5487a68SSean Wang 172a5487a68SSean Wang u8 config_support_5g; 173a5487a68SSean Wang u8 support_5g_val; 174a5487a68SSean Wang 175a5487a68SSean Wang u8 config_sid_beacon; 176a5487a68SSean Wang u8 sid_beacon_val; 177a5487a68SSean Wang 178a5487a68SSean Wang u8 config_2dot4g_rssi_close; 179a5487a68SSean Wang u8 rssi_close_2dot4g_val; 180a5487a68SSean Wang u8 config_2dot4g_rssi_middle; 181a5487a68SSean Wang u8 rssi_middle_2dot4g_val; 182a5487a68SSean Wang 183a5487a68SSean Wang u8 config_2dot4g_rssi_proximity; 184a5487a68SSean Wang u8 rssi_proximity_2dot4g_val; 185a5487a68SSean Wang u8 config_hop_count_limit; 186a5487a68SSean Wang u8 hop_count_limit_val; 187a5487a68SSean Wang 188a5487a68SSean Wang u8 config_2dot4g_support; 189a5487a68SSean Wang u8 support_2dot4g_val; 190a5487a68SSean Wang 191a5487a68SSean Wang u8 config_2dot4g_beacons; 192a5487a68SSean Wang u8 beacon_2dot4g_val; 193a5487a68SSean Wang 194a5487a68SSean Wang u8 config_2dot4g_sdf; 195a5487a68SSean Wang u8 sdf_2dot4g_val; 196a5487a68SSean Wang 197a5487a68SSean Wang u8 config_5g_beacons; 198a5487a68SSean Wang u8 beacon_5g_val; 199a5487a68SSean Wang 200a5487a68SSean Wang u8 config_5g_sdf; 201a5487a68SSean Wang u8 sdf_5g_val; 202a5487a68SSean Wang 203a5487a68SSean Wang u8 config_5g_rssi_close; 204a5487a68SSean Wang u8 rssi_close_5g_val; 205a5487a68SSean Wang 206a5487a68SSean Wang u8 config_5g_rssi_middle; 207a5487a68SSean Wang u8 rssi_middle_5g_val; 208a5487a68SSean Wang 209a5487a68SSean Wang u8 config_5g_rssi_close_proximity; 210a5487a68SSean Wang u8 rssi_close_proximity_5g_val; 211a5487a68SSean Wang 212a5487a68SSean Wang u8 config_rssi_window_size; 213a5487a68SSean Wang u8 rssi_window_size_val; 214a5487a68SSean Wang 215a5487a68SSean Wang u8 config_oui; 216a5487a68SSean Wang __le32 oui_val; 217a5487a68SSean Wang 218a5487a68SSean Wang u8 config_intf_addr; 219a5487a68SSean Wang u8 intf_addr_val[ETH_ALEN]; 220a5487a68SSean Wang 221a5487a68SSean Wang u8 config_cluster_attribute_val; 222a5487a68SSean Wang 223a5487a68SSean Wang u8 config_scan_params; 224a5487a68SSean Wang struct mt7925_nan_social_ch_scan_params scan_params_val; 225a5487a68SSean Wang 226a5487a68SSean Wang u8 config_random_factor_force; 227a5487a68SSean Wang u8 random_factor_force_val; 228a5487a68SSean Wang 229a5487a68SSean Wang u8 config_hop_count_force; 230a5487a68SSean Wang u8 hop_count_force_val; 231a5487a68SSean Wang 232a5487a68SSean Wang u8 config_24g_channel; 233a5487a68SSean Wang __le32 channel_24g_val; 234a5487a68SSean Wang 235a5487a68SSean Wang u8 config_5g_channel; 236a5487a68SSean Wang __le32 channel_5g_val; 237a5487a68SSean Wang 238a5487a68SSean Wang struct mt7925_nan_conf_dw config_dw; 239a5487a68SSean Wang 240a5487a68SSean Wang u8 config_disc_mac_addr_randomization; 241a5487a68SSean Wang __le32 disc_mac_addr_rand_interval_sec; 242a5487a68SSean Wang 243a5487a68SSean Wang u8 discovery_indication_cfg; 244a5487a68SSean Wang 245a5487a68SSean Wang u8 config_subscribe_sid_beacon; 246a5487a68SSean Wang __le32 subscribe_sid_beacon_val; 247a5487a68SSean Wang 248a5487a68SSean Wang u8 enable_log_slot_statistics; 249a5487a68SSean Wang } __packed __aligned(4); 250a5487a68SSean Wang 251a5487a68SSean Wang struct mt7925_nan_common_hdr { 252a5487a68SSean Wang u8 reserved[4]; 253a5487a68SSean Wang }; 254a5487a68SSean Wang 255a5487a68SSean Wang struct mt7925_nan_master_preference_tlv { 256a5487a68SSean Wang __le16 tag; 257a5487a68SSean Wang __le16 len; 258a5487a68SSean Wang u8 master_preference; 259a5487a68SSean Wang u8 reserved[3]; 260a5487a68SSean Wang } __packed __aligned(4); 261a5487a68SSean Wang 262a5487a68SSean Wang struct mt7925_nan_dw_interval_tlv { 263a5487a68SSean Wang __le16 tag; 264a5487a68SSean Wang __le16 len; 265a5487a68SSean Wang u8 dw_interval; 266a5487a68SSean Wang u8 vendor_ioctl; 267a5487a68SSean Wang __le16 disc_bcn_interval; 268a5487a68SSean Wang } __packed __aligned(4); 269a5487a68SSean Wang 270a5487a68SSean Wang struct mt7925_nan_cluster_id_tlv { 271a5487a68SSean Wang __le16 tag; 272a5487a68SSean Wang __le16 len; 273a5487a68SSean Wang u8 cluster_id[ETH_ALEN]; 274a5487a68SSean Wang u8 reserved[2]; 275a5487a68SSean Wang } __packed __aligned(4); 276a5487a68SSean Wang 277a5487a68SSean Wang struct mt7925_nan_sync_rssi_tlv { 278a5487a68SSean Wang __le16 tag; 279a5487a68SSean Wang __le16 len; 280a5487a68SSean Wang s8 rssi_close_2g; 281a5487a68SSean Wang s8 rssi_middle_2g; 282a5487a68SSean Wang s8 rssi_close_5g; 283a5487a68SSean Wang s8 rssi_middle_5g; 284a5487a68SSean Wang } __packed __aligned(4); 285a5487a68SSean Wang 286a5487a68SSean Wang struct mt7925_nan_de_event { 287a5487a68SSean Wang u8 event_type; 288a5487a68SSean Wang u8 cluster_id[ETH_ALEN]; 289a5487a68SSean Wang u8 anchor_master_rank[NAN_ANCHOR_MASTER_RANK_NUM]; 290a5487a68SSean Wang u8 own_nmi[ETH_ALEN]; 291a5487a68SSean Wang u8 master_nmi[ETH_ALEN]; 292a5487a68SSean Wang }; 293a5487a68SSean Wang 294a5487a68SSean Wang struct mt7925_nan_nmi_addr_tlv { 295a5487a68SSean Wang __le16 tag; 296a5487a68SSean Wang __le16 len; 297a5487a68SSean Wang u8 nmi_addr[ETH_ALEN]; 298a5487a68SSean Wang } __packed __aligned(4); 299a5487a68SSean Wang 300a5487a68SSean Wang struct mt7925_nan_avail_ctrl_tlv { 301a5487a68SSean Wang __le16 tag; 302a5487a68SSean Wang __le16 len; 303a5487a68SSean Wang __le16 avail_ctrl; 304a5487a68SSean Wang u8 seq_id; 305a5487a68SSean Wang u8 reserved[1]; 306a5487a68SSean Wang } __packed __aligned(4); 307a5487a68SSean Wang 308a5487a68SSean Wang struct mt7925_nan_ch_timeline { 309a5487a68SSean Wang u8 is_valid; 310a5487a68SSean Wang u8 reserved[3]; 311a5487a68SSean Wang 312a5487a68SSean Wang __le32 ch_info; 313a5487a68SSean Wang 314a5487a68SSean Wang __le32 num; 315a5487a68SSean Wang __le32 avail_map[NAN_TOTAL_DW]; 316a5487a68SSean Wang }; 317a5487a68SSean Wang 318a5487a68SSean Wang struct mt7925_nan_avail_entry_tlv { 319a5487a68SSean Wang __le16 tag; 320a5487a68SSean Wang __le16 len; 321a5487a68SSean Wang u8 map_id; 322a5487a68SSean Wang u8 is_cond_avail; 323a5487a68SSean Wang u8 timeline_idx; 324a5487a68SSean Wang u8 is_multi_map; 325a5487a68SSean Wang 326a5487a68SSean Wang struct mt7925_nan_ch_timeline ch_list[NAN_TIMELINE_MGMT_CHNL_LIST_NUM]; 327a5487a68SSean Wang } __packed __aligned(4); 328a5487a68SSean Wang 329a5487a68SSean Wang struct mt7925_nan_sched_manage_peer_rec_tlv { 330a5487a68SSean Wang __le16 tag; 331a5487a68SSean Wang __le16 len; 332a5487a68SSean Wang __le32 sch_idx; 333a5487a68SSean Wang u8 is_activate; 334a5487a68SSean Wang u8 nmi_addr[ETH_ALEN]; 335a5487a68SSean Wang u8 reserved[1]; 336a5487a68SSean Wang } __packed __aligned(4); 337a5487a68SSean Wang 338a5487a68SSean Wang struct mt7925_nan_sched_update_peer_cap_tlv { 339a5487a68SSean Wang __le16 tag; 340a5487a68SSean Wang __le16 len; 341a5487a68SSean Wang __le32 sch_idx; 342a5487a68SSean Wang u8 supported_bands; 343a5487a68SSean Wang __le16 max_chnl_switch_time; 344a5487a68SSean Wang u8 peer_supported_bands; 345a5487a68SSean Wang } __packed __aligned(4); 346a5487a68SSean Wang 347a5487a68SSean Wang struct mt7925_nan_sched_timeline { 348a5487a68SSean Wang u8 map_id; 349a5487a68SSean Wang u8 local_map_id; 350a5487a68SSean Wang u8 reserved[2]; 351a5487a68SSean Wang union { 352a5487a68SSean Wang __le32 avail_map[NAN_TOTAL_DW]; 353a5487a68SSean Wang u8 avail_block[NAN_TOTAL_DW * 4]; 354a5487a68SSean Wang }; 355a5487a68SSean Wang }; 356a5487a68SSean Wang 357a5487a68SSean Wang struct mt7925_nan_sched_faw_ndc_timeline { 358a5487a68SSean Wang __le32 avail_map[NAN_TOTAL_DW]; 359a5487a68SSean Wang }; 360a5487a68SSean Wang 361a5487a68SSean Wang struct mt7925_nan_sched_ndc_ctrl { 362a5487a68SSean Wang u8 is_valid; 363a5487a68SSean Wang u8 ndc_id[NAN_NDC_ATTRIBUTE_ID_LENGTH]; 364a5487a68SSean Wang u8 ndc_idx; 365a5487a68SSean Wang struct mt7925_nan_sched_timeline timeline[NAN_NUM_AVAIL_DB]; 366a5487a68SSean Wang }; 367a5487a68SSean Wang 368a5487a68SSean Wang struct mt7925_nan_sched_update_crb_tlv { 369a5487a68SSean Wang __le16 tag; 370a5487a68SSean Wang __le16 len; 371a5487a68SSean Wang __le32 sch_idx; 372a5487a68SSean Wang u8 flags; 373a5487a68SSean Wang u8 is_use_ranging; 374a5487a68SSean Wang u8 reserved[2]; 375a5487a68SSean Wang struct mt7925_nan_sched_timeline comm_ranging_timeline[NAN_TIMELINE_MGMT_SIZE]; 376a5487a68SSean Wang struct mt7925_nan_sched_timeline comm_faw_timeline[NAN_TIMELINE_MGMT_SIZE]; 377a5487a68SSean Wang struct mt7925_nan_sched_ndc_ctrl comm_ndc_ctrl; 378a5487a68SSean Wang struct mt7925_nan_sched_faw_ndc_timeline faw_ndc_timeline[NAN_TIMELINE_MGMT_SIZE]; 379a5487a68SSean Wang } __packed __aligned(4); 380a5487a68SSean Wang 381a5487a68SSean Wang struct mt7925_nan_sched_map_sta_rec_tlv { 382a5487a68SSean Wang __le16 tag; 383a5487a68SSean Wang __le16 len; 384a5487a68SSean Wang u8 nmi_addr[ETH_ALEN]; 385a5487a68SSean Wang u8 sta_rec_idx; 386a5487a68SSean Wang u8 ndp_ctx_id; 387a5487a68SSean Wang 388a5487a68SSean Wang __le32 role_idx; 389a5487a68SSean Wang u8 ndi_addr[ETH_ALEN]; 390a5487a68SSean Wang u8 reserved[2]; 391a5487a68SSean Wang } __packed __aligned(4); 392a5487a68SSean Wang 393a5487a68SSean Wang int mt7925_nan_enable(struct ieee80211_vif *vif, 394a5487a68SSean Wang struct mt792x_dev *dev, 395a5487a68SSean Wang struct cfg80211_nan_conf *conf); 396a5487a68SSean Wang 397a5487a68SSean Wang int mt7925_nan_disable(struct ieee80211_vif *vif, 398a5487a68SSean Wang struct mt792x_dev *dev); 399a5487a68SSean Wang 400a5487a68SSean Wang int mt7925_nan_change_configure(struct ieee80211_vif *vif, 401a5487a68SSean Wang struct mt792x_dev *dev, 402a5487a68SSean Wang struct cfg80211_nan_conf *conf); 403a5487a68SSean Wang 404a5487a68SSean Wang void mt7925_nan_mcu_event(struct mt792x_dev *dev, struct sk_buff *skb); 405a5487a68SSean Wang 406*0f3605e4SSean Wang int mt7925_nan_set_nmi_addr(struct mt792x_dev *dev, const u8 *addr); 407*0f3605e4SSean Wang 408a5487a68SSean Wang void mt7925_nan_local_sched_changed(struct mt792x_dev *dev, 409a5487a68SSean Wang struct ieee80211_vif *vif); 410a5487a68SSean Wang 411a5487a68SSean Wang int mt792x_nan_set_peer_schedule(struct mt792x_dev *dev, 412a5487a68SSean Wang struct ieee80211_sta *sta); 413a5487a68SSean Wang 414a5487a68SSean Wang int mt792x_nan_set_peer_rec(struct mt76_dev *mdev, 415a5487a68SSean Wang struct ieee80211_sta *sta); 416a5487a68SSean Wang 417a5487a68SSean Wang int mt792x_nan_map_sta_rec(struct mt76_dev *mdev, 418a5487a68SSean Wang struct ieee80211_vif *vif, 419a5487a68SSean Wang struct ieee80211_sta *sta); 420a5487a68SSean Wang 421a5487a68SSean Wang #endif 422