xref: /linux/drivers/net/wireless/mediatek/mt76/mt7925/nan.h (revision 91ec2035134982b98fab0609a9fd8480e8217dc1)
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