1 
2 /*
3  * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
4  *
5  * Permission to use, copy, modify, and/or distribute this software for
6  * any purpose with or without fee is hereby granted, provided that the
7  * above copyright notice and this permission notice appear in all
8  * copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17  * PERFORMANCE OF THIS SOFTWARE.
18  */
19 
20 
21 
22 #ifndef _RX_MSDU_START_H_
23 #define _RX_MSDU_START_H_
24 #if !defined(__ASSEMBLER__)
25 #endif
26 
27 #define NUM_OF_DWORDS_RX_MSDU_START 9
28 
29 struct rx_msdu_start {
30              uint32_t rxpcu_mpdu_filter_in_category   :  2,
31                       sw_frame_group_id               :  7,
32                       reserved_0                      :  7,
33                       phy_ppdu_id                     : 16;
34              uint32_t msdu_length                     : 14,
35                       reserved_1a                     :  1,
36                       ipsec_esp                       :  1,
37                       l3_offset                       :  7,
38                       ipsec_ah                        :  1,
39                       l4_offset                       :  8;
40              uint32_t msdu_number                     :  8,
41                       decap_format                    :  2,
42                       ipv4_proto                      :  1,
43                       ipv6_proto                      :  1,
44                       tcp_proto                       :  1,
45                       udp_proto                       :  1,
46                       ip_frag                         :  1,
47                       tcp_only_ack                    :  1,
48                       da_is_bcast_mcast               :  1,
49                       toeplitz_hash_sel               :  2,
50                       ip_fixed_header_valid           :  1,
51                       ip_extn_header_valid            :  1,
52                       tcp_udp_header_valid            :  1,
53                       mesh_control_present            :  1,
54                       ldpc                            :  1,
55                       ip4_protocol_ip6_next_header    :  8;
56              uint32_t toeplitz_hash_2_or_4            : 32;
57              uint32_t flow_id_toeplitz                : 32;
58              uint32_t user_rssi                       :  8,
59                       pkt_type                        :  4,
60                       stbc                            :  1,
61                       sgi                             :  2,
62                       rate_mcs                        :  4,
63                       receive_bandwidth               :  2,
64                       reception_type                  :  3,
65                       mimo_ss_bitmap                  :  8;
66              uint32_t ppdu_start_timestamp            : 32;
67              uint32_t sw_phy_meta_data                : 32;
68              uint32_t vlan_ctag_ci                    : 16,
69                       vlan_stag_ci                    : 16;
70 };
71 
72 #define RX_MSDU_START_0_RXPCU_MPDU_FILTER_IN_CATEGORY_OFFSET         0x00000000
73 #define RX_MSDU_START_0_RXPCU_MPDU_FILTER_IN_CATEGORY_LSB            0
74 #define RX_MSDU_START_0_RXPCU_MPDU_FILTER_IN_CATEGORY_MASK           0x00000003
75 
76 #define RX_MSDU_START_0_SW_FRAME_GROUP_ID_OFFSET                     0x00000000
77 #define RX_MSDU_START_0_SW_FRAME_GROUP_ID_LSB                        2
78 #define RX_MSDU_START_0_SW_FRAME_GROUP_ID_MASK                       0x000001fc
79 
80 #define RX_MSDU_START_0_RESERVED_0_OFFSET                            0x00000000
81 #define RX_MSDU_START_0_RESERVED_0_LSB                               9
82 #define RX_MSDU_START_0_RESERVED_0_MASK                              0x0000fe00
83 
84 #define RX_MSDU_START_0_PHY_PPDU_ID_OFFSET                           0x00000000
85 #define RX_MSDU_START_0_PHY_PPDU_ID_LSB                              16
86 #define RX_MSDU_START_0_PHY_PPDU_ID_MASK                             0xffff0000
87 
88 #define RX_MSDU_START_1_MSDU_LENGTH_OFFSET                           0x00000004
89 #define RX_MSDU_START_1_MSDU_LENGTH_LSB                              0
90 #define RX_MSDU_START_1_MSDU_LENGTH_MASK                             0x00003fff
91 
92 #define RX_MSDU_START_1_RESERVED_1A_OFFSET                           0x00000004
93 #define RX_MSDU_START_1_RESERVED_1A_LSB                              14
94 #define RX_MSDU_START_1_RESERVED_1A_MASK                             0x00004000
95 
96 #define RX_MSDU_START_1_IPSEC_ESP_OFFSET                             0x00000004
97 #define RX_MSDU_START_1_IPSEC_ESP_LSB                                15
98 #define RX_MSDU_START_1_IPSEC_ESP_MASK                               0x00008000
99 
100 #define RX_MSDU_START_1_L3_OFFSET_OFFSET                             0x00000004
101 #define RX_MSDU_START_1_L3_OFFSET_LSB                                16
102 #define RX_MSDU_START_1_L3_OFFSET_MASK                               0x007f0000
103 
104 #define RX_MSDU_START_1_IPSEC_AH_OFFSET                              0x00000004
105 #define RX_MSDU_START_1_IPSEC_AH_LSB                                 23
106 #define RX_MSDU_START_1_IPSEC_AH_MASK                                0x00800000
107 
108 #define RX_MSDU_START_1_L4_OFFSET_OFFSET                             0x00000004
109 #define RX_MSDU_START_1_L4_OFFSET_LSB                                24
110 #define RX_MSDU_START_1_L4_OFFSET_MASK                               0xff000000
111 
112 #define RX_MSDU_START_2_MSDU_NUMBER_OFFSET                           0x00000008
113 #define RX_MSDU_START_2_MSDU_NUMBER_LSB                              0
114 #define RX_MSDU_START_2_MSDU_NUMBER_MASK                             0x000000ff
115 
116 #define RX_MSDU_START_2_DECAP_FORMAT_OFFSET                          0x00000008
117 #define RX_MSDU_START_2_DECAP_FORMAT_LSB                             8
118 #define RX_MSDU_START_2_DECAP_FORMAT_MASK                            0x00000300
119 
120 #define RX_MSDU_START_2_IPV4_PROTO_OFFSET                            0x00000008
121 #define RX_MSDU_START_2_IPV4_PROTO_LSB                               10
122 #define RX_MSDU_START_2_IPV4_PROTO_MASK                              0x00000400
123 
124 #define RX_MSDU_START_2_IPV6_PROTO_OFFSET                            0x00000008
125 #define RX_MSDU_START_2_IPV6_PROTO_LSB                               11
126 #define RX_MSDU_START_2_IPV6_PROTO_MASK                              0x00000800
127 
128 #define RX_MSDU_START_2_TCP_PROTO_OFFSET                             0x00000008
129 #define RX_MSDU_START_2_TCP_PROTO_LSB                                12
130 #define RX_MSDU_START_2_TCP_PROTO_MASK                               0x00001000
131 
132 #define RX_MSDU_START_2_UDP_PROTO_OFFSET                             0x00000008
133 #define RX_MSDU_START_2_UDP_PROTO_LSB                                13
134 #define RX_MSDU_START_2_UDP_PROTO_MASK                               0x00002000
135 
136 #define RX_MSDU_START_2_IP_FRAG_OFFSET                               0x00000008
137 #define RX_MSDU_START_2_IP_FRAG_LSB                                  14
138 #define RX_MSDU_START_2_IP_FRAG_MASK                                 0x00004000
139 
140 #define RX_MSDU_START_2_TCP_ONLY_ACK_OFFSET                          0x00000008
141 #define RX_MSDU_START_2_TCP_ONLY_ACK_LSB                             15
142 #define RX_MSDU_START_2_TCP_ONLY_ACK_MASK                            0x00008000
143 
144 #define RX_MSDU_START_2_DA_IS_BCAST_MCAST_OFFSET                     0x00000008
145 #define RX_MSDU_START_2_DA_IS_BCAST_MCAST_LSB                        16
146 #define RX_MSDU_START_2_DA_IS_BCAST_MCAST_MASK                       0x00010000
147 
148 #define RX_MSDU_START_2_TOEPLITZ_HASH_SEL_OFFSET                     0x00000008
149 #define RX_MSDU_START_2_TOEPLITZ_HASH_SEL_LSB                        17
150 #define RX_MSDU_START_2_TOEPLITZ_HASH_SEL_MASK                       0x00060000
151 
152 #define RX_MSDU_START_2_IP_FIXED_HEADER_VALID_OFFSET                 0x00000008
153 #define RX_MSDU_START_2_IP_FIXED_HEADER_VALID_LSB                    19
154 #define RX_MSDU_START_2_IP_FIXED_HEADER_VALID_MASK                   0x00080000
155 
156 #define RX_MSDU_START_2_IP_EXTN_HEADER_VALID_OFFSET                  0x00000008
157 #define RX_MSDU_START_2_IP_EXTN_HEADER_VALID_LSB                     20
158 #define RX_MSDU_START_2_IP_EXTN_HEADER_VALID_MASK                    0x00100000
159 
160 #define RX_MSDU_START_2_TCP_UDP_HEADER_VALID_OFFSET                  0x00000008
161 #define RX_MSDU_START_2_TCP_UDP_HEADER_VALID_LSB                     21
162 #define RX_MSDU_START_2_TCP_UDP_HEADER_VALID_MASK                    0x00200000
163 
164 #define RX_MSDU_START_2_MESH_CONTROL_PRESENT_OFFSET                  0x00000008
165 #define RX_MSDU_START_2_MESH_CONTROL_PRESENT_LSB                     22
166 #define RX_MSDU_START_2_MESH_CONTROL_PRESENT_MASK                    0x00400000
167 
168 #define RX_MSDU_START_2_LDPC_OFFSET                                  0x00000008
169 #define RX_MSDU_START_2_LDPC_LSB                                     23
170 #define RX_MSDU_START_2_LDPC_MASK                                    0x00800000
171 
172 #define RX_MSDU_START_2_IP4_PROTOCOL_IP6_NEXT_HEADER_OFFSET          0x00000008
173 #define RX_MSDU_START_2_IP4_PROTOCOL_IP6_NEXT_HEADER_LSB             24
174 #define RX_MSDU_START_2_IP4_PROTOCOL_IP6_NEXT_HEADER_MASK            0xff000000
175 
176 #define RX_MSDU_START_3_TOEPLITZ_HASH_2_OR_4_OFFSET                  0x0000000c
177 #define RX_MSDU_START_3_TOEPLITZ_HASH_2_OR_4_LSB                     0
178 #define RX_MSDU_START_3_TOEPLITZ_HASH_2_OR_4_MASK                    0xffffffff
179 
180 #define RX_MSDU_START_4_FLOW_ID_TOEPLITZ_OFFSET                      0x00000010
181 #define RX_MSDU_START_4_FLOW_ID_TOEPLITZ_LSB                         0
182 #define RX_MSDU_START_4_FLOW_ID_TOEPLITZ_MASK                        0xffffffff
183 
184 #define RX_MSDU_START_5_USER_RSSI_OFFSET                             0x00000014
185 #define RX_MSDU_START_5_USER_RSSI_LSB                                0
186 #define RX_MSDU_START_5_USER_RSSI_MASK                               0x000000ff
187 
188 #define RX_MSDU_START_5_PKT_TYPE_OFFSET                              0x00000014
189 #define RX_MSDU_START_5_PKT_TYPE_LSB                                 8
190 #define RX_MSDU_START_5_PKT_TYPE_MASK                                0x00000f00
191 
192 #define RX_MSDU_START_5_STBC_OFFSET                                  0x00000014
193 #define RX_MSDU_START_5_STBC_LSB                                     12
194 #define RX_MSDU_START_5_STBC_MASK                                    0x00001000
195 
196 #define RX_MSDU_START_5_SGI_OFFSET                                   0x00000014
197 #define RX_MSDU_START_5_SGI_LSB                                      13
198 #define RX_MSDU_START_5_SGI_MASK                                     0x00006000
199 
200 #define RX_MSDU_START_5_RATE_MCS_OFFSET                              0x00000014
201 #define RX_MSDU_START_5_RATE_MCS_LSB                                 15
202 #define RX_MSDU_START_5_RATE_MCS_MASK                                0x00078000
203 
204 #define RX_MSDU_START_5_RECEIVE_BANDWIDTH_OFFSET                     0x00000014
205 #define RX_MSDU_START_5_RECEIVE_BANDWIDTH_LSB                        19
206 #define RX_MSDU_START_5_RECEIVE_BANDWIDTH_MASK                       0x00180000
207 
208 #define RX_MSDU_START_5_RECEPTION_TYPE_OFFSET                        0x00000014
209 #define RX_MSDU_START_5_RECEPTION_TYPE_LSB                           21
210 #define RX_MSDU_START_5_RECEPTION_TYPE_MASK                          0x00e00000
211 
212 #define RX_MSDU_START_5_MIMO_SS_BITMAP_OFFSET                        0x00000014
213 #define RX_MSDU_START_5_MIMO_SS_BITMAP_LSB                           24
214 #define RX_MSDU_START_5_MIMO_SS_BITMAP_MASK                          0xff000000
215 
216 #define RX_MSDU_START_6_PPDU_START_TIMESTAMP_OFFSET                  0x00000018
217 #define RX_MSDU_START_6_PPDU_START_TIMESTAMP_LSB                     0
218 #define RX_MSDU_START_6_PPDU_START_TIMESTAMP_MASK                    0xffffffff
219 
220 #define RX_MSDU_START_7_SW_PHY_META_DATA_OFFSET                      0x0000001c
221 #define RX_MSDU_START_7_SW_PHY_META_DATA_LSB                         0
222 #define RX_MSDU_START_7_SW_PHY_META_DATA_MASK                        0xffffffff
223 
224 #define RX_MSDU_START_8_VLAN_CTAG_CI_OFFSET                          0x00000020
225 #define RX_MSDU_START_8_VLAN_CTAG_CI_LSB                             0
226 #define RX_MSDU_START_8_VLAN_CTAG_CI_MASK                            0x0000ffff
227 
228 #define RX_MSDU_START_8_VLAN_STAG_CI_OFFSET                          0x00000020
229 #define RX_MSDU_START_8_VLAN_STAG_CI_LSB                             16
230 #define RX_MSDU_START_8_VLAN_STAG_CI_MASK                            0xffff0000
231 
232 #endif
233