]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/contrib/dev/iwlwifi/fw/api/datapath.h
sqlite3: Vendor import of sqlite3 3.37.2
[FreeBSD/FreeBSD.git] / sys / contrib / dev / iwlwifi / fw / api / datapath.h
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          * @THERMAL_DUAL_CHAIN_DISABLE_REQ: firmware request for SMPS mode,
68          *      &struct iwl_thermal_dual_chain_request
69          */
70         THERMAL_DUAL_CHAIN_REQUEST = 0xF6,
71
72         /**
73          * @TLC_MNG_UPDATE_NOTIF: &struct iwl_tlc_update_notif
74          */
75         TLC_MNG_UPDATE_NOTIF = 0xF7,
76
77         /**
78          * @STA_PM_NOTIF: &struct iwl_mvm_pm_state_notification
79          */
80         STA_PM_NOTIF = 0xFD,
81
82         /**
83          * @MU_GROUP_MGMT_NOTIF: &struct iwl_mu_group_mgmt_notif
84          */
85         MU_GROUP_MGMT_NOTIF = 0xFE,
86
87         /**
88          * @RX_QUEUES_NOTIFICATION: &struct iwl_rxq_sync_notification
89          */
90         RX_QUEUES_NOTIFICATION = 0xFF,
91 };
92
93 /**
94  * struct iwl_mu_group_mgmt_cmd - VHT MU-MIMO group configuration
95  *
96  * @reserved: reserved
97  * @membership_status: a bitmap of MU groups
98  * @user_position:the position of station in a group. If the station is in the
99  *      group then bits (group * 2) is the position -1
100  */
101 struct iwl_mu_group_mgmt_cmd {
102         __le32 reserved;
103         __le32 membership_status[2];
104         __le32 user_position[4];
105 } __packed; /* MU_GROUP_ID_MNG_TABLE_API_S_VER_1 */
106
107 /**
108  * struct iwl_mu_group_mgmt_notif - VHT MU-MIMO group id notification
109  *
110  * @membership_status: a bitmap of MU groups
111  * @user_position: the position of station in a group. If the station is in the
112  *      group then bits (group * 2) is the position -1
113  */
114 struct iwl_mu_group_mgmt_notif {
115         __le32 membership_status[2];
116         __le32 user_position[4];
117 } __packed; /* MU_GROUP_MNG_NTFY_API_S_VER_1 */
118
119 enum iwl_channel_estimation_flags {
120         IWL_CHANNEL_ESTIMATION_ENABLE   = BIT(0),
121         IWL_CHANNEL_ESTIMATION_TIMER    = BIT(1),
122         IWL_CHANNEL_ESTIMATION_COUNTER  = BIT(2),
123 };
124
125 /**
126  * struct iwl_channel_estimation_cfg - channel estimation reporting config
127  */
128 struct iwl_channel_estimation_cfg {
129         /**
130          * @flags: flags, see &enum iwl_channel_estimation_flags
131          */
132         __le32 flags;
133         /**
134          * @timer: if enabled via flags, automatically disable after this many
135          *      microseconds
136          */
137         __le32 timer;
138         /**
139          * @count: if enabled via flags, automatically disable after this many
140          *      frames with channel estimation matrix were captured
141          */
142         __le32 count;
143         /**
144          * @rate_n_flags_mask: only try to record the channel estimation matrix
145          *      if the rate_n_flags value for the received frame (let's call
146          *      that rx_rnf) matches the mask/value given here like this:
147          *      (rx_rnf & rate_n_flags_mask) == rate_n_flags_val.
148          */
149         __le32 rate_n_flags_mask;
150         /**
151          * @rate_n_flags_val: see @rate_n_flags_mask
152          */
153         __le32 rate_n_flags_val;
154         /**
155          * @reserved: reserved (for alignment)
156          */
157         __le32 reserved;
158         /**
159          * @frame_types: bitmap of frame types to capture, the received frame's
160          *      subtype|type takes 6 bits in the frame and the corresponding bit
161          *      in this field must be set to 1 to capture channel estimation for
162          *      that frame type. Set to all-ones to enable capturing for all
163          *      frame types.
164          */
165         __le64 frame_types;
166 } __packed; /* CHEST_COLLECTOR_FILTER_CMD_API_S_VER_1 */
167
168 enum iwl_datapath_monitor_notif_type {
169         IWL_DP_MON_NOTIF_TYPE_EXT_CCA,
170 };
171
172 struct iwl_datapath_monitor_notif {
173         __le32 type;
174         u8 mac_id;
175         u8 reserved[3];
176 } __packed; /* MONITOR_NTF_API_S_VER_1 */
177
178 /**
179  * enum iwl_thermal_dual_chain_req_events - firmware SMPS request event
180  * @THERMAL_DUAL_CHAIN_REQ_ENABLE: (re-)enable dual-chain operation
181  *      (subject to other constraints)
182  * @THERMAL_DUAL_CHAIN_REQ_DISABLE: disable dual-chain operation
183  *      (static SMPS)
184  */
185 enum iwl_thermal_dual_chain_req_events {
186         THERMAL_DUAL_CHAIN_REQ_ENABLE,
187         THERMAL_DUAL_CHAIN_REQ_DISABLE,
188 }; /* THERMAL_DUAL_CHAIN_DISABLE_STATE_API_E_VER_1 */
189
190 /**
191  * struct iwl_thermal_dual_chain_request - SMPS request
192  * @event: the type of request, see &enum iwl_thermal_dual_chain_req_events
193  */
194 struct iwl_thermal_dual_chain_request {
195         __le32 event;
196 } __packed; /* THERMAL_DUAL_CHAIN_DISABLE_REQ_NTFY_API_S_VER_1 */
197
198 #endif /* __iwl_fw_api_datapath_h__ */