1 /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
2 /*
3  * Copyright (C) 2012-2014, 2018-2019 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 	 * @RX_NO_DATA_NOTIF: &struct iwl_rx_no_data
57 	 */
58 	RX_NO_DATA_NOTIF = 0xF5,
59 
60 	/**
61 	 * @TLC_MNG_UPDATE_NOTIF: &struct iwl_tlc_update_notif
62 	 */
63 	TLC_MNG_UPDATE_NOTIF = 0xF7,
64 
65 	/**
66 	 * @STA_PM_NOTIF: &struct iwl_mvm_pm_state_notification
67 	 */
68 	STA_PM_NOTIF = 0xFD,
69 
70 	/**
71 	 * @MU_GROUP_MGMT_NOTIF: &struct iwl_mu_group_mgmt_notif
72 	 */
73 	MU_GROUP_MGMT_NOTIF = 0xFE,
74 
75 	/**
76 	 * @RX_QUEUES_NOTIFICATION: &struct iwl_rxq_sync_notification
77 	 */
78 	RX_QUEUES_NOTIFICATION = 0xFF,
79 };
80 
81 /**
82  * struct iwl_mu_group_mgmt_cmd - VHT MU-MIMO group configuration
83  *
84  * @reserved: reserved
85  * @membership_status: a bitmap of MU groups
86  * @user_position:the position of station in a group. If the station is in the
87  *	group then bits (group * 2) is the position -1
88  */
89 struct iwl_mu_group_mgmt_cmd {
90 	__le32 reserved;
91 	__le32 membership_status[2];
92 	__le32 user_position[4];
93 } __packed; /* MU_GROUP_ID_MNG_TABLE_API_S_VER_1 */
94 
95 /**
96  * struct iwl_mu_group_mgmt_notif - VHT MU-MIMO group id notification
97  *
98  * @membership_status: a bitmap of MU groups
99  * @user_position: the position of station in a group. If the station is in the
100  *	group then bits (group * 2) is the position -1
101  */
102 struct iwl_mu_group_mgmt_notif {
103 	__le32 membership_status[2];
104 	__le32 user_position[4];
105 } __packed; /* MU_GROUP_MNG_NTFY_API_S_VER_1 */
106 
107 enum iwl_channel_estimation_flags {
108 	IWL_CHANNEL_ESTIMATION_ENABLE	= BIT(0),
109 	IWL_CHANNEL_ESTIMATION_TIMER	= BIT(1),
110 	IWL_CHANNEL_ESTIMATION_COUNTER	= BIT(2),
111 };
112 
113 /**
114  * struct iwl_channel_estimation_cfg - channel estimation reporting config
115  */
116 struct iwl_channel_estimation_cfg {
117 	/**
118 	 * @flags: flags, see &enum iwl_channel_estimation_flags
119 	 */
120 	__le32 flags;
121 	/**
122 	 * @timer: if enabled via flags, automatically disable after this many
123 	 *	microseconds
124 	 */
125 	__le32 timer;
126 	/**
127 	 * @count: if enabled via flags, automatically disable after this many
128 	 *	frames with channel estimation matrix were captured
129 	 */
130 	__le32 count;
131 	/**
132 	 * @rate_n_flags_mask: only try to record the channel estimation matrix
133 	 *	if the rate_n_flags value for the received frame (let's call
134 	 *	that rx_rnf) matches the mask/value given here like this:
135 	 *	(rx_rnf & rate_n_flags_mask) == rate_n_flags_val.
136 	 */
137 	__le32 rate_n_flags_mask;
138 	/**
139 	 * @rate_n_flags_val: see @rate_n_flags_mask
140 	 */
141 	__le32 rate_n_flags_val;
142 	/**
143 	 * @reserved: reserved (for alignment)
144 	 */
145 	__le32 reserved;
146 	/**
147 	 * @frame_types: bitmap of frame types to capture, the received frame's
148 	 *	subtype|type takes 6 bits in the frame and the corresponding bit
149 	 *	in this field must be set to 1 to capture channel estimation for
150 	 *	that frame type. Set to all-ones to enable capturing for all
151 	 *	frame types.
152 	 */
153 	__le64 frame_types;
154 } __packed; /* CHEST_COLLECTOR_FILTER_CMD_API_S_VER_1 */
155 
156 #endif /* __iwl_fw_api_datapath_h__ */
157