1  /*
2   * Copyright (c) 2019, The Linux Foundation. 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 _RXPT_CLASSIFY_INFO_H_
18  #define _RXPT_CLASSIFY_INFO_H_
19  #if !defined(__ASSEMBLER__)
20  #endif
21  
22  
23  // ################ START SUMMARY #################
24  //
25  //	Dword	Fields
26  //	0	reo_destination_indication[4:0], lmac_peer_id_msb[6:5], use_flow_id_toeplitz_clfy[7], pkt_selection_fp_ucast_data[8], pkt_selection_fp_mcast_data[9], pkt_selection_fp_1000[10], rxdma0_source_ring_selection[12:11], rxdma0_destination_ring_selection[14:13], reserved_0b[31:15]
27  //
28  // ################ END SUMMARY #################
29  
30  #define NUM_OF_DWORDS_RXPT_CLASSIFY_INFO 1
31  
32  struct rxpt_classify_info {
33               uint32_t reo_destination_indication      :  5, //[4:0]
34                        lmac_peer_id_msb                :  2, //[6:5]
35                        use_flow_id_toeplitz_clfy       :  1, //[7]
36                        pkt_selection_fp_ucast_data     :  1, //[8]
37                        pkt_selection_fp_mcast_data     :  1, //[9]
38                        pkt_selection_fp_1000           :  1, //[10]
39                        rxdma0_source_ring_selection    :  2, //[12:11]
40                        rxdma0_destination_ring_selection:  2, //[14:13]
41                        reserved_0b                     : 17; //[31:15]
42  };
43  
44  /*
45  
46  reo_destination_indication
47  
48  			The ID of the REO exit ring where the MSDU frame shall
49  			push after (MPDU level) reordering has finished.
50  
51  
52  
53  			<enum 0 reo_destination_tcl> Reo will push the frame
54  			into the REO2TCL ring
55  
56  			<enum 1 reo_destination_sw1> Reo will push the frame
57  			into the REO2SW1 ring
58  
59  			<enum 2 reo_destination_sw2> Reo will push the frame
60  			into the REO2SW2 ring
61  
62  			<enum 3 reo_destination_sw3> Reo will push the frame
63  			into the REO2SW3 ring
64  
65  			<enum 4 reo_destination_sw4> Reo will push the frame
66  			into the REO2SW4 ring
67  
68  			<enum 5 reo_destination_release> Reo will push the frame
69  			into the REO_release ring
70  
71  			<enum 6 reo_destination_fw> Reo will push the frame into
72  			the REO2FW ring
73  
74  			<enum 7 reo_destination_sw5> Reo will push the frame
75  			into the REO2SW5 ring (REO remaps this in chips without
76  			REO2SW5 ring, e.g. Pine)
77  
78  			<enum 8 reo_destination_sw6> Reo will push the frame
79  			into the REO2SW6 ring (REO remaps this in chips without
80  			REO2SW6 ring, e.g. Pine)
81  
82  			<enum 9 reo_destination_9> REO remaps this <enum 10
83  			reo_destination_10> REO remaps this
84  
85  			<enum 11 reo_destination_11> REO remaps this
86  
87  			<enum 12 reo_destination_12> REO remaps this <enum 13
88  			reo_destination_13> REO remaps this
89  
90  			<enum 14 reo_destination_14> REO remaps this
91  
92  			<enum 15 reo_destination_15> REO remaps this
93  
94  			<enum 16 reo_destination_16> REO remaps this
95  
96  			<enum 17 reo_destination_17> REO remaps this
97  
98  			<enum 18 reo_destination_18> REO remaps this
99  
100  			<enum 19 reo_destination_19> REO remaps this
101  
102  			<enum 20 reo_destination_20> REO remaps this
103  
104  			<enum 21 reo_destination_21> REO remaps this
105  
106  			<enum 22 reo_destination_22> REO remaps this
107  
108  			<enum 23 reo_destination_23> REO remaps this
109  
110  			<enum 24 reo_destination_24> REO remaps this
111  
112  			<enum 25 reo_destination_25> REO remaps this
113  
114  			<enum 26 reo_destination_26> REO remaps this
115  
116  			<enum 27 reo_destination_27> REO remaps this
117  
118  			<enum 28 reo_destination_28> REO remaps this
119  
120  			<enum 29 reo_destination_29> REO remaps this
121  
122  			<enum 30 reo_destination_30> REO remaps this
123  
124  			<enum 31 reo_destination_31> REO remaps this
125  
126  
127  
128  			<legal all>
129  
130  lmac_peer_id_msb
131  
132  			If use_flow_id_toeplitz_clfy is set and lmac_peer_id_'sb
133  			is 2'b00, Rx OLE uses a REO desination indicati'n of {1'b1,
134  			hash[3:0]} using the chosen Toeplitz hash from Common Parser
135  			if flow search fails.
136  
137  			If use_flow_id_toeplitz_clfy is set and lmac_peer_id_msb
138  			's not 2'b00, Rx OLE uses a REO desination indication of
139  			{lmac_peer_id_msb, hash[2:0]} using the chosen Toeplitz hash
140  			from Common Parser if flow search fails.
141  
142  			This LMAC/peer-based routing is not supported in
143  			Hastings80 and HastingsPrime.
144  
145  			<legal 0>
146  
147  use_flow_id_toeplitz_clfy
148  
149  			Indication to Rx OLE to enable REO destination routing
150  			based on the chosen Toeplitz hash from Common Parser, in
151  			case flow search fails
152  
153  			<legal all>
154  
155  pkt_selection_fp_ucast_data
156  
157  			Filter pass Unicast data frame (matching
158  			rxpcu_filter_pass and sw_frame_group_Unicast_data) routing
159  			selection
160  
161  
162  
163  			1'b0: source and destination rings are selected from the
164  			RxOLE register settings for the packet type
165  
166  
167  
168  			1'b1: source ring and destination ring is selected from
169  			the rxdma0_source_ring_selection and
170  			rxdma0_destination_ring_selection fields in this STRUCT
171  
172  			<legal all>
173  
174  pkt_selection_fp_mcast_data
175  
176  			Filter pass Multicast data frame (matching
177  			rxpcu_filter_pass and sw_frame_group_Multicast_data) routing
178  			selection
179  
180  
181  
182  			1'b0: source and destination rings are selected from the
183  			RxOLE register settings for the packet type
184  
185  
186  
187  			1'b1: source ring and destination ring is selected from
188  			the rxdma0_source_ring_selection and
189  			rxdma0_destination_ring_selection fields in this STRUCT
190  
191  			<legal all>
192  
193  pkt_selection_fp_1000
194  
195  			Filter pass BAR frame (matching rxpcu_filter_pass and
196  			sw_frame_group_ctrl_1000) routing selection
197  
198  
199  
200  			1'b0: source and destination rings are selected from the
201  			RxOLE register settings for the packet type
202  
203  
204  
205  			1'b1: source ring and destination ring is selected from
206  			the rxdma0_source_ring_selection and
207  			rxdma0_destination_ring_selection fields in this STRUCT
208  
209  			<legal all>
210  
211  rxdma0_source_ring_selection
212  
213  			Field only valid when for the received frame type the
214  			corresponding pkt_selection_fp_... bit is set
215  
216  
217  
218  			<enum 0 wbm2rxdma_buf_source_ring> The data buffer for
219  
220  			<enum 1 fw2rxdma_buf_source_ring> The data buffer for
221  			this frame shall be sourced by fw2rxdma buffer source ring.
222  
223  			<enum 2 sw2rxdma_buf_source_ring> The data buffer for
224  			this frame shall be sourced by sw2rxdma buffer source ring.
225  
226  			<enum 3 no_buffer_ring> The frame shall not be written
227  			to any data buffer.
228  
229  
230  
231  			<legal all>
232  
233  rxdma0_destination_ring_selection
234  
235  			Field only valid when for the received frame type the
236  			corresponding pkt_selection_fp_... bit is set
237  
238  
239  
240  			<enum 0  rxdma_release_ring> RXDMA0 shall push the frame
241  			to the Release ring. Effectively this means the frame needs
242  			to be dropped.
243  
244  			<enum 1  rxdma2fw_ring> RXDMA0 shall push the frame to
245  			the FW ring.
246  
247  			<enum 2  rxdma2sw_ring> RXDMA0 shall push the frame to
248  			the SW ring.
249  
250  			<enum 3  rxdma2reo_ring> RXDMA0 shall push the frame to
251  			the REO entrance ring.
252  
253  
254  
255  			<legal all>
256  
257  reserved_0b
258  
259  			<legal 0>
260  */
261  
262  
263  /* Description		RXPT_CLASSIFY_INFO_0_REO_DESTINATION_INDICATION
264  
265  			The ID of the REO exit ring where the MSDU frame shall
266  			push after (MPDU level) reordering has finished.
267  
268  
269  
270  			<enum 0 reo_destination_tcl> Reo will push the frame
271  			into the REO2TCL ring
272  
273  			<enum 1 reo_destination_sw1> Reo will push the frame
274  			into the REO2SW1 ring
275  
276  			<enum 2 reo_destination_sw2> Reo will push the frame
277  			into the REO2SW2 ring
278  
279  			<enum 3 reo_destination_sw3> Reo will push the frame
280  			into the REO2SW3 ring
281  
282  			<enum 4 reo_destination_sw4> Reo will push the frame
283  			into the REO2SW4 ring
284  
285  			<enum 5 reo_destination_release> Reo will push the frame
286  			into the REO_release ring
287  
288  			<enum 6 reo_destination_fw> Reo will push the frame into
289  			the REO2FW ring
290  
291  			<enum 7 reo_destination_sw5> Reo will push the frame
292  			into the REO2SW5 ring (REO remaps this in chips without
293  			REO2SW5 ring, e.g. Pine)
294  
295  			<enum 8 reo_destination_sw6> Reo will push the frame
296  			into the REO2SW6 ring (REO remaps this in chips without
297  			REO2SW6 ring, e.g. Pine)
298  
299  			<enum 9 reo_destination_9> REO remaps this <enum 10
300  			reo_destination_10> REO remaps this
301  
302  			<enum 11 reo_destination_11> REO remaps this
303  
304  			<enum 12 reo_destination_12> REO remaps this <enum 13
305  			reo_destination_13> REO remaps this
306  
307  			<enum 14 reo_destination_14> REO remaps this
308  
309  			<enum 15 reo_destination_15> REO remaps this
310  
311  			<enum 16 reo_destination_16> REO remaps this
312  
313  			<enum 17 reo_destination_17> REO remaps this
314  
315  			<enum 18 reo_destination_18> REO remaps this
316  
317  			<enum 19 reo_destination_19> REO remaps this
318  
319  			<enum 20 reo_destination_20> REO remaps this
320  
321  			<enum 21 reo_destination_21> REO remaps this
322  
323  			<enum 22 reo_destination_22> REO remaps this
324  
325  			<enum 23 reo_destination_23> REO remaps this
326  
327  			<enum 24 reo_destination_24> REO remaps this
328  
329  			<enum 25 reo_destination_25> REO remaps this
330  
331  			<enum 26 reo_destination_26> REO remaps this
332  
333  			<enum 27 reo_destination_27> REO remaps this
334  
335  			<enum 28 reo_destination_28> REO remaps this
336  
337  			<enum 29 reo_destination_29> REO remaps this
338  
339  			<enum 30 reo_destination_30> REO remaps this
340  
341  			<enum 31 reo_destination_31> REO remaps this
342  
343  
344  
345  			<legal all>
346  */
347  #define RXPT_CLASSIFY_INFO_0_REO_DESTINATION_INDICATION_OFFSET       0x00000000
348  #define RXPT_CLASSIFY_INFO_0_REO_DESTINATION_INDICATION_LSB          0
349  #define RXPT_CLASSIFY_INFO_0_REO_DESTINATION_INDICATION_MASK         0x0000001f
350  
351  /* Description		RXPT_CLASSIFY_INFO_0_LMAC_PEER_ID_MSB
352  
353  			If use_flow_id_toeplitz_clfy is set and lmac_peer_id_'sb
354  			is 2'b00, Rx OLE uses a REO desination indicati'n of {1'b1,
355  			hash[3:0]} using the chosen Toeplitz hash from Common Parser
356  			if flow search fails.
357  
358  			If use_flow_id_toeplitz_clfy is set and lmac_peer_id_msb
359  			's not 2'b00, Rx OLE uses a REO desination indication of
360  			{lmac_peer_id_msb, hash[2:0]} using the chosen Toeplitz hash
361  			from Common Parser if flow search fails.
362  
363  			This LMAC/peer-based routing is not supported in
364  			Hastings80 and HastingsPrime.
365  
366  			<legal 0>
367  */
368  #define RXPT_CLASSIFY_INFO_0_LMAC_PEER_ID_MSB_OFFSET                 0x00000000
369  #define RXPT_CLASSIFY_INFO_0_LMAC_PEER_ID_MSB_LSB                    5
370  #define RXPT_CLASSIFY_INFO_0_LMAC_PEER_ID_MSB_MASK                   0x00000060
371  
372  /* Description		RXPT_CLASSIFY_INFO_0_USE_FLOW_ID_TOEPLITZ_CLFY
373  
374  			Indication to Rx OLE to enable REO destination routing
375  			based on the chosen Toeplitz hash from Common Parser, in
376  			case flow search fails
377  
378  			<legal all>
379  */
380  #define RXPT_CLASSIFY_INFO_0_USE_FLOW_ID_TOEPLITZ_CLFY_OFFSET        0x00000000
381  #define RXPT_CLASSIFY_INFO_0_USE_FLOW_ID_TOEPLITZ_CLFY_LSB           7
382  #define RXPT_CLASSIFY_INFO_0_USE_FLOW_ID_TOEPLITZ_CLFY_MASK          0x00000080
383  
384  /* Description		RXPT_CLASSIFY_INFO_0_PKT_SELECTION_FP_UCAST_DATA
385  
386  			Filter pass Unicast data frame (matching
387  			rxpcu_filter_pass and sw_frame_group_Unicast_data) routing
388  			selection
389  
390  
391  
392  			1'b0: source and destination rings are selected from the
393  			RxOLE register settings for the packet type
394  
395  
396  
397  			1'b1: source ring and destination ring is selected from
398  			the rxdma0_source_ring_selection and
399  			rxdma0_destination_ring_selection fields in this STRUCT
400  
401  			<legal all>
402  */
403  #define RXPT_CLASSIFY_INFO_0_PKT_SELECTION_FP_UCAST_DATA_OFFSET      0x00000000
404  #define RXPT_CLASSIFY_INFO_0_PKT_SELECTION_FP_UCAST_DATA_LSB         8
405  #define RXPT_CLASSIFY_INFO_0_PKT_SELECTION_FP_UCAST_DATA_MASK        0x00000100
406  
407  /* Description		RXPT_CLASSIFY_INFO_0_PKT_SELECTION_FP_MCAST_DATA
408  
409  			Filter pass Multicast data frame (matching
410  			rxpcu_filter_pass and sw_frame_group_Multicast_data) routing
411  			selection
412  
413  
414  
415  			1'b0: source and destination rings are selected from the
416  			RxOLE register settings for the packet type
417  
418  
419  
420  			1'b1: source ring and destination ring is selected from
421  			the rxdma0_source_ring_selection and
422  			rxdma0_destination_ring_selection fields in this STRUCT
423  
424  			<legal all>
425  */
426  #define RXPT_CLASSIFY_INFO_0_PKT_SELECTION_FP_MCAST_DATA_OFFSET      0x00000000
427  #define RXPT_CLASSIFY_INFO_0_PKT_SELECTION_FP_MCAST_DATA_LSB         9
428  #define RXPT_CLASSIFY_INFO_0_PKT_SELECTION_FP_MCAST_DATA_MASK        0x00000200
429  
430  /* Description		RXPT_CLASSIFY_INFO_0_PKT_SELECTION_FP_1000
431  
432  			Filter pass BAR frame (matching rxpcu_filter_pass and
433  			sw_frame_group_ctrl_1000) routing selection
434  
435  
436  
437  			1'b0: source and destination rings are selected from the
438  			RxOLE register settings for the packet type
439  
440  
441  
442  			1'b1: source ring and destination ring is selected from
443  			the rxdma0_source_ring_selection and
444  			rxdma0_destination_ring_selection fields in this STRUCT
445  
446  			<legal all>
447  */
448  #define RXPT_CLASSIFY_INFO_0_PKT_SELECTION_FP_1000_OFFSET            0x00000000
449  #define RXPT_CLASSIFY_INFO_0_PKT_SELECTION_FP_1000_LSB               10
450  #define RXPT_CLASSIFY_INFO_0_PKT_SELECTION_FP_1000_MASK              0x00000400
451  
452  /* Description		RXPT_CLASSIFY_INFO_0_RXDMA0_SOURCE_RING_SELECTION
453  
454  			Field only valid when for the received frame type the
455  			corresponding pkt_selection_fp_... bit is set
456  
457  
458  
459  			<enum 0 wbm2rxdma_buf_source_ring> The data buffer for
460  
461  			<enum 1 fw2rxdma_buf_source_ring> The data buffer for
462  			this frame shall be sourced by fw2rxdma buffer source ring.
463  
464  			<enum 2 sw2rxdma_buf_source_ring> The data buffer for
465  			this frame shall be sourced by sw2rxdma buffer source ring.
466  
467  			<enum 3 no_buffer_ring> The frame shall not be written
468  			to any data buffer.
469  
470  
471  
472  			<legal all>
473  */
474  #define RXPT_CLASSIFY_INFO_0_RXDMA0_SOURCE_RING_SELECTION_OFFSET     0x00000000
475  #define RXPT_CLASSIFY_INFO_0_RXDMA0_SOURCE_RING_SELECTION_LSB        11
476  #define RXPT_CLASSIFY_INFO_0_RXDMA0_SOURCE_RING_SELECTION_MASK       0x00001800
477  
478  /* Description		RXPT_CLASSIFY_INFO_0_RXDMA0_DESTINATION_RING_SELECTION
479  
480  			Field only valid when for the received frame type the
481  			corresponding pkt_selection_fp_... bit is set
482  
483  
484  
485  			<enum 0  rxdma_release_ring> RXDMA0 shall push the frame
486  			to the Release ring. Effectively this means the frame needs
487  			to be dropped.
488  
489  			<enum 1  rxdma2fw_ring> RXDMA0 shall push the frame to
490  			the FW ring.
491  
492  			<enum 2  rxdma2sw_ring> RXDMA0 shall push the frame to
493  			the SW ring.
494  
495  			<enum 3  rxdma2reo_ring> RXDMA0 shall push the frame to
496  			the REO entrance ring.
497  
498  
499  
500  			<legal all>
501  */
502  #define RXPT_CLASSIFY_INFO_0_RXDMA0_DESTINATION_RING_SELECTION_OFFSET 0x00000000
503  #define RXPT_CLASSIFY_INFO_0_RXDMA0_DESTINATION_RING_SELECTION_LSB   13
504  #define RXPT_CLASSIFY_INFO_0_RXDMA0_DESTINATION_RING_SELECTION_MASK  0x00006000
505  
506  /* Description		RXPT_CLASSIFY_INFO_0_RESERVED_0B
507  
508  			<legal 0>
509  */
510  #define RXPT_CLASSIFY_INFO_0_RESERVED_0B_OFFSET                      0x00000000
511  #define RXPT_CLASSIFY_INFO_0_RESERVED_0B_LSB                         15
512  #define RXPT_CLASSIFY_INFO_0_RESERVED_0B_MASK                        0xffff8000
513  
514  
515  #endif // _RXPT_CLASSIFY_INFO_H_
516