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