xref: /wlan-driver/fw-api/hw/qcn6432/coex_tx_status.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1 /*
2  * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
3  *
4  * Permission to use, copy, modify, and/or distribute this software for any
5  * purpose with or without fee is hereby granted, provided that the above
6  * copyright notice and this permission notice appear in all copies.
7  *
8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15  */
16 
17 #ifndef _COEX_TX_STATUS_H_
18 #define _COEX_TX_STATUS_H_
19 #if !defined(__ASSEMBLER__)
20 #endif
21 
22 #define NUM_OF_DWORDS_COEX_TX_STATUS 4
23 
24 #define NUM_OF_QWORDS_COEX_TX_STATUS 2
25 
26 
27 struct coex_tx_status {
28 #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
29              uint32_t reserved_0a                                             :  7, // [6:0]
30                       tx_bw                                                   :  3, // [9:7]
31                       tx_status_reason                                        :  3, // [12:10]
32                       tx_wait_ack                                             :  1, // [13:13]
33                       fes_tx_is_gen_frame                                     :  1, // [14:14]
34                       sch_tx_burst_ongoing                                    :  1, // [15:15]
35                       current_tx_duration                                     : 16; // [31:16]
36              uint32_t next_rx_active_time                                     : 16, // [15:0]
37                       remaining_fes_time                                      : 16; // [31:16]
38              uint32_t tx_antenna_mask                                         :  8, // [7:0]
39                       shared_ant_tx_pwr                                       :  8, // [15:8]
40                       other_ant_tx_pwr                                        :  8, // [23:16]
41                       reserved_2                                              :  8; // [31:24]
42              uint32_t tlv64_padding                                           : 32; // [31:0]
43 #else
44              uint32_t current_tx_duration                                     : 16, // [31:16]
45                       sch_tx_burst_ongoing                                    :  1, // [15:15]
46                       fes_tx_is_gen_frame                                     :  1, // [14:14]
47                       tx_wait_ack                                             :  1, // [13:13]
48                       tx_status_reason                                        :  3, // [12:10]
49                       tx_bw                                                   :  3, // [9:7]
50                       reserved_0a                                             :  7; // [6:0]
51              uint32_t remaining_fes_time                                      : 16, // [31:16]
52                       next_rx_active_time                                     : 16; // [15:0]
53              uint32_t reserved_2                                              :  8, // [31:24]
54                       other_ant_tx_pwr                                        :  8, // [23:16]
55                       shared_ant_tx_pwr                                       :  8, // [15:8]
56                       tx_antenna_mask                                         :  8; // [7:0]
57              uint32_t tlv64_padding                                           : 32; // [31:0]
58 #endif
59 };
60 
61 
62 /* Description		RESERVED_0A
63 
64 			<legal 0>
65 */
66 
67 #define COEX_TX_STATUS_RESERVED_0A_OFFSET                                           0x0000000000000000
68 #define COEX_TX_STATUS_RESERVED_0A_LSB                                              0
69 #define COEX_TX_STATUS_RESERVED_0A_MSB                                              6
70 #define COEX_TX_STATUS_RESERVED_0A_MASK                                             0x000000000000007f
71 
72 
73 /* Description		TX_BW
74 
75 			The BW of the upcoming transmission.
76 			Note: Coex might have changed this from the original request.
77 			See coex related fields below
78 
79 			<enum 0 20_mhz>20 Mhz BW
80 			<enum 1 40_mhz>40 Mhz BW
81 			<enum 2 80_mhz>80 Mhz BW
82 			<enum 3 160_mhz>160 Mhz BW
83 			<enum 4 320_mhz>320 Mhz BW
84 			<enum 5 240_mhz>240 Mhz BW
85 */
86 
87 #define COEX_TX_STATUS_TX_BW_OFFSET                                                 0x0000000000000000
88 #define COEX_TX_STATUS_TX_BW_LSB                                                    7
89 #define COEX_TX_STATUS_TX_BW_MSB                                                    9
90 #define COEX_TX_STATUS_TX_BW_MASK                                                   0x0000000000000380
91 
92 
93 /* Description		TX_STATUS_REASON
94 
95 			<enum 0     FES_tx_start> TXPCU sends this status at the
96 			 start of SCH initiated transmission (when the commands
97 			are given to the PHY). This includes the transmission of
98 			 RTS and CTS
99 			Note that based on field 'Fes_tx_is_gen_frame' COEX can
100 			derive if this is a protection frame or regular PPDU.
101 
102 			<enum 1     FES_tx_end> TXPCU sends this status at the end
103 			 of SCH initiated transmission (when PHY TX has confirmed
104 			 the transmit over the medium has finished)
105 
106 			<enum 2     FES_end> TXPCU sends this status at the end
107 			of of the entire frame exchange sequence. This includes
108 			reception (or lack of..) of the ACK/BA/CTS frame
109 			TXPCU sends this FES after it has sent the TX_FES_STATUS
110 			 TLV(s). This also sent in case of 11ax basic trigger response
111 			 transmissions, when an ACK/BA is expected, and that got
112 			 received.
113 			<enum 3     Response_tx_start> TXPCU sends this status at
114 			 the start of Self gen initiated response transmission (when
115 			 the commands are given to the PHY)
116 			<enum 4     Response_tx_end> TXPCU sends this status at
117 			the end of Self gen initiated response transmission (when
118 			 PHY TX has confirmed the transmit over the medium has finished)
119 
120 
121 			<enum 5     No_tx_ongoing> TXPCU sends this TLV when forced
122 			 by SW to do so. It is used to be able to get TXPCU and
123 			coex synchronized again in case of some error handling scenarios
124 
125 
126 			<legal 0-5>
127 */
128 
129 #define COEX_TX_STATUS_TX_STATUS_REASON_OFFSET                                      0x0000000000000000
130 #define COEX_TX_STATUS_TX_STATUS_REASON_LSB                                         10
131 #define COEX_TX_STATUS_TX_STATUS_REASON_MSB                                         12
132 #define COEX_TX_STATUS_TX_STATUS_REASON_MASK                                        0x0000000000001c00
133 
134 
135 /* Description		TX_WAIT_ACK
136 
137 			Field can only be set for the 'FES_tx_end' scenario.
138 			TXPCU sets this bit to 1 when it is waiting for an ACK/BA
139 			 or CTS Response.
140 */
141 
142 #define COEX_TX_STATUS_TX_WAIT_ACK_OFFSET                                           0x0000000000000000
143 #define COEX_TX_STATUS_TX_WAIT_ACK_LSB                                              13
144 #define COEX_TX_STATUS_TX_WAIT_ACK_MSB                                              13
145 #define COEX_TX_STATUS_TX_WAIT_ACK_MASK                                             0x0000000000002000
146 
147 
148 /* Description		FES_TX_IS_GEN_FRAME
149 
150 			Field only valid in case tx_status_reason indicates FES_tx_start
151 			 or FES_tx_end.
152 
153 			Field is set to 1 if the frame transmitted is a self generated
154 			 frame like RTS, CTS 2 self or NDP
155 */
156 
157 #define COEX_TX_STATUS_FES_TX_IS_GEN_FRAME_OFFSET                                   0x0000000000000000
158 #define COEX_TX_STATUS_FES_TX_IS_GEN_FRAME_LSB                                      14
159 #define COEX_TX_STATUS_FES_TX_IS_GEN_FRAME_MSB                                      14
160 #define COEX_TX_STATUS_FES_TX_IS_GEN_FRAME_MASK                                     0x0000000000004000
161 
162 
163 /* Description		SCH_TX_BURST_ONGOING
164 
165 			The proposed change by HWSCH  requires TXPCU to reflect
166 			TX_FES_SETUP.sch_tx_burst_ongoing field intoCOEX_TX_STATUS.sch_tx_burst_ongoing
167 			 field, when tx_status_reason is FES_end.
168 			SCH will overwrite this bit (that is set it to 1), when
169 			TXPCU set the tx_status_reason to FES_end, and SCH determines
170 			 that this FES is followed by other SIFS bursting based
171 			Scheduler commands.
172 			<legal all>
173 */
174 
175 #define COEX_TX_STATUS_SCH_TX_BURST_ONGOING_OFFSET                                  0x0000000000000000
176 #define COEX_TX_STATUS_SCH_TX_BURST_ONGOING_LSB                                     15
177 #define COEX_TX_STATUS_SCH_TX_BURST_ONGOING_MSB                                     15
178 #define COEX_TX_STATUS_SCH_TX_BURST_ONGOING_MASK                                    0x0000000000008000
179 
180 
181 /* Description		CURRENT_TX_DURATION
182 
183 			In case of FES related transmission:
184 			TXPCU sends current transmission time at the beginning of
185 			 transmission. This time covers the entire (PPDU) tx_frame.
186 			This field is only valid when 'tx_status_reason' is equal
187 			 to FES_tx_start or Response_tx_start. In other scenarios
188 			 it is set to 0
189 			In us units <legal all>
190 */
191 
192 #define COEX_TX_STATUS_CURRENT_TX_DURATION_OFFSET                                   0x0000000000000000
193 #define COEX_TX_STATUS_CURRENT_TX_DURATION_LSB                                      16
194 #define COEX_TX_STATUS_CURRENT_TX_DURATION_MSB                                      31
195 #define COEX_TX_STATUS_CURRENT_TX_DURATION_MASK                                     0x00000000ffff0000
196 
197 
198 /* Description		NEXT_RX_ACTIVE_TIME
199 
200 			In case of FES transmission:
201 			The expected receive duration for ACK/CTS/BA frame after
202 			 current transmission has finished. This field should be
203 			 set at both the start and end of the transmission.  When
204 			 no frame reception is expected, this field is 0
205 
206 			In case of Response transmission or Trigger Response transmission:
207 
208 			The expected receive duration for upcoming reception. This
209 			 field has the same value as the transmitted duration field.
210 
211 
212 			Note that for this scenario, there might be an other TX
213 			generated during this specified time. It is not known to
214 			 this device what the transmitter is planning to do in the
215 			 remainder of the TXOP. In other words, this value represents
216 			 the best guess, but might not be fully accurate.
217 
218 			In us units
219 			<legal all>
220 */
221 
222 #define COEX_TX_STATUS_NEXT_RX_ACTIVE_TIME_OFFSET                                   0x0000000000000000
223 #define COEX_TX_STATUS_NEXT_RX_ACTIVE_TIME_LSB                                      32
224 #define COEX_TX_STATUS_NEXT_RX_ACTIVE_TIME_MSB                                      47
225 #define COEX_TX_STATUS_NEXT_RX_ACTIVE_TIME_MASK                                     0x0000ffff00000000
226 
227 
228 /* Description		REMAINING_FES_TIME
229 
230 			In case of FES transmission:
231 			TXPCU sends the remaining FES time it expects to occupy
232 			the media.
233 			At the 'FES_tx_start', this value is the current_tx_duration
234 			 + value of inserted duration field.
235 			At the 'FES_tx_end', this value is equal to the duration
236 			 field in the just transmitted frame.
237 			At the 'FES_end', this value is the remaining FES duration
238 			 value. Note that this value should only be non zero in
239 			case of SIFS burting type of transmissions.
240 			In case of a FES failure, like reponse frame not received,
241 			this field is set to 0
242 
243 			In case of Self Gen response transmission (includes Trigger
244 			 response):
245 			At the 'Response_tx_start', this field has the same value
246 			 as the Current_tx_duration  + inserted duration field
247 			At the 'Response_tx_end', this field has the same value
248 			as the inserted duration field
249 			<legal all>
250 */
251 
252 #define COEX_TX_STATUS_REMAINING_FES_TIME_OFFSET                                    0x0000000000000000
253 #define COEX_TX_STATUS_REMAINING_FES_TIME_LSB                                       48
254 #define COEX_TX_STATUS_REMAINING_FES_TIME_MSB                                       63
255 #define COEX_TX_STATUS_REMAINING_FES_TIME_MASK                                      0xffff000000000000
256 
257 
258 /* Description		TX_ANTENNA_MASK
259 
260 			The actual used antennas for this transmission
261 
262 			For debug purpose only. PDG should not have modified the
263 			 value given by the Coex.
264 
265 			<legal all>
266 */
267 
268 #define COEX_TX_STATUS_TX_ANTENNA_MASK_OFFSET                                       0x0000000000000008
269 #define COEX_TX_STATUS_TX_ANTENNA_MASK_LSB                                          0
270 #define COEX_TX_STATUS_TX_ANTENNA_MASK_MSB                                          7
271 #define COEX_TX_STATUS_TX_ANTENNA_MASK_MASK                                         0x00000000000000ff
272 
273 
274 /* Description		SHARED_ANT_TX_PWR
275 
276 			Actual tx power on the shared antenna
277 			TXPCU sends at the beginning of transmission when tx_frame
278 			 is on.
279 
280 			For debug purpose only. PDG should not have modified the
281 			 value given by the Coex.
282 
283 			Transmit Power in s6.2 format.
284 			In units of 0.25 dBm
285 			<legal all>
286 */
287 
288 #define COEX_TX_STATUS_SHARED_ANT_TX_PWR_OFFSET                                     0x0000000000000008
289 #define COEX_TX_STATUS_SHARED_ANT_TX_PWR_LSB                                        8
290 #define COEX_TX_STATUS_SHARED_ANT_TX_PWR_MSB                                        15
291 #define COEX_TX_STATUS_SHARED_ANT_TX_PWR_MASK                                       0x000000000000ff00
292 
293 
294 /* Description		OTHER_ANT_TX_PWR
295 
296 			Actual tx power on the 'unshared' antenna(s)
297 			TXPCU sends at the beginning of transmission when tx_frame
298 			 is on.
299 
300 			For debug purpose only. PDG should not have modified the
301 			 value given by the Coex.
302 
303 			Transmit Power in s6.2 format.
304 			In units of 0.25 dBm
305 			<legal all>
306 */
307 
308 #define COEX_TX_STATUS_OTHER_ANT_TX_PWR_OFFSET                                      0x0000000000000008
309 #define COEX_TX_STATUS_OTHER_ANT_TX_PWR_LSB                                         16
310 #define COEX_TX_STATUS_OTHER_ANT_TX_PWR_MSB                                         23
311 #define COEX_TX_STATUS_OTHER_ANT_TX_PWR_MASK                                        0x0000000000ff0000
312 
313 
314 /* Description		RESERVED_2
315 
316 			Generator should set to 0, consumer shall ignore <legal
317 			0>
318 */
319 
320 #define COEX_TX_STATUS_RESERVED_2_OFFSET                                            0x0000000000000008
321 #define COEX_TX_STATUS_RESERVED_2_LSB                                               24
322 #define COEX_TX_STATUS_RESERVED_2_MSB                                               31
323 #define COEX_TX_STATUS_RESERVED_2_MASK                                              0x00000000ff000000
324 
325 
326 /* Description		TLV64_PADDING
327 
328 			Automatic DWORD padding inserted while converting TLV32
329 			to TLV64 for 64 bit ARCH
330 			<legal 0>
331 */
332 
333 #define COEX_TX_STATUS_TLV64_PADDING_OFFSET                                         0x0000000000000008
334 #define COEX_TX_STATUS_TLV64_PADDING_LSB                                            32
335 #define COEX_TX_STATUS_TLV64_PADDING_MSB                                            63
336 #define COEX_TX_STATUS_TLV64_PADDING_MASK                                           0xffffffff00000000
337 
338 
339 
340 #endif   // COEX_TX_STATUS
341