xref: /linux/drivers/net/wireless/intel/iwlwifi/fw/api/datapath.h (revision a1c3be890440a1769ed6f822376a3e3ab0d42994)
1 /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
2 /*
3  * Copyright (C) 2012-2014, 2018-2020 Intel Corporation
4  * Copyright (C) 2013-2015 Intel Mobile Communications GmbH
5  * Copyright (C) 2016-2017 Intel Deutschland GmbH
6  */
7 #ifndef __iwl_fw_api_datapath_h__
8 #define __iwl_fw_api_datapath_h__
9 
10 /**
11  * enum iwl_data_path_subcmd_ids - data path group commands
12  */
13 enum iwl_data_path_subcmd_ids {
14 	/**
15 	 * @DQA_ENABLE_CMD: &struct iwl_dqa_enable_cmd
16 	 */
17 	DQA_ENABLE_CMD = 0x0,
18 
19 	/**
20 	 * @UPDATE_MU_GROUPS_CMD: &struct iwl_mu_group_mgmt_cmd
21 	 */
22 	UPDATE_MU_GROUPS_CMD = 0x1,
23 
24 	/**
25 	 * @TRIGGER_RX_QUEUES_NOTIF_CMD: &struct iwl_rxq_sync_cmd
26 	 */
27 	TRIGGER_RX_QUEUES_NOTIF_CMD = 0x2,
28 
29 	/**
30 	 * @STA_HE_CTXT_CMD: &struct iwl_he_sta_context_cmd
31 	 */
32 	STA_HE_CTXT_CMD = 0x7,
33 
34 	/**
35 	 * @RFH_QUEUE_CONFIG_CMD: &struct iwl_rfh_queue_config
36 	 */
37 	RFH_QUEUE_CONFIG_CMD = 0xD,
38 
39 	/**
40 	 * @TLC_MNG_CONFIG_CMD: &struct iwl_tlc_config_cmd
41 	 */
42 	TLC_MNG_CONFIG_CMD = 0xF,
43 
44 	/**
45 	 * @HE_AIR_SNIFFER_CONFIG_CMD: &struct iwl_he_monitor_cmd
46 	 */
47 	HE_AIR_SNIFFER_CONFIG_CMD = 0x13,
48 
49 	/**
50 	 * @CHEST_COLLECTOR_FILTER_CONFIG_CMD: Configure the CSI
51 	 *	matrix collection, uses &struct iwl_channel_estimation_cfg
52 	 */
53 	CHEST_COLLECTOR_FILTER_CONFIG_CMD = 0x14,
54 
55 	/**
56 	 * @MONITOR_NOTIF: Datapath monitoring notification, using
57 	 *	&struct iwl_datapath_monitor_notif
58 	 */
59 	MONITOR_NOTIF = 0xF4,
60 
61 	/**
62 	 * @RX_NO_DATA_NOTIF: &struct iwl_rx_no_data
63 	 */
64 	RX_NO_DATA_NOTIF = 0xF5,
65 
66 	/**
67 	 * @TLC_MNG_UPDATE_NOTIF: &struct iwl_tlc_update_notif
68 	 */
69 	TLC_MNG_UPDATE_NOTIF = 0xF7,
70 
71 	/**
72 	 * @STA_PM_NOTIF: &struct iwl_mvm_pm_state_notification
73 	 */
74 	STA_PM_NOTIF = 0xFD,
75 
76 	/**
77 	 * @MU_GROUP_MGMT_NOTIF: &struct iwl_mu_group_mgmt_notif
78 	 */
79 	MU_GROUP_MGMT_NOTIF = 0xFE,
80 
81 	/**
82 	 * @RX_QUEUES_NOTIFICATION: &struct iwl_rxq_sync_notification
83 	 */
84 	RX_QUEUES_NOTIFICATION = 0xFF,
85 };
86 
87 /**
88  * struct iwl_mu_group_mgmt_cmd - VHT MU-MIMO group configuration
89  *
90  * @reserved: reserved
91  * @membership_status: a bitmap of MU groups
92  * @user_position:the position of station in a group. If the station is in the
93  *	group then bits (group * 2) is the position -1
94  */
95 struct iwl_mu_group_mgmt_cmd {
96 	__le32 reserved;
97 	__le32 membership_status[2];
98 	__le32 user_position[4];
99 } __packed; /* MU_GROUP_ID_MNG_TABLE_API_S_VER_1 */
100 
101 /**
102  * struct iwl_mu_group_mgmt_notif - VHT MU-MIMO group id notification
103  *
104  * @membership_status: a bitmap of MU groups
105  * @user_position: the position of station in a group. If the station is in the
106  *	group then bits (group * 2) is the position -1
107  */
108 struct iwl_mu_group_mgmt_notif {
109 	__le32 membership_status[2];
110 	__le32 user_position[4];
111 } __packed; /* MU_GROUP_MNG_NTFY_API_S_VER_1 */
112 
113 enum iwl_channel_estimation_flags {
114 	IWL_CHANNEL_ESTIMATION_ENABLE	= BIT(0),
115 	IWL_CHANNEL_ESTIMATION_TIMER	= BIT(1),
116 	IWL_CHANNEL_ESTIMATION_COUNTER	= BIT(2),
117 };
118 
119 /**
120  * struct iwl_channel_estimation_cfg - channel estimation reporting config
121  */
122 struct iwl_channel_estimation_cfg {
123 	/**
124 	 * @flags: flags, see &enum iwl_channel_estimation_flags
125 	 */
126 	__le32 flags;
127 	/**
128 	 * @timer: if enabled via flags, automatically disable after this many
129 	 *	microseconds
130 	 */
131 	__le32 timer;
132 	/**
133 	 * @count: if enabled via flags, automatically disable after this many
134 	 *	frames with channel estimation matrix were captured
135 	 */
136 	__le32 count;
137 	/**
138 	 * @rate_n_flags_mask: only try to record the channel estimation matrix
139 	 *	if the rate_n_flags value for the received frame (let's call
140 	 *	that rx_rnf) matches the mask/value given here like this:
141 	 *	(rx_rnf & rate_n_flags_mask) == rate_n_flags_val.
142 	 */
143 	__le32 rate_n_flags_mask;
144 	/**
145 	 * @rate_n_flags_val: see @rate_n_flags_mask
146 	 */
147 	__le32 rate_n_flags_val;
148 	/**
149 	 * @reserved: reserved (for alignment)
150 	 */
151 	__le32 reserved;
152 	/**
153 	 * @frame_types: bitmap of frame types to capture, the received frame's
154 	 *	subtype|type takes 6 bits in the frame and the corresponding bit
155 	 *	in this field must be set to 1 to capture channel estimation for
156 	 *	that frame type. Set to all-ones to enable capturing for all
157 	 *	frame types.
158 	 */
159 	__le64 frame_types;
160 } __packed; /* CHEST_COLLECTOR_FILTER_CMD_API_S_VER_1 */
161 
162 enum iwl_datapath_monitor_notif_type {
163 	IWL_DP_MON_NOTIF_TYPE_EXT_CCA,
164 };
165 
166 struct iwl_datapath_monitor_notif {
167 	__le32 type;
168 	u8 mac_id;
169 	u8 reserved[3];
170 } __packed; /* MONITOR_NTF_API_S_VER_1 */
171 
172 #endif /* __iwl_fw_api_datapath_h__ */
173