xref: /wlan-driver/fw-api/hw/qcn6432/rx_flow_search_entry.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
3*5113495bSYour Name  *
4*5113495bSYour Name  * Permission to use, copy, modify, and/or distribute this software for any
5*5113495bSYour Name  * purpose with or without fee is hereby granted, provided that the above
6*5113495bSYour Name  * copyright notice and this permission notice appear in all copies.
7*5113495bSYour Name  *
8*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9*5113495bSYour Name  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10*5113495bSYour Name  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11*5113495bSYour Name  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12*5113495bSYour Name  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13*5113495bSYour Name  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14*5113495bSYour Name  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15*5113495bSYour Name  */
16*5113495bSYour Name 
17*5113495bSYour Name #ifndef _RX_FLOW_SEARCH_ENTRY_H_
18*5113495bSYour Name #define _RX_FLOW_SEARCH_ENTRY_H_
19*5113495bSYour Name #if !defined(__ASSEMBLER__)
20*5113495bSYour Name #endif
21*5113495bSYour Name 
22*5113495bSYour Name #define NUM_OF_DWORDS_RX_FLOW_SEARCH_ENTRY 16
23*5113495bSYour Name 
24*5113495bSYour Name 
25*5113495bSYour Name struct rx_flow_search_entry {
26*5113495bSYour Name #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
27*5113495bSYour Name              uint32_t src_ip_127_96                                           : 32; // [31:0]
28*5113495bSYour Name              uint32_t src_ip_95_64                                            : 32; // [31:0]
29*5113495bSYour Name              uint32_t src_ip_63_32                                            : 32; // [31:0]
30*5113495bSYour Name              uint32_t src_ip_31_0                                             : 32; // [31:0]
31*5113495bSYour Name              uint32_t dest_ip_127_96                                          : 32; // [31:0]
32*5113495bSYour Name              uint32_t dest_ip_95_64                                           : 32; // [31:0]
33*5113495bSYour Name              uint32_t dest_ip_63_32                                           : 32; // [31:0]
34*5113495bSYour Name              uint32_t dest_ip_31_0                                            : 32; // [31:0]
35*5113495bSYour Name              uint32_t src_port                                                : 16, // [15:0]
36*5113495bSYour Name                       dest_port                                               : 16; // [31:16]
37*5113495bSYour Name              uint32_t l4_protocol                                             :  8, // [7:0]
38*5113495bSYour Name                       valid                                                   :  1, // [8:8]
39*5113495bSYour Name                       reserved_9                                              :  4, // [12:9]
40*5113495bSYour Name                       service_code                                            :  9, // [21:13]
41*5113495bSYour Name                       priority_valid                                          :  1, // [22:22]
42*5113495bSYour Name                       use_ppe                                                 :  1, // [23:23]
43*5113495bSYour Name                       reo_destination_indication                              :  5, // [28:24]
44*5113495bSYour Name                       msdu_drop                                               :  1, // [29:29]
45*5113495bSYour Name                       reo_destination_handler                                 :  2; // [31:30]
46*5113495bSYour Name              uint32_t metadata                                                : 32; // [31:0]
47*5113495bSYour Name              uint32_t aggregation_count                                       :  7, // [6:0]
48*5113495bSYour Name                       lro_eligible                                            :  1, // [7:7]
49*5113495bSYour Name                       msdu_count                                              : 24; // [31:8]
50*5113495bSYour Name              uint32_t msdu_byte_count                                         : 32; // [31:0]
51*5113495bSYour Name              uint32_t timestamp                                               : 32; // [31:0]
52*5113495bSYour Name              uint32_t cumulative_ip_length_pmac1                              : 16, // [15:0]
53*5113495bSYour Name                       cumulative_ip_length                                    : 16; // [31:16]
54*5113495bSYour Name              uint32_t tcp_sequence_number                                     : 32; // [31:0]
55*5113495bSYour Name #else
56*5113495bSYour Name              uint32_t src_ip_127_96                                           : 32; // [31:0]
57*5113495bSYour Name              uint32_t src_ip_95_64                                            : 32; // [31:0]
58*5113495bSYour Name              uint32_t src_ip_63_32                                            : 32; // [31:0]
59*5113495bSYour Name              uint32_t src_ip_31_0                                             : 32; // [31:0]
60*5113495bSYour Name              uint32_t dest_ip_127_96                                          : 32; // [31:0]
61*5113495bSYour Name              uint32_t dest_ip_95_64                                           : 32; // [31:0]
62*5113495bSYour Name              uint32_t dest_ip_63_32                                           : 32; // [31:0]
63*5113495bSYour Name              uint32_t dest_ip_31_0                                            : 32; // [31:0]
64*5113495bSYour Name              uint32_t dest_port                                               : 16, // [31:16]
65*5113495bSYour Name                       src_port                                                : 16; // [15:0]
66*5113495bSYour Name              uint32_t reo_destination_handler                                 :  2, // [31:30]
67*5113495bSYour Name                       msdu_drop                                               :  1, // [29:29]
68*5113495bSYour Name                       reo_destination_indication                              :  5, // [28:24]
69*5113495bSYour Name                       use_ppe                                                 :  1, // [23:23]
70*5113495bSYour Name                       priority_valid                                          :  1, // [22:22]
71*5113495bSYour Name                       service_code                                            :  9, // [21:13]
72*5113495bSYour Name                       reserved_9                                              :  4, // [12:9]
73*5113495bSYour Name                       valid                                                   :  1, // [8:8]
74*5113495bSYour Name                       l4_protocol                                             :  8; // [7:0]
75*5113495bSYour Name              uint32_t metadata                                                : 32; // [31:0]
76*5113495bSYour Name              uint32_t msdu_count                                              : 24, // [31:8]
77*5113495bSYour Name                       lro_eligible                                            :  1, // [7:7]
78*5113495bSYour Name                       aggregation_count                                       :  7; // [6:0]
79*5113495bSYour Name              uint32_t msdu_byte_count                                         : 32; // [31:0]
80*5113495bSYour Name              uint32_t timestamp                                               : 32; // [31:0]
81*5113495bSYour Name              uint32_t cumulative_ip_length                                    : 16, // [31:16]
82*5113495bSYour Name                       cumulative_ip_length_pmac1                              : 16; // [15:0]
83*5113495bSYour Name              uint32_t tcp_sequence_number                                     : 32; // [31:0]
84*5113495bSYour Name #endif
85*5113495bSYour Name };
86*5113495bSYour Name 
87*5113495bSYour Name 
88*5113495bSYour Name /* Description		SRC_IP_127_96
89*5113495bSYour Name 
90*5113495bSYour Name 			Uppermost 32 bits of source IPv6 address or prefix as per
91*5113495bSYour Name 			 Common Parser register field IP_DA_SA_PREFIX (with the
92*5113495bSYour Name 			first byte in the MSB and the last byte in the LSB, i.e.
93*5113495bSYour Name 			requiring a byte-swap for little-endian SW w.r.t. the byte
94*5113495bSYour Name 			 order in an IPv6 packet)
95*5113495bSYour Name 			<legal all>
96*5113495bSYour Name */
97*5113495bSYour Name 
98*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_SRC_IP_127_96_OFFSET                                   0x00000000
99*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_SRC_IP_127_96_LSB                                      0
100*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_SRC_IP_127_96_MSB                                      31
101*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_SRC_IP_127_96_MASK                                     0xffffffff
102*5113495bSYour Name 
103*5113495bSYour Name 
104*5113495bSYour Name /* Description		SRC_IP_95_64
105*5113495bSYour Name 
106*5113495bSYour Name 			Next 32 bits of source IPv6 address or prefix (requiring
107*5113495bSYour Name 			 a byte-swap for little-endian SW) <legal all>
108*5113495bSYour Name */
109*5113495bSYour Name 
110*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_SRC_IP_95_64_OFFSET                                    0x00000004
111*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_SRC_IP_95_64_LSB                                       0
112*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_SRC_IP_95_64_MSB                                       31
113*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_SRC_IP_95_64_MASK                                      0xffffffff
114*5113495bSYour Name 
115*5113495bSYour Name 
116*5113495bSYour Name /* Description		SRC_IP_63_32
117*5113495bSYour Name 
118*5113495bSYour Name 			Next 32 bits of source IPv6 address or lowest 32 bits of
119*5113495bSYour Name 			 prefix (requiring a byte-swap for little-endian SW)
120*5113495bSYour Name 			<legal all>
121*5113495bSYour Name */
122*5113495bSYour Name 
123*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_SRC_IP_63_32_OFFSET                                    0x00000008
124*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_SRC_IP_63_32_LSB                                       0
125*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_SRC_IP_63_32_MSB                                       31
126*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_SRC_IP_63_32_MASK                                      0xffffffff
127*5113495bSYour Name 
128*5113495bSYour Name 
129*5113495bSYour Name /* Description		SRC_IP_31_0
130*5113495bSYour Name 
131*5113495bSYour Name 			Lowest 32 bits of source IPv6 address, or source IPv4 address
132*5113495bSYour Name 			 (requiring a byte-swap for little-endian SW w.r.t. the
133*5113495bSYour Name 			byte order in an IPv6 or IPv4 packet)
134*5113495bSYour Name 			<legal all>
135*5113495bSYour Name */
136*5113495bSYour Name 
137*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_SRC_IP_31_0_OFFSET                                     0x0000000c
138*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_SRC_IP_31_0_LSB                                        0
139*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_SRC_IP_31_0_MSB                                        31
140*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_SRC_IP_31_0_MASK                                       0xffffffff
141*5113495bSYour Name 
142*5113495bSYour Name 
143*5113495bSYour Name /* Description		DEST_IP_127_96
144*5113495bSYour Name 
145*5113495bSYour Name 			Uppermost 32 bits of destination IPv6 address or prefix
146*5113495bSYour Name 			as per Common Parser register field IP_DA_SA_PREFIX (with
147*5113495bSYour Name 			 the first byte in the MSB and the last byte in the LSB,
148*5113495bSYour Name 			i.e. requiring a byte-swap for little-endian SW w.r.t. the
149*5113495bSYour Name 			 byte order as in an IPv6 packet)
150*5113495bSYour Name 			<legal all>
151*5113495bSYour Name */
152*5113495bSYour Name 
153*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_DEST_IP_127_96_OFFSET                                  0x00000010
154*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_DEST_IP_127_96_LSB                                     0
155*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_DEST_IP_127_96_MSB                                     31
156*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_DEST_IP_127_96_MASK                                    0xffffffff
157*5113495bSYour Name 
158*5113495bSYour Name 
159*5113495bSYour Name /* Description		DEST_IP_95_64
160*5113495bSYour Name 
161*5113495bSYour Name 			Next 32 bits of destination IPv6 address or prefix (requiring
162*5113495bSYour Name 			 a byte-swap for little-endian SW)
163*5113495bSYour Name 			<legal all>
164*5113495bSYour Name */
165*5113495bSYour Name 
166*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_DEST_IP_95_64_OFFSET                                   0x00000014
167*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_DEST_IP_95_64_LSB                                      0
168*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_DEST_IP_95_64_MSB                                      31
169*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_DEST_IP_95_64_MASK                                     0xffffffff
170*5113495bSYour Name 
171*5113495bSYour Name 
172*5113495bSYour Name /* Description		DEST_IP_63_32
173*5113495bSYour Name 
174*5113495bSYour Name 			Next 32 bits of destination IPv6 address or lowest 32 bits
175*5113495bSYour Name 			 of prefix (requiring a byte-swap for little-endian SW)
176*5113495bSYour Name 			<legal all>
177*5113495bSYour Name */
178*5113495bSYour Name 
179*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_DEST_IP_63_32_OFFSET                                   0x00000018
180*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_DEST_IP_63_32_LSB                                      0
181*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_DEST_IP_63_32_MSB                                      31
182*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_DEST_IP_63_32_MASK                                     0xffffffff
183*5113495bSYour Name 
184*5113495bSYour Name 
185*5113495bSYour Name /* Description		DEST_IP_31_0
186*5113495bSYour Name 
187*5113495bSYour Name 			Lowest 32 bits of destination IPv6 address, or destination
188*5113495bSYour Name 			 IPv4 address (requiring a byte-swap for little-endian SW
189*5113495bSYour Name 			 w.r.t. the byte order in an IPv6 or IPv4 packet)
190*5113495bSYour Name 			<legal all>
191*5113495bSYour Name */
192*5113495bSYour Name 
193*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_DEST_IP_31_0_OFFSET                                    0x0000001c
194*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_DEST_IP_31_0_LSB                                       0
195*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_DEST_IP_31_0_MSB                                       31
196*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_DEST_IP_31_0_MASK                                      0xffffffff
197*5113495bSYour Name 
198*5113495bSYour Name 
199*5113495bSYour Name /* Description		SRC_PORT
200*5113495bSYour Name 
201*5113495bSYour Name 			LSB of SPI in case of ESP/AH
202*5113495bSYour Name 			else source port in case of TCP/UDP without IPsec,
203*5113495bSYour Name 			else zeros in case of ICMP (with the first/third byte in
204*5113495bSYour Name 			 the MSB and the second/fourth byte in the LSB, i.e. requiring
205*5113495bSYour Name 			 a byte-swap for little-endian SW w.r.t. the byte order
206*5113495bSYour Name 			as in an IPv6 or IPv4 packet)  <legal all>
207*5113495bSYour Name */
208*5113495bSYour Name 
209*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_SRC_PORT_OFFSET                                        0x00000020
210*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_SRC_PORT_LSB                                           0
211*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_SRC_PORT_MSB                                           15
212*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_SRC_PORT_MASK                                          0x0000ffff
213*5113495bSYour Name 
214*5113495bSYour Name 
215*5113495bSYour Name /* Description		DEST_PORT
216*5113495bSYour Name 
217*5113495bSYour Name 			MSB of SPI in case of ESP/AH
218*5113495bSYour Name 			else destination port in case of TCP/UDP without IPsec,
219*5113495bSYour Name 			else zeros in case of ICMP (with the first byte in the MSB
220*5113495bSYour Name 			 and the second byte in the LSB, i.e. requiring a byte-swap
221*5113495bSYour Name 			 for little-endian SW w.r.t. the byte order as in an IPv6
222*5113495bSYour Name 			 or IPv4 packet)
223*5113495bSYour Name 			<legal all>
224*5113495bSYour Name */
225*5113495bSYour Name 
226*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_DEST_PORT_OFFSET                                       0x00000020
227*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_DEST_PORT_LSB                                          16
228*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_DEST_PORT_MSB                                          31
229*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_DEST_PORT_MASK                                         0xffff0000
230*5113495bSYour Name 
231*5113495bSYour Name 
232*5113495bSYour Name /* Description		L4_PROTOCOL
233*5113495bSYour Name 
234*5113495bSYour Name 			IPsec or L4 protocol
235*5113495bSYour Name 
236*5113495bSYour Name 			<enum 1 ICMPV4>
237*5113495bSYour Name 			<enum 6 TCP>
238*5113495bSYour Name 			<enum 17 UDP>
239*5113495bSYour Name 			<enum 50 ESP>
240*5113495bSYour Name 			<enum 51 AH>
241*5113495bSYour Name 			<enum 58 ICMPV6>
242*5113495bSYour Name 			<legal 1, 6, 17, 50, 51, 58>
243*5113495bSYour Name */
244*5113495bSYour Name 
245*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_L4_PROTOCOL_OFFSET                                     0x00000024
246*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_L4_PROTOCOL_LSB                                        0
247*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_L4_PROTOCOL_MSB                                        7
248*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_L4_PROTOCOL_MASK                                       0x000000ff
249*5113495bSYour Name 
250*5113495bSYour Name 
251*5113495bSYour Name /* Description		VALID
252*5113495bSYour Name 
253*5113495bSYour Name 			Indicates validity of entry
254*5113495bSYour Name 			<legal all>
255*5113495bSYour Name */
256*5113495bSYour Name 
257*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_VALID_OFFSET                                           0x00000024
258*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_VALID_LSB                                              8
259*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_VALID_MSB                                              8
260*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_VALID_MASK                                             0x00000100
261*5113495bSYour Name 
262*5113495bSYour Name 
263*5113495bSYour Name /* Description		RESERVED_9
264*5113495bSYour Name 
265*5113495bSYour Name 			<legal 0>
266*5113495bSYour Name */
267*5113495bSYour Name 
268*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_RESERVED_9_OFFSET                                      0x00000024
269*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_RESERVED_9_LSB                                         9
270*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_RESERVED_9_MSB                                         12
271*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_RESERVED_9_MASK                                        0x00001e00
272*5113495bSYour Name 
273*5113495bSYour Name 
274*5113495bSYour Name /* Description		SERVICE_CODE
275*5113495bSYour Name 
276*5113495bSYour Name 			Opaque service code between PPE and Wi-Fi
277*5113495bSYour Name 
278*5113495bSYour Name 			This field gets passed on by REO to PPE in the EDMA descriptor
279*5113495bSYour Name 			 ('REO_TO_PPE_RING').
280*5113495bSYour Name 
281*5113495bSYour Name 			<legal all>
282*5113495bSYour Name */
283*5113495bSYour Name 
284*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_SERVICE_CODE_OFFSET                                    0x00000024
285*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_SERVICE_CODE_LSB                                       13
286*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_SERVICE_CODE_MSB                                       21
287*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_SERVICE_CODE_MASK                                      0x003fe000
288*5113495bSYour Name 
289*5113495bSYour Name 
290*5113495bSYour Name /* Description		PRIORITY_VALID
291*5113495bSYour Name 
292*5113495bSYour Name 			This field gets passed on by REO to PPE in the EDMA descriptor
293*5113495bSYour Name 			 ('REO_TO_PPE_RING').
294*5113495bSYour Name 
295*5113495bSYour Name 			<legal all>
296*5113495bSYour Name */
297*5113495bSYour Name 
298*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_PRIORITY_VALID_OFFSET                                  0x00000024
299*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_PRIORITY_VALID_LSB                                     22
300*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_PRIORITY_VALID_MSB                                     22
301*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_PRIORITY_VALID_MASK                                    0x00400000
302*5113495bSYour Name 
303*5113495bSYour Name 
304*5113495bSYour Name /* Description		USE_PPE
305*5113495bSYour Name 
306*5113495bSYour Name 			Indicates to RXDMA to ignore the REO_destination_indication
307*5113495bSYour Name 			 and use a programmed value corresponding to the REO2PPE
308*5113495bSYour Name 			 ring
309*5113495bSYour Name 
310*5113495bSYour Name 			This override to REO2PPE for packets requiring multiple
311*5113495bSYour Name 			buffers shall be disabled based on an RXDMA configuration,
312*5113495bSYour Name 			as PPE may not support such packets.
313*5113495bSYour Name 
314*5113495bSYour Name 			<legal all>
315*5113495bSYour Name */
316*5113495bSYour Name 
317*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_USE_PPE_OFFSET                                         0x00000024
318*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_USE_PPE_LSB                                            23
319*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_USE_PPE_MSB                                            23
320*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_USE_PPE_MASK                                           0x00800000
321*5113495bSYour Name 
322*5113495bSYour Name 
323*5113495bSYour Name /* Description		REO_DESTINATION_INDICATION
324*5113495bSYour Name 
325*5113495bSYour Name 			The ID of the REO exit ring where the MSDU frame shall push
326*5113495bSYour Name 			 after (MPDU level) reordering has finished.
327*5113495bSYour Name 
328*5113495bSYour Name 			<enum 0 reo_destination_sw0> Reo will push the frame into
329*5113495bSYour Name 			 the REO2SW0 ring
330*5113495bSYour Name 			<enum 1 reo_destination_sw1> Reo will push the frame into
331*5113495bSYour Name 			 the REO2SW1 ring
332*5113495bSYour Name 			<enum 2 reo_destination_sw2> Reo will push the frame into
333*5113495bSYour Name 			 the REO2SW2 ring
334*5113495bSYour Name 			<enum 3 reo_destination_sw3> Reo will push the frame into
335*5113495bSYour Name 			 the REO2SW3 ring
336*5113495bSYour Name 			<enum 4 reo_destination_sw4> Reo will push the frame into
337*5113495bSYour Name 			 the REO2SW4 ring
338*5113495bSYour Name 			<enum 5 reo_destination_release> Reo will push the frame
339*5113495bSYour Name 			 into the REO_release ring
340*5113495bSYour Name 			<enum 6 reo_destination_fw> Reo will push the frame into
341*5113495bSYour Name 			 the REO2FW ring
342*5113495bSYour Name 			<enum 7 reo_destination_sw5> Reo will push the frame into
343*5113495bSYour Name 			 the REO2SW5 ring (REO remaps this in chips without REO2SW5
344*5113495bSYour Name 			 ring)
345*5113495bSYour Name 			<enum 8 reo_destination_sw6> Reo will push the frame into
346*5113495bSYour Name 			 the REO2SW6 ring (REO remaps this in chips without REO2SW6
347*5113495bSYour Name 			 ring)
348*5113495bSYour Name 			<enum 9 reo_destination_sw7> Reo will push the frame into
349*5113495bSYour Name 			 the REO2SW7 ring (REO remaps this in chips without REO2SW7
350*5113495bSYour Name 			 ring)
351*5113495bSYour Name 			<enum 10 reo_destination_sw8> Reo will push the frame into
352*5113495bSYour Name 			 the REO2SW8 ring (REO remaps this in chips without REO2SW8
353*5113495bSYour Name 			 ring)
354*5113495bSYour Name 			<enum 11 reo_destination_11> REO remaps this
355*5113495bSYour Name 			<enum 12 reo_destination_12> REO remaps this <enum 13 reo_destination_13>
356*5113495bSYour Name 			REO remaps this
357*5113495bSYour Name 			<enum 14 reo_destination_14> REO remaps this
358*5113495bSYour Name 			<enum 15 reo_destination_15> REO remaps this
359*5113495bSYour Name 			<enum 16 reo_destination_16> REO remaps this
360*5113495bSYour Name 			<enum 17 reo_destination_17> REO remaps this
361*5113495bSYour Name 			<enum 18 reo_destination_18> REO remaps this
362*5113495bSYour Name 			<enum 19 reo_destination_19> REO remaps this
363*5113495bSYour Name 			<enum 20 reo_destination_20> REO remaps this
364*5113495bSYour Name 			<enum 21 reo_destination_21> REO remaps this
365*5113495bSYour Name 			<enum 22 reo_destination_22> REO remaps this
366*5113495bSYour Name 			<enum 23 reo_destination_23> REO remaps this
367*5113495bSYour Name 			<enum 24 reo_destination_24> REO remaps this
368*5113495bSYour Name 			<enum 25 reo_destination_25> REO remaps this
369*5113495bSYour Name 			<enum 26 reo_destination_26> REO remaps this
370*5113495bSYour Name 			<enum 27 reo_destination_27> REO remaps this
371*5113495bSYour Name 			<enum 28 reo_destination_28> REO remaps this
372*5113495bSYour Name 			<enum 29 reo_destination_29> REO remaps this
373*5113495bSYour Name 			<enum 30 reo_destination_30> REO remaps this
374*5113495bSYour Name 			<enum 31 reo_destination_31> REO remaps this
375*5113495bSYour Name 
376*5113495bSYour Name 			<legal all>
377*5113495bSYour Name */
378*5113495bSYour Name 
379*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_REO_DESTINATION_INDICATION_OFFSET                      0x00000024
380*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_REO_DESTINATION_INDICATION_LSB                         24
381*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_REO_DESTINATION_INDICATION_MSB                         28
382*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_REO_DESTINATION_INDICATION_MASK                        0x1f000000
383*5113495bSYour Name 
384*5113495bSYour Name 
385*5113495bSYour Name /* Description		MSDU_DROP
386*5113495bSYour Name 
387*5113495bSYour Name 			Overriding indication to REO to forward to REO release ring
388*5113495bSYour Name 
389*5113495bSYour Name 			<legal all>
390*5113495bSYour Name */
391*5113495bSYour Name 
392*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_MSDU_DROP_OFFSET                                       0x00000024
393*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_MSDU_DROP_LSB                                          29
394*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_MSDU_DROP_MSB                                          29
395*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_MSDU_DROP_MASK                                         0x20000000
396*5113495bSYour Name 
397*5113495bSYour Name 
398*5113495bSYour Name /* Description		REO_DESTINATION_HANDLER
399*5113495bSYour Name 
400*5113495bSYour Name 			Indicates how to decide the REO destination indication
401*5113495bSYour Name 			<enum 0 RXFT_USE_FT> Follow this entry
402*5113495bSYour Name 			<enum 1 RXFT_USE_ASPT> Use address search+peer table entry
403*5113495bSYour Name 
404*5113495bSYour Name 			<enum 2 RXFT_USE_FT2> Follow this entry
405*5113495bSYour Name 			<enum 3 RXFT_USE_CCE> Use CCE super-rule
406*5113495bSYour Name 			<legal all>
407*5113495bSYour Name */
408*5113495bSYour Name 
409*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_REO_DESTINATION_HANDLER_OFFSET                         0x00000024
410*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_REO_DESTINATION_HANDLER_LSB                            30
411*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_REO_DESTINATION_HANDLER_MSB                            31
412*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_REO_DESTINATION_HANDLER_MASK                           0xc0000000
413*5113495bSYour Name 
414*5113495bSYour Name 
415*5113495bSYour Name /* Description		METADATA
416*5113495bSYour Name 
417*5113495bSYour Name 			Value to be passed to SW if this flow search entry matches
418*5113495bSYour Name 
419*5113495bSYour Name 			<legal all>
420*5113495bSYour Name */
421*5113495bSYour Name 
422*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_METADATA_OFFSET                                        0x00000028
423*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_METADATA_LSB                                           0
424*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_METADATA_MSB                                           31
425*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_METADATA_MASK                                          0xffffffff
426*5113495bSYour Name 
427*5113495bSYour Name 
428*5113495bSYour Name /* Description		AGGREGATION_COUNT
429*5113495bSYour Name 
430*5113495bSYour Name 			FISA: Number'of MSDU's aggregated so far
431*5113495bSYour Name 
432*5113495bSYour Name 			Based on an RXOLE register, this can be changed to reflect
433*5113495bSYour Name 			 aggregation of MSDUs from PMAC0 only.
434*5113495bSYour Name 
435*5113495bSYour Name 			Set to zero in chips not supporting FISA
436*5113495bSYour Name 			<legal all>
437*5113495bSYour Name */
438*5113495bSYour Name 
439*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_AGGREGATION_COUNT_OFFSET                               0x0000002c
440*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_AGGREGATION_COUNT_LSB                                  0
441*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_AGGREGATION_COUNT_MSB                                  6
442*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_AGGREGATION_COUNT_MASK                                 0x0000007f
443*5113495bSYour Name 
444*5113495bSYour Name 
445*5113495bSYour Name /* Description		LRO_ELIGIBLE
446*5113495bSYour Name 
447*5113495bSYour Name 			FISA:
448*5113495bSYour Name 			To indicate whether the previous MSDU for this flow is eligible
449*5113495bSYour Name 			 for LRO/FISA
450*5113495bSYour Name 
451*5113495bSYour Name 			Based on an RXOLE register, this can be changed to reflect
452*5113495bSYour Name 			 the LRO/FISA eligibility for MSDUs from PMAC0 only.
453*5113495bSYour Name 
454*5113495bSYour Name 			This bit is also known as RDI_invalid.
455*5113495bSYour Name 			When RXOLE is configured to enable flow search (but ignore
456*5113495bSYour Name 			 the REO_destination_indication) for the first fragment,
457*5113495bSYour Name 			it will set this bit if a flow entry matches.
458*5113495bSYour Name 			Subsequently when RXOLE matches this flow entry for any
459*5113495bSYour Name 			other packet, the REO_destination_indication in this entry
460*5113495bSYour Name 			 is considered invalid and w.r.t. REO routing the flow search
461*5113495bSYour Name 			 is considered to have failed.
462*5113495bSYour Name 			<legal all>
463*5113495bSYour Name */
464*5113495bSYour Name 
465*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_LRO_ELIGIBLE_OFFSET                                    0x0000002c
466*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_LRO_ELIGIBLE_LSB                                       7
467*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_LRO_ELIGIBLE_MSB                                       7
468*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_LRO_ELIGIBLE_MASK                                      0x00000080
469*5113495bSYour Name 
470*5113495bSYour Name 
471*5113495bSYour Name /* Description		MSDU_COUNT
472*5113495bSYour Name 
473*5113495bSYour Name 			Number of Rx MSDUs matching this flow
474*5113495bSYour Name 
475*5113495bSYour Name 			Based on an RXOLE register, this can be changed to reflect
476*5113495bSYour Name 			 the number of Rx MSDUs from PMAC0 matching the flow.
477*5113495bSYour Name 			<legal all>
478*5113495bSYour Name */
479*5113495bSYour Name 
480*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_MSDU_COUNT_OFFSET                                      0x0000002c
481*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_MSDU_COUNT_LSB                                         8
482*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_MSDU_COUNT_MSB                                         31
483*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_MSDU_COUNT_MASK                                        0xffffff00
484*5113495bSYour Name 
485*5113495bSYour Name 
486*5113495bSYour Name /* Description		MSDU_BYTE_COUNT
487*5113495bSYour Name 
488*5113495bSYour Name 			Number of bytes in Rx MSDUs matching this flow
489*5113495bSYour Name 
490*5113495bSYour Name 			Based on an RXOLE register, this can be changed to reflect
491*5113495bSYour Name 			 the number of Rx MSDUs from PMAC1 matching the flow.
492*5113495bSYour Name 
493*5113495bSYour Name 			Based on an RXOLE register, the MSB 8 bits can be changed
494*5113495bSYour Name 			 to reflect the 'aggregation_count' and 'LRO_eligible' of
495*5113495bSYour Name 			 MSDUs from PMAC1.
496*5113495bSYour Name 			<legal all>
497*5113495bSYour Name */
498*5113495bSYour Name 
499*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_MSDU_BYTE_COUNT_OFFSET                                 0x00000030
500*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_MSDU_BYTE_COUNT_LSB                                    0
501*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_MSDU_BYTE_COUNT_MSB                                    31
502*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_MSDU_BYTE_COUNT_MASK                                   0xffffffff
503*5113495bSYour Name 
504*5113495bSYour Name 
505*5113495bSYour Name /* Description		TIMESTAMP
506*5113495bSYour Name 
507*5113495bSYour Name 			Time of last reception (as measured at Rx OLE) matching
508*5113495bSYour Name 			this flow
509*5113495bSYour Name 			<legal all>
510*5113495bSYour Name */
511*5113495bSYour Name 
512*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_TIMESTAMP_OFFSET                                       0x00000034
513*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_TIMESTAMP_LSB                                          0
514*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_TIMESTAMP_MSB                                          31
515*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_TIMESTAMP_MASK                                         0xffffffff
516*5113495bSYour Name 
517*5113495bSYour Name 
518*5113495bSYour Name /* Description		CUMULATIVE_IP_LENGTH_PMAC1
519*5113495bSYour Name 
520*5113495bSYour Name 			Based on an RXOLE register, this can be changed to reflect
521*5113495bSYour Name 			 the 'cumulative_IP_length' for MSDUs from PMAC1.
522*5113495bSYour Name 			<legal all>
523*5113495bSYour Name */
524*5113495bSYour Name 
525*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_CUMULATIVE_IP_LENGTH_PMAC1_OFFSET                      0x00000038
526*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_CUMULATIVE_IP_LENGTH_PMAC1_LSB                         0
527*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_CUMULATIVE_IP_LENGTH_PMAC1_MSB                         15
528*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_CUMULATIVE_IP_LENGTH_PMAC1_MASK                        0x0000ffff
529*5113495bSYour Name 
530*5113495bSYour Name 
531*5113495bSYour Name /* Description		CUMULATIVE_IP_LENGTH
532*5113495bSYour Name 
533*5113495bSYour Name 			FISA: Total MSDU length that is part of this flow aggregated
534*5113495bSYour Name 			 so far
535*5113495bSYour Name 
536*5113495bSYour Name 			Based on an RXOLE register, this can be changed to reflect
537*5113495bSYour Name 			 aggregation of MSDUs from PMAC0 only.
538*5113495bSYour Name 
539*5113495bSYour Name 			Set to zero in chips not supporting FISA
540*5113495bSYour Name 			<legal all>
541*5113495bSYour Name */
542*5113495bSYour Name 
543*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_CUMULATIVE_IP_LENGTH_OFFSET                            0x00000038
544*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_CUMULATIVE_IP_LENGTH_LSB                               16
545*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_CUMULATIVE_IP_LENGTH_MSB                               31
546*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_CUMULATIVE_IP_LENGTH_MASK                              0xffff0000
547*5113495bSYour Name 
548*5113495bSYour Name 
549*5113495bSYour Name /* Description		TCP_SEQUENCE_NUMBER
550*5113495bSYour Name 
551*5113495bSYour Name 			FISA: TCP Sequence number of the last packet in this flow
552*5113495bSYour Name 			 to detect sequence number jump
553*5113495bSYour Name 
554*5113495bSYour Name 			Based on an RXOLE register, this can be changed so that
555*5113495bSYour Name 			the bottom half of this field reflects the LSBs of the TCP
556*5113495bSYour Name 			 sequence number of the last packet from PMAC0 and the top
557*5113495bSYour Name 			 half reflects the LSBs of the TCP sequence number of the
558*5113495bSYour Name 			 last packet from PMAC1.
559*5113495bSYour Name 
560*5113495bSYour Name 			Set to zero in chips not supporting FISA
561*5113495bSYour Name 			<legal all>
562*5113495bSYour Name */
563*5113495bSYour Name 
564*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_TCP_SEQUENCE_NUMBER_OFFSET                             0x0000003c
565*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_TCP_SEQUENCE_NUMBER_LSB                                0
566*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_TCP_SEQUENCE_NUMBER_MSB                                31
567*5113495bSYour Name #define RX_FLOW_SEARCH_ENTRY_TCP_SEQUENCE_NUMBER_MASK                               0xffffffff
568*5113495bSYour Name 
569*5113495bSYour Name 
570*5113495bSYour Name 
571*5113495bSYour Name #endif   // RX_FLOW_SEARCH_ENTRY
572