1 /* 2 * Copyright (c) 2018 The Linux Foundation. All rights reserved. 3 * 4 * Permission to use, copy, modify, and/or distribute this software for 5 * any purpose with or without fee is hereby granted, provided that the 6 * above copyright notice and this permission notice appear in all 7 * copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 10 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 11 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 12 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 13 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 14 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 15 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 16 * PERFORMANCE OF THIS SOFTWARE. 17 */ 18 19 #ifndef _RX_MSDU_LINK_H_ 20 #define _RX_MSDU_LINK_H_ 21 #if !defined(__ASSEMBLER__) 22 #endif 23 24 #include "uniform_descriptor_header.h" 25 #include "buffer_addr_info.h" 26 #include "rx_msdu_details.h" 27 28 // ################ START SUMMARY ################# 29 // 30 // Dword Fields 31 // 0 struct uniform_descriptor_header descriptor_header; 32 // 1-2 struct buffer_addr_info next_msdu_link_desc_addr_info; 33 // 3 receive_queue_number[15:0], first_rx_msdu_link_struct[16], reserved_3a[31:17] 34 // 4 pn_31_0[31:0] 35 // 5 pn_63_32[31:0] 36 // 6 pn_95_64[31:0] 37 // 7 pn_127_96[31:0] 38 // 8-11 struct rx_msdu_details msdu_0; 39 // 12-15 struct rx_msdu_details msdu_1; 40 // 16-19 struct rx_msdu_details msdu_2; 41 // 20-23 struct rx_msdu_details msdu_3; 42 // 24-27 struct rx_msdu_details msdu_4; 43 // 28-31 struct rx_msdu_details msdu_5; 44 // 45 // ################ END SUMMARY ################# 46 47 #define NUM_OF_DWORDS_RX_MSDU_LINK 32 48 49 struct rx_msdu_link { 50 struct uniform_descriptor_header descriptor_header; 51 struct buffer_addr_info next_msdu_link_desc_addr_info; 52 uint32_t receive_queue_number : 16, //[15:0] 53 first_rx_msdu_link_struct : 1, //[16] 54 reserved_3a : 15; //[31:17] 55 uint32_t pn_31_0 : 32; //[31:0] 56 uint32_t pn_63_32 : 32; //[31:0] 57 uint32_t pn_95_64 : 32; //[31:0] 58 uint32_t pn_127_96 : 32; //[31:0] 59 struct rx_msdu_details msdu_0; 60 struct rx_msdu_details msdu_1; 61 struct rx_msdu_details msdu_2; 62 struct rx_msdu_details msdu_3; 63 struct rx_msdu_details msdu_4; 64 struct rx_msdu_details msdu_5; 65 }; 66 67 /* 68 69 struct uniform_descriptor_header descriptor_header 70 71 Details about which module owns this struct. 72 73 Note that sub field Buffer_type shall be set to 74 Receive_MSDU_Link_descriptor 75 76 struct buffer_addr_info next_msdu_link_desc_addr_info 77 78 Details of the physical address of the next MSDU link 79 descriptor that contains info about additional MSDUs that 80 are part of this MPDU. 81 82 receive_queue_number 83 84 Indicates the Receive queue to which this MPDU 85 descriptor belongs 86 87 Used for tracking, finding bugs and debugging. 88 89 <legal all> 90 91 first_rx_msdu_link_struct 92 93 When set, this RX_MSDU_link descriptor is the first one 94 in the MSDU link list. Field MSDU_0 points to the very first 95 MSDU buffer descriptor in the MPDU 96 97 <legal all> 98 99 reserved_3a 100 101 <legal 0> 102 103 pn_31_0 104 105 106 107 108 31-0 bits of the 256-bit packet number bitmap. 109 110 <legal all> 111 112 pn_63_32 113 114 115 116 117 63-32 bits of the 256-bit packet number bitmap. 118 119 <legal all> 120 121 pn_95_64 122 123 124 125 126 95-64 bits of the 256-bit packet number bitmap. 127 128 <legal all> 129 130 pn_127_96 131 132 133 134 135 127-96 bits of the 256-bit packet number bitmap. 136 137 <legal all> 138 139 struct rx_msdu_details msdu_0 140 141 When First_RX_MSDU_link_struct is set, this MSDU is the 142 first in the MPDU 143 144 145 146 When First_RX_MSDU_link_struct is NOT set, this MSDU 147 follows the last MSDU in the previous RX_MSDU_link data 148 structure 149 150 struct rx_msdu_details msdu_1 151 152 Details of next MSDU in this (MSDU flow) linked list 153 154 struct rx_msdu_details msdu_2 155 156 Details of next MSDU in this (MSDU flow) linked list 157 158 struct rx_msdu_details msdu_3 159 160 Details of next MSDU in this (MSDU flow) linked list 161 162 struct rx_msdu_details msdu_4 163 164 Details of next MSDU in this (MSDU flow) linked list 165 166 struct rx_msdu_details msdu_5 167 168 Details of next MSDU in this (MSDU flow) linked list 169 */ 170 171 #define RX_MSDU_LINK_0_UNIFORM_DESCRIPTOR_HEADER_DESCRIPTOR_HEADER_OFFSET 0x00000000 172 #define RX_MSDU_LINK_0_UNIFORM_DESCRIPTOR_HEADER_DESCRIPTOR_HEADER_LSB 0 173 #define RX_MSDU_LINK_0_UNIFORM_DESCRIPTOR_HEADER_DESCRIPTOR_HEADER_MASK 0xffffffff 174 #define RX_MSDU_LINK_1_BUFFER_ADDR_INFO_NEXT_MSDU_LINK_DESC_ADDR_INFO_OFFSET 0x00000004 175 #define RX_MSDU_LINK_1_BUFFER_ADDR_INFO_NEXT_MSDU_LINK_DESC_ADDR_INFO_LSB 0 176 #define RX_MSDU_LINK_1_BUFFER_ADDR_INFO_NEXT_MSDU_LINK_DESC_ADDR_INFO_MASK 0xffffffff 177 #define RX_MSDU_LINK_2_BUFFER_ADDR_INFO_NEXT_MSDU_LINK_DESC_ADDR_INFO_OFFSET 0x00000008 178 #define RX_MSDU_LINK_2_BUFFER_ADDR_INFO_NEXT_MSDU_LINK_DESC_ADDR_INFO_LSB 0 179 #define RX_MSDU_LINK_2_BUFFER_ADDR_INFO_NEXT_MSDU_LINK_DESC_ADDR_INFO_MASK 0xffffffff 180 181 /* Description RX_MSDU_LINK_3_RECEIVE_QUEUE_NUMBER 182 183 Indicates the Receive queue to which this MPDU 184 descriptor belongs 185 186 Used for tracking, finding bugs and debugging. 187 188 <legal all> 189 */ 190 #define RX_MSDU_LINK_3_RECEIVE_QUEUE_NUMBER_OFFSET 0x0000000c 191 #define RX_MSDU_LINK_3_RECEIVE_QUEUE_NUMBER_LSB 0 192 #define RX_MSDU_LINK_3_RECEIVE_QUEUE_NUMBER_MASK 0x0000ffff 193 194 /* Description RX_MSDU_LINK_3_FIRST_RX_MSDU_LINK_STRUCT 195 196 When set, this RX_MSDU_link descriptor is the first one 197 in the MSDU link list. Field MSDU_0 points to the very first 198 MSDU buffer descriptor in the MPDU 199 200 <legal all> 201 */ 202 #define RX_MSDU_LINK_3_FIRST_RX_MSDU_LINK_STRUCT_OFFSET 0x0000000c 203 #define RX_MSDU_LINK_3_FIRST_RX_MSDU_LINK_STRUCT_LSB 16 204 #define RX_MSDU_LINK_3_FIRST_RX_MSDU_LINK_STRUCT_MASK 0x00010000 205 206 /* Description RX_MSDU_LINK_3_RESERVED_3A 207 208 <legal 0> 209 */ 210 #define RX_MSDU_LINK_3_RESERVED_3A_OFFSET 0x0000000c 211 #define RX_MSDU_LINK_3_RESERVED_3A_LSB 17 212 #define RX_MSDU_LINK_3_RESERVED_3A_MASK 0xfffe0000 213 214 /* Description RX_MSDU_LINK_4_PN_31_0 215 216 217 218 219 31-0 bits of the 256-bit packet number bitmap. 220 221 <legal all> 222 */ 223 #define RX_MSDU_LINK_4_PN_31_0_OFFSET 0x00000010 224 #define RX_MSDU_LINK_4_PN_31_0_LSB 0 225 #define RX_MSDU_LINK_4_PN_31_0_MASK 0xffffffff 226 227 /* Description RX_MSDU_LINK_5_PN_63_32 228 229 230 231 232 63-32 bits of the 256-bit packet number bitmap. 233 234 <legal all> 235 */ 236 #define RX_MSDU_LINK_5_PN_63_32_OFFSET 0x00000014 237 #define RX_MSDU_LINK_5_PN_63_32_LSB 0 238 #define RX_MSDU_LINK_5_PN_63_32_MASK 0xffffffff 239 240 /* Description RX_MSDU_LINK_6_PN_95_64 241 242 243 244 245 95-64 bits of the 256-bit packet number bitmap. 246 247 <legal all> 248 */ 249 #define RX_MSDU_LINK_6_PN_95_64_OFFSET 0x00000018 250 #define RX_MSDU_LINK_6_PN_95_64_LSB 0 251 #define RX_MSDU_LINK_6_PN_95_64_MASK 0xffffffff 252 253 /* Description RX_MSDU_LINK_7_PN_127_96 254 255 256 257 258 127-96 bits of the 256-bit packet number bitmap. 259 260 <legal all> 261 */ 262 #define RX_MSDU_LINK_7_PN_127_96_OFFSET 0x0000001c 263 #define RX_MSDU_LINK_7_PN_127_96_LSB 0 264 #define RX_MSDU_LINK_7_PN_127_96_MASK 0xffffffff 265 #define RX_MSDU_LINK_8_RX_MSDU_DETAILS_MSDU_0_OFFSET 0x00000020 266 #define RX_MSDU_LINK_8_RX_MSDU_DETAILS_MSDU_0_LSB 0 267 #define RX_MSDU_LINK_8_RX_MSDU_DETAILS_MSDU_0_MASK 0xffffffff 268 #define RX_MSDU_LINK_9_RX_MSDU_DETAILS_MSDU_0_OFFSET 0x00000024 269 #define RX_MSDU_LINK_9_RX_MSDU_DETAILS_MSDU_0_LSB 0 270 #define RX_MSDU_LINK_9_RX_MSDU_DETAILS_MSDU_0_MASK 0xffffffff 271 #define RX_MSDU_LINK_10_RX_MSDU_DETAILS_MSDU_0_OFFSET 0x00000028 272 #define RX_MSDU_LINK_10_RX_MSDU_DETAILS_MSDU_0_LSB 0 273 #define RX_MSDU_LINK_10_RX_MSDU_DETAILS_MSDU_0_MASK 0xffffffff 274 #define RX_MSDU_LINK_11_RX_MSDU_DETAILS_MSDU_0_OFFSET 0x0000002c 275 #define RX_MSDU_LINK_11_RX_MSDU_DETAILS_MSDU_0_LSB 0 276 #define RX_MSDU_LINK_11_RX_MSDU_DETAILS_MSDU_0_MASK 0xffffffff 277 #define RX_MSDU_LINK_12_RX_MSDU_DETAILS_MSDU_1_OFFSET 0x00000030 278 #define RX_MSDU_LINK_12_RX_MSDU_DETAILS_MSDU_1_LSB 0 279 #define RX_MSDU_LINK_12_RX_MSDU_DETAILS_MSDU_1_MASK 0xffffffff 280 #define RX_MSDU_LINK_13_RX_MSDU_DETAILS_MSDU_1_OFFSET 0x00000034 281 #define RX_MSDU_LINK_13_RX_MSDU_DETAILS_MSDU_1_LSB 0 282 #define RX_MSDU_LINK_13_RX_MSDU_DETAILS_MSDU_1_MASK 0xffffffff 283 #define RX_MSDU_LINK_14_RX_MSDU_DETAILS_MSDU_1_OFFSET 0x00000038 284 #define RX_MSDU_LINK_14_RX_MSDU_DETAILS_MSDU_1_LSB 0 285 #define RX_MSDU_LINK_14_RX_MSDU_DETAILS_MSDU_1_MASK 0xffffffff 286 #define RX_MSDU_LINK_15_RX_MSDU_DETAILS_MSDU_1_OFFSET 0x0000003c 287 #define RX_MSDU_LINK_15_RX_MSDU_DETAILS_MSDU_1_LSB 0 288 #define RX_MSDU_LINK_15_RX_MSDU_DETAILS_MSDU_1_MASK 0xffffffff 289 #define RX_MSDU_LINK_16_RX_MSDU_DETAILS_MSDU_2_OFFSET 0x00000040 290 #define RX_MSDU_LINK_16_RX_MSDU_DETAILS_MSDU_2_LSB 0 291 #define RX_MSDU_LINK_16_RX_MSDU_DETAILS_MSDU_2_MASK 0xffffffff 292 #define RX_MSDU_LINK_17_RX_MSDU_DETAILS_MSDU_2_OFFSET 0x00000044 293 #define RX_MSDU_LINK_17_RX_MSDU_DETAILS_MSDU_2_LSB 0 294 #define RX_MSDU_LINK_17_RX_MSDU_DETAILS_MSDU_2_MASK 0xffffffff 295 #define RX_MSDU_LINK_18_RX_MSDU_DETAILS_MSDU_2_OFFSET 0x00000048 296 #define RX_MSDU_LINK_18_RX_MSDU_DETAILS_MSDU_2_LSB 0 297 #define RX_MSDU_LINK_18_RX_MSDU_DETAILS_MSDU_2_MASK 0xffffffff 298 #define RX_MSDU_LINK_19_RX_MSDU_DETAILS_MSDU_2_OFFSET 0x0000004c 299 #define RX_MSDU_LINK_19_RX_MSDU_DETAILS_MSDU_2_LSB 0 300 #define RX_MSDU_LINK_19_RX_MSDU_DETAILS_MSDU_2_MASK 0xffffffff 301 #define RX_MSDU_LINK_20_RX_MSDU_DETAILS_MSDU_3_OFFSET 0x00000050 302 #define RX_MSDU_LINK_20_RX_MSDU_DETAILS_MSDU_3_LSB 0 303 #define RX_MSDU_LINK_20_RX_MSDU_DETAILS_MSDU_3_MASK 0xffffffff 304 #define RX_MSDU_LINK_21_RX_MSDU_DETAILS_MSDU_3_OFFSET 0x00000054 305 #define RX_MSDU_LINK_21_RX_MSDU_DETAILS_MSDU_3_LSB 0 306 #define RX_MSDU_LINK_21_RX_MSDU_DETAILS_MSDU_3_MASK 0xffffffff 307 #define RX_MSDU_LINK_22_RX_MSDU_DETAILS_MSDU_3_OFFSET 0x00000058 308 #define RX_MSDU_LINK_22_RX_MSDU_DETAILS_MSDU_3_LSB 0 309 #define RX_MSDU_LINK_22_RX_MSDU_DETAILS_MSDU_3_MASK 0xffffffff 310 #define RX_MSDU_LINK_23_RX_MSDU_DETAILS_MSDU_3_OFFSET 0x0000005c 311 #define RX_MSDU_LINK_23_RX_MSDU_DETAILS_MSDU_3_LSB 0 312 #define RX_MSDU_LINK_23_RX_MSDU_DETAILS_MSDU_3_MASK 0xffffffff 313 #define RX_MSDU_LINK_24_RX_MSDU_DETAILS_MSDU_4_OFFSET 0x00000060 314 #define RX_MSDU_LINK_24_RX_MSDU_DETAILS_MSDU_4_LSB 0 315 #define RX_MSDU_LINK_24_RX_MSDU_DETAILS_MSDU_4_MASK 0xffffffff 316 #define RX_MSDU_LINK_25_RX_MSDU_DETAILS_MSDU_4_OFFSET 0x00000064 317 #define RX_MSDU_LINK_25_RX_MSDU_DETAILS_MSDU_4_LSB 0 318 #define RX_MSDU_LINK_25_RX_MSDU_DETAILS_MSDU_4_MASK 0xffffffff 319 #define RX_MSDU_LINK_26_RX_MSDU_DETAILS_MSDU_4_OFFSET 0x00000068 320 #define RX_MSDU_LINK_26_RX_MSDU_DETAILS_MSDU_4_LSB 0 321 #define RX_MSDU_LINK_26_RX_MSDU_DETAILS_MSDU_4_MASK 0xffffffff 322 #define RX_MSDU_LINK_27_RX_MSDU_DETAILS_MSDU_4_OFFSET 0x0000006c 323 #define RX_MSDU_LINK_27_RX_MSDU_DETAILS_MSDU_4_LSB 0 324 #define RX_MSDU_LINK_27_RX_MSDU_DETAILS_MSDU_4_MASK 0xffffffff 325 #define RX_MSDU_LINK_28_RX_MSDU_DETAILS_MSDU_5_OFFSET 0x00000070 326 #define RX_MSDU_LINK_28_RX_MSDU_DETAILS_MSDU_5_LSB 0 327 #define RX_MSDU_LINK_28_RX_MSDU_DETAILS_MSDU_5_MASK 0xffffffff 328 #define RX_MSDU_LINK_29_RX_MSDU_DETAILS_MSDU_5_OFFSET 0x00000074 329 #define RX_MSDU_LINK_29_RX_MSDU_DETAILS_MSDU_5_LSB 0 330 #define RX_MSDU_LINK_29_RX_MSDU_DETAILS_MSDU_5_MASK 0xffffffff 331 #define RX_MSDU_LINK_30_RX_MSDU_DETAILS_MSDU_5_OFFSET 0x00000078 332 #define RX_MSDU_LINK_30_RX_MSDU_DETAILS_MSDU_5_LSB 0 333 #define RX_MSDU_LINK_30_RX_MSDU_DETAILS_MSDU_5_MASK 0xffffffff 334 #define RX_MSDU_LINK_31_RX_MSDU_DETAILS_MSDU_5_OFFSET 0x0000007c 335 #define RX_MSDU_LINK_31_RX_MSDU_DETAILS_MSDU_5_LSB 0 336 #define RX_MSDU_LINK_31_RX_MSDU_DETAILS_MSDU_5_MASK 0xffffffff 337 338 339 #endif // _RX_MSDU_LINK_H_ 340