1  
2  /* Copyright (c) 2022, 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  
18  
19  
20  
21  
22  
23  
24  
25  
26  #ifndef _SW_MONITOR_RING_H_
27  #define _SW_MONITOR_RING_H_
28  #if !defined(__ASSEMBLER__)
29  #endif
30  
31  #include "buffer_addr_info.h"
32  #include "rx_mpdu_details.h"
33  #define NUM_OF_DWORDS_SW_MONITOR_RING 8
34  
35  
36  struct sw_monitor_ring {
37  #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
38               struct   rx_mpdu_details                                           reo_level_mpdu_frame_info;
39               struct   buffer_addr_info                                          status_buff_addr_info;
40               uint32_t rxdma_push_reason                                       :  2,
41                        rxdma_error_code                                        :  5,
42                        mpdu_fragment_number                                    :  4,
43                        frameless_bar                                           :  1,
44                        status_buf_count                                        :  4,
45                        end_of_ppdu                                             :  1,
46                        reserved_6a                                             : 15;
47               uint32_t phy_ppdu_id                                             : 16,
48                        reserved_7a                                             :  4,
49                        ring_id                                                 :  8,
50                        looping_count                                           :  4;
51  #else
52               struct   rx_mpdu_details                                           reo_level_mpdu_frame_info;
53               struct   buffer_addr_info                                          status_buff_addr_info;
54               uint32_t reserved_6a                                             : 15,
55                        end_of_ppdu                                             :  1,
56                        status_buf_count                                        :  4,
57                        frameless_bar                                           :  1,
58                        mpdu_fragment_number                                    :  4,
59                        rxdma_error_code                                        :  5,
60                        rxdma_push_reason                                       :  2;
61               uint32_t looping_count                                           :  4,
62                        ring_id                                                 :  8,
63                        reserved_7a                                             :  4,
64                        phy_ppdu_id                                             : 16;
65  #endif
66  };
67  
68  
69  
70  
71  
72  
73  
74  
75  
76  
77  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_BUFFER_ADDR_31_0_OFFSET 0x00000000
78  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_BUFFER_ADDR_31_0_LSB 0
79  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_BUFFER_ADDR_31_0_MSB 31
80  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_BUFFER_ADDR_31_0_MASK 0xffffffff
81  
82  
83  
84  
85  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_BUFFER_ADDR_39_32_OFFSET 0x00000004
86  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_BUFFER_ADDR_39_32_LSB 0
87  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_BUFFER_ADDR_39_32_MSB 7
88  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_BUFFER_ADDR_39_32_MASK 0x000000ff
89  
90  
91  
92  
93  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_RETURN_BUFFER_MANAGER_OFFSET 0x00000004
94  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_RETURN_BUFFER_MANAGER_LSB 8
95  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_RETURN_BUFFER_MANAGER_MSB 11
96  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_RETURN_BUFFER_MANAGER_MASK 0x00000f00
97  
98  
99  
100  
101  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_SW_BUFFER_COOKIE_OFFSET 0x00000004
102  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_SW_BUFFER_COOKIE_LSB 12
103  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_SW_BUFFER_COOKIE_MSB 31
104  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_SW_BUFFER_COOKIE_MASK 0xfffff000
105  
106  
107  
108  
109  
110  
111  
112  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MSDU_COUNT_OFFSET 0x00000008
113  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MSDU_COUNT_LSB 0
114  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MSDU_COUNT_MSB 7
115  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MSDU_COUNT_MASK 0x000000ff
116  
117  
118  
119  
120  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_FRAGMENT_FLAG_OFFSET 0x00000008
121  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_FRAGMENT_FLAG_LSB 8
122  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_FRAGMENT_FLAG_MSB 8
123  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_FRAGMENT_FLAG_MASK 0x00000100
124  
125  
126  
127  
128  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MPDU_RETRY_BIT_OFFSET 0x00000008
129  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MPDU_RETRY_BIT_LSB 9
130  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MPDU_RETRY_BIT_MSB 9
131  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MPDU_RETRY_BIT_MASK 0x00000200
132  
133  
134  
135  
136  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_AMPDU_FLAG_OFFSET 0x00000008
137  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_AMPDU_FLAG_LSB 10
138  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_AMPDU_FLAG_MSB 10
139  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_AMPDU_FLAG_MASK 0x00000400
140  
141  
142  
143  
144  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_BAR_FRAME_OFFSET 0x00000008
145  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_BAR_FRAME_LSB 11
146  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_BAR_FRAME_MSB 11
147  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_BAR_FRAME_MASK 0x00000800
148  
149  
150  
151  
152  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_PN_FIELDS_CONTAIN_VALID_INFO_OFFSET 0x00000008
153  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_PN_FIELDS_CONTAIN_VALID_INFO_LSB 12
154  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_PN_FIELDS_CONTAIN_VALID_INFO_MSB 12
155  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_PN_FIELDS_CONTAIN_VALID_INFO_MASK 0x00001000
156  
157  
158  
159  
160  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_RAW_MPDU_OFFSET 0x00000008
161  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_RAW_MPDU_LSB 13
162  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_RAW_MPDU_MSB 13
163  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_RAW_MPDU_MASK 0x00002000
164  
165  
166  
167  
168  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MORE_FRAGMENT_FLAG_OFFSET 0x00000008
169  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MORE_FRAGMENT_FLAG_LSB 14
170  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MORE_FRAGMENT_FLAG_MSB 14
171  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MORE_FRAGMENT_FLAG_MASK 0x00004000
172  
173  
174  
175  
176  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_SRC_INFO_OFFSET 0x00000008
177  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_SRC_INFO_LSB 15
178  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_SRC_INFO_MSB 26
179  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_SRC_INFO_MASK 0x07ff8000
180  
181  
182  
183  
184  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MPDU_QOS_CONTROL_VALID_OFFSET 0x00000008
185  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MPDU_QOS_CONTROL_VALID_LSB 27
186  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MPDU_QOS_CONTROL_VALID_MSB 27
187  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MPDU_QOS_CONTROL_VALID_MASK 0x08000000
188  
189  
190  
191  
192  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_TID_OFFSET 0x00000008
193  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_TID_LSB 28
194  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_TID_MSB 31
195  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_TID_MASK 0xf0000000
196  
197  
198  
199  
200  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_PEER_META_DATA_OFFSET 0x0000000c
201  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_PEER_META_DATA_LSB 0
202  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_PEER_META_DATA_MSB 31
203  #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_PEER_META_DATA_MASK 0xffffffff
204  
205  
206  
207  
208  
209  
210  
211  #define SW_MONITOR_RING_STATUS_BUFF_ADDR_INFO_BUFFER_ADDR_31_0_OFFSET               0x00000010
212  #define SW_MONITOR_RING_STATUS_BUFF_ADDR_INFO_BUFFER_ADDR_31_0_LSB                  0
213  #define SW_MONITOR_RING_STATUS_BUFF_ADDR_INFO_BUFFER_ADDR_31_0_MSB                  31
214  #define SW_MONITOR_RING_STATUS_BUFF_ADDR_INFO_BUFFER_ADDR_31_0_MASK                 0xffffffff
215  
216  
217  
218  
219  #define SW_MONITOR_RING_STATUS_BUFF_ADDR_INFO_BUFFER_ADDR_39_32_OFFSET              0x00000014
220  #define SW_MONITOR_RING_STATUS_BUFF_ADDR_INFO_BUFFER_ADDR_39_32_LSB                 0
221  #define SW_MONITOR_RING_STATUS_BUFF_ADDR_INFO_BUFFER_ADDR_39_32_MSB                 7
222  #define SW_MONITOR_RING_STATUS_BUFF_ADDR_INFO_BUFFER_ADDR_39_32_MASK                0x000000ff
223  
224  
225  
226  
227  #define SW_MONITOR_RING_STATUS_BUFF_ADDR_INFO_RETURN_BUFFER_MANAGER_OFFSET          0x00000014
228  #define SW_MONITOR_RING_STATUS_BUFF_ADDR_INFO_RETURN_BUFFER_MANAGER_LSB             8
229  #define SW_MONITOR_RING_STATUS_BUFF_ADDR_INFO_RETURN_BUFFER_MANAGER_MSB             11
230  #define SW_MONITOR_RING_STATUS_BUFF_ADDR_INFO_RETURN_BUFFER_MANAGER_MASK            0x00000f00
231  
232  
233  
234  
235  #define SW_MONITOR_RING_STATUS_BUFF_ADDR_INFO_SW_BUFFER_COOKIE_OFFSET               0x00000014
236  #define SW_MONITOR_RING_STATUS_BUFF_ADDR_INFO_SW_BUFFER_COOKIE_LSB                  12
237  #define SW_MONITOR_RING_STATUS_BUFF_ADDR_INFO_SW_BUFFER_COOKIE_MSB                  31
238  #define SW_MONITOR_RING_STATUS_BUFF_ADDR_INFO_SW_BUFFER_COOKIE_MASK                 0xfffff000
239  
240  
241  
242  
243  #define SW_MONITOR_RING_RXDMA_PUSH_REASON_OFFSET                                    0x00000018
244  #define SW_MONITOR_RING_RXDMA_PUSH_REASON_LSB                                       0
245  #define SW_MONITOR_RING_RXDMA_PUSH_REASON_MSB                                       1
246  #define SW_MONITOR_RING_RXDMA_PUSH_REASON_MASK                                      0x00000003
247  
248  
249  
250  
251  #define SW_MONITOR_RING_RXDMA_ERROR_CODE_OFFSET                                     0x00000018
252  #define SW_MONITOR_RING_RXDMA_ERROR_CODE_LSB                                        2
253  #define SW_MONITOR_RING_RXDMA_ERROR_CODE_MSB                                        6
254  #define SW_MONITOR_RING_RXDMA_ERROR_CODE_MASK                                       0x0000007c
255  
256  
257  
258  
259  #define SW_MONITOR_RING_MPDU_FRAGMENT_NUMBER_OFFSET                                 0x00000018
260  #define SW_MONITOR_RING_MPDU_FRAGMENT_NUMBER_LSB                                    7
261  #define SW_MONITOR_RING_MPDU_FRAGMENT_NUMBER_MSB                                    10
262  #define SW_MONITOR_RING_MPDU_FRAGMENT_NUMBER_MASK                                   0x00000780
263  
264  
265  
266  
267  #define SW_MONITOR_RING_FRAMELESS_BAR_OFFSET                                        0x00000018
268  #define SW_MONITOR_RING_FRAMELESS_BAR_LSB                                           11
269  #define SW_MONITOR_RING_FRAMELESS_BAR_MSB                                           11
270  #define SW_MONITOR_RING_FRAMELESS_BAR_MASK                                          0x00000800
271  
272  
273  
274  
275  #define SW_MONITOR_RING_STATUS_BUF_COUNT_OFFSET                                     0x00000018
276  #define SW_MONITOR_RING_STATUS_BUF_COUNT_LSB                                        12
277  #define SW_MONITOR_RING_STATUS_BUF_COUNT_MSB                                        15
278  #define SW_MONITOR_RING_STATUS_BUF_COUNT_MASK                                       0x0000f000
279  
280  
281  
282  
283  #define SW_MONITOR_RING_END_OF_PPDU_OFFSET                                          0x00000018
284  #define SW_MONITOR_RING_END_OF_PPDU_LSB                                             16
285  #define SW_MONITOR_RING_END_OF_PPDU_MSB                                             16
286  #define SW_MONITOR_RING_END_OF_PPDU_MASK                                            0x00010000
287  
288  
289  
290  
291  #define SW_MONITOR_RING_RESERVED_6A_OFFSET                                          0x00000018
292  #define SW_MONITOR_RING_RESERVED_6A_LSB                                             17
293  #define SW_MONITOR_RING_RESERVED_6A_MSB                                             31
294  #define SW_MONITOR_RING_RESERVED_6A_MASK                                            0xfffe0000
295  
296  
297  
298  
299  #define SW_MONITOR_RING_PHY_PPDU_ID_OFFSET                                          0x0000001c
300  #define SW_MONITOR_RING_PHY_PPDU_ID_LSB                                             0
301  #define SW_MONITOR_RING_PHY_PPDU_ID_MSB                                             15
302  #define SW_MONITOR_RING_PHY_PPDU_ID_MASK                                            0x0000ffff
303  
304  
305  
306  
307  #define SW_MONITOR_RING_RESERVED_7A_OFFSET                                          0x0000001c
308  #define SW_MONITOR_RING_RESERVED_7A_LSB                                             16
309  #define SW_MONITOR_RING_RESERVED_7A_MSB                                             19
310  #define SW_MONITOR_RING_RESERVED_7A_MASK                                            0x000f0000
311  
312  
313  
314  
315  #define SW_MONITOR_RING_RING_ID_OFFSET                                              0x0000001c
316  #define SW_MONITOR_RING_RING_ID_LSB                                                 20
317  #define SW_MONITOR_RING_RING_ID_MSB                                                 27
318  #define SW_MONITOR_RING_RING_ID_MASK                                                0x0ff00000
319  
320  
321  
322  
323  #define SW_MONITOR_RING_LOOPING_COUNT_OFFSET                                        0x0000001c
324  #define SW_MONITOR_RING_LOOPING_COUNT_LSB                                           28
325  #define SW_MONITOR_RING_LOOPING_COUNT_MSB                                           31
326  #define SW_MONITOR_RING_LOOPING_COUNT_MASK                                          0xf0000000
327  
328  
329  
330  #endif
331