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