1 2 /* Copyright (c) 2022, Qualcomm Innovation Center, Inc. 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 18 19 20 21 22 23 24 25 26 #ifndef _TCL_DATA_CMD_H_ 27 #define _TCL_DATA_CMD_H_ 28 #if !defined(__ASSEMBLER__) 29 #endif 30 31 #include "buffer_addr_info.h" 32 #define NUM_OF_DWORDS_TCL_DATA_CMD 8 33 34 35 struct tcl_data_cmd { 36 #ifndef WIFI_BIT_ORDER_BIG_ENDIAN 37 struct buffer_addr_info buf_addr_info; 38 uint32_t tcl_cmd_type : 1, // [0:0] 39 buf_or_ext_desc_type : 1, // [1:1] 40 bank_id : 6, // [7:2] 41 tx_notify_frame : 3, // [10:8] 42 header_length_read_sel : 1, // [11:11] 43 buffer_timestamp : 19, // [30:12] 44 buffer_timestamp_valid : 1; // [31:31] 45 uint32_t reserved_3a : 16, // [15:0] 46 tcl_cmd_number : 16; // [31:16] 47 uint32_t data_length : 16, // [15:0] 48 ipv4_checksum_en : 1, // [16:16] 49 udp_over_ipv4_checksum_en : 1, // [17:17] 50 udp_over_ipv6_checksum_en : 1, // [18:18] 51 tcp_over_ipv4_checksum_en : 1, // [19:19] 52 tcp_over_ipv6_checksum_en : 1, // [20:20] 53 to_fw : 1, // [21:21] 54 reserved_4a : 1, // [22:22] 55 packet_offset : 9; // [31:23] 56 uint32_t hlos_tid_overwrite : 1, // [0:0] 57 flow_override_enable : 1, // [1:1] 58 who_classify_info_sel : 2, // [3:2] 59 hlos_tid : 4, // [7:4] 60 flow_override : 1, // [8:8] 61 pmac_id : 2, // [10:9] 62 msdu_color : 2, // [12:11] 63 reserved_5a : 11, // [23:13] 64 vdev_id : 8; // [31:24] 65 uint32_t search_index : 20, // [19:0] 66 cache_set_num : 4, // [23:20] 67 index_lookup_override : 1, // [24:24] 68 reserved_6a : 7; // [31:25] 69 uint32_t reserved_7a : 20, // [19:0] 70 ring_id : 8, // [27:20] 71 looping_count : 4; // [31:28] 72 #else 73 struct buffer_addr_info buf_addr_info; 74 uint32_t buffer_timestamp_valid : 1, // [31:31] 75 buffer_timestamp : 19, // [30:12] 76 header_length_read_sel : 1, // [11:11] 77 tx_notify_frame : 3, // [10:8] 78 bank_id : 6, // [7:2] 79 buf_or_ext_desc_type : 1, // [1:1] 80 tcl_cmd_type : 1; // [0:0] 81 uint32_t tcl_cmd_number : 16, // [31:16] 82 reserved_3a : 16; // [15:0] 83 uint32_t packet_offset : 9, // [31:23] 84 reserved_4a : 1, // [22:22] 85 to_fw : 1, // [21:21] 86 tcp_over_ipv6_checksum_en : 1, // [20:20] 87 tcp_over_ipv4_checksum_en : 1, // [19:19] 88 udp_over_ipv6_checksum_en : 1, // [18:18] 89 udp_over_ipv4_checksum_en : 1, // [17:17] 90 ipv4_checksum_en : 1, // [16:16] 91 data_length : 16; // [15:0] 92 uint32_t vdev_id : 8, // [31:24] 93 reserved_5a : 11, // [23:13] 94 msdu_color : 2, // [12:11] 95 pmac_id : 2, // [10:9] 96 flow_override : 1, // [8:8] 97 hlos_tid : 4, // [7:4] 98 who_classify_info_sel : 2, // [3:2] 99 flow_override_enable : 1, // [1:1] 100 hlos_tid_overwrite : 1; // [0:0] 101 uint32_t reserved_6a : 7, // [31:25] 102 index_lookup_override : 1, // [24:24] 103 cache_set_num : 4, // [23:20] 104 search_index : 20; // [19:0] 105 uint32_t looping_count : 4, // [31:28] 106 ring_id : 8, // [27:20] 107 reserved_7a : 20; // [19:0] 108 #endif 109 }; 110 111 112 /* Description BUF_ADDR_INFO 113 114 Details of the physical address for a single buffer containing 115 the entire MSDU or an MSDU extension descriptor. 116 It also contains return ownership info as well as some meta 117 data for SW related to this buffer. 118 119 In case of Buf_or_ext_desc_type indicating 'MSDU_buffer', 120 this address indicates the start of the meta data that is 121 preceding the actual packet data. 122 The start of the actual packet data is provided by field: 123 Packet_offset 124 */ 125 126 127 /* Description BUFFER_ADDR_31_0 128 129 Address (lower 32 bits) of the MSDU buffer OR MSDU_EXTENSION 130 descriptor OR Link Descriptor 131 132 In case of 'NULL' pointer, this field is set to 0 133 <legal all> 134 */ 135 136 #define TCL_DATA_CMD_BUF_ADDR_INFO_BUFFER_ADDR_31_0_OFFSET 0x00000000 137 #define TCL_DATA_CMD_BUF_ADDR_INFO_BUFFER_ADDR_31_0_LSB 0 138 #define TCL_DATA_CMD_BUF_ADDR_INFO_BUFFER_ADDR_31_0_MSB 31 139 #define TCL_DATA_CMD_BUF_ADDR_INFO_BUFFER_ADDR_31_0_MASK 0xffffffff 140 141 142 /* Description BUFFER_ADDR_39_32 143 144 Address (upper 8 bits) of the MSDU buffer OR MSDU_EXTENSION 145 descriptor OR Link Descriptor 146 147 In case of 'NULL' pointer, this field is set to 0 148 <legal all> 149 */ 150 151 #define TCL_DATA_CMD_BUF_ADDR_INFO_BUFFER_ADDR_39_32_OFFSET 0x00000004 152 #define TCL_DATA_CMD_BUF_ADDR_INFO_BUFFER_ADDR_39_32_LSB 0 153 #define TCL_DATA_CMD_BUF_ADDR_INFO_BUFFER_ADDR_39_32_MSB 7 154 #define TCL_DATA_CMD_BUF_ADDR_INFO_BUFFER_ADDR_39_32_MASK 0x000000ff 155 156 157 /* Description RETURN_BUFFER_MANAGER 158 159 Consumer: WBM 160 Producer: SW/FW 161 162 In case of 'NULL' pointer, this field is set to 0 163 164 Indicates to which buffer manager the buffer OR MSDU_EXTENSION 165 descriptor OR link descriptor that is being pointed to 166 shall be returned after the frame has been processed. It 167 is used by WBM for routing purposes. 168 169 <enum 0 WBM_IDLE_BUF_LIST> This buffer shall be returned 170 to the WMB buffer idle list 171 <enum 1 WBM_CHIP0_IDLE_DESC_LIST> This buffer shall be returned 172 to the WBM idle link descriptor idle list, where the chip 173 0 WBM is chosen in case of a multi-chip config 174 <enum 2 WBM_CHIP1_IDLE_DESC_LIST> This buffer shall be returned 175 to the chip 1 WBM idle link descriptor idle list 176 <enum 3 WBM_CHIP2_IDLE_DESC_LIST> This buffer shall be returned 177 to the chip 2 WBM idle link descriptor idle list 178 <enum 12 WBM_CHIP3_IDLE_DESC_LIST> This buffer shall be 179 returned to chip 3 WBM idle link descriptor idle list 180 <enum 4 FW_BM> This buffer shall be returned to the FW 181 <enum 5 SW0_BM> This buffer shall be returned to the SW, 182 ring 0 183 <enum 6 SW1_BM> This buffer shall be returned to the SW, 184 ring 1 185 <enum 7 SW2_BM> This buffer shall be returned to the SW, 186 ring 2 187 <enum 8 SW3_BM> This buffer shall be returned to the SW, 188 ring 3 189 <enum 9 SW4_BM> This buffer shall be returned to the SW, 190 ring 4 191 <enum 10 SW5_BM> This buffer shall be returned to the SW, 192 ring 5 193 <enum 11 SW6_BM> This buffer shall be returned to the SW, 194 ring 6 195 196 <legal 0-12> 197 */ 198 199 #define TCL_DATA_CMD_BUF_ADDR_INFO_RETURN_BUFFER_MANAGER_OFFSET 0x00000004 200 #define TCL_DATA_CMD_BUF_ADDR_INFO_RETURN_BUFFER_MANAGER_LSB 8 201 #define TCL_DATA_CMD_BUF_ADDR_INFO_RETURN_BUFFER_MANAGER_MSB 11 202 #define TCL_DATA_CMD_BUF_ADDR_INFO_RETURN_BUFFER_MANAGER_MASK 0x00000f00 203 204 205 /* Description SW_BUFFER_COOKIE 206 207 Cookie field exclusively used by SW. 208 209 In case of 'NULL' pointer, this field is set to 0 210 211 HW ignores the contents, accept that it passes the programmed 212 value on to other descriptors together with the physical 213 address 214 215 Field can be used by SW to for example associate the buffers 216 physical address with the virtual address 217 The bit definitions as used by SW are within SW HLD specification 218 219 220 NOTE1: 221 The three most significant bits can have a special meaning 222 in case this struct is embedded in a TX_MPDU_DETAILS STRUCT, 223 and field transmit_bw_restriction is set 224 225 In case of NON punctured transmission: 226 Sw_buffer_cookie[19:17] = 3'b000: 20 MHz TX only 227 Sw_buffer_cookie[19:17] = 3'b001: 40 MHz TX only 228 Sw_buffer_cookie[19:17] = 3'b010: 80 MHz TX only 229 Sw_buffer_cookie[19:17] = 3'b011: 160 MHz TX only 230 Sw_buffer_cookie[19:17] = 3'b101: 240 MHz TX only 231 Sw_buffer_cookie[19:17] = 3'b100: 320 MHz TX only 232 Sw_buffer_cookie[19:18] = 2'b11: reserved 233 234 In case of punctured transmission: 235 Sw_buffer_cookie[19:16] = 4'b0000: pattern 0 only 236 Sw_buffer_cookie[19:16] = 4'b0001: pattern 1 only 237 Sw_buffer_cookie[19:16] = 4'b0010: pattern 2 only 238 Sw_buffer_cookie[19:16] = 4'b0011: pattern 3 only 239 Sw_buffer_cookie[19:16] = 4'b0100: pattern 4 only 240 Sw_buffer_cookie[19:16] = 4'b0101: pattern 5 only 241 Sw_buffer_cookie[19:16] = 4'b0110: pattern 6 only 242 Sw_buffer_cookie[19:16] = 4'b0111: pattern 7 only 243 Sw_buffer_cookie[19:16] = 4'b1000: pattern 8 only 244 Sw_buffer_cookie[19:16] = 4'b1001: pattern 9 only 245 Sw_buffer_cookie[19:16] = 4'b1010: pattern 10 only 246 Sw_buffer_cookie[19:16] = 4'b1011: pattern 11 only 247 Sw_buffer_cookie[19:18] = 2'b11: reserved 248 249 Note: a punctured transmission is indicated by the presence 250 of TLV TX_PUNCTURE_SETUP embedded in the scheduler TLV 251 252 <legal all> 253 */ 254 255 #define TCL_DATA_CMD_BUF_ADDR_INFO_SW_BUFFER_COOKIE_OFFSET 0x00000004 256 #define TCL_DATA_CMD_BUF_ADDR_INFO_SW_BUFFER_COOKIE_LSB 12 257 #define TCL_DATA_CMD_BUF_ADDR_INFO_SW_BUFFER_COOKIE_MSB 31 258 #define TCL_DATA_CMD_BUF_ADDR_INFO_SW_BUFFER_COOKIE_MASK 0xfffff000 259 260 261 /* Description TCL_CMD_TYPE 262 263 This field is used to select the type of TCL Command decriptor 264 that is queued by SW/FW. For 'TCL_DATA_CMD' this has to 265 be 0. 266 <legal 0> 267 */ 268 269 #define TCL_DATA_CMD_TCL_CMD_TYPE_OFFSET 0x00000008 270 #define TCL_DATA_CMD_TCL_CMD_TYPE_LSB 0 271 #define TCL_DATA_CMD_TCL_CMD_TYPE_MSB 0 272 #define TCL_DATA_CMD_TCL_CMD_TYPE_MASK 0x00000001 273 274 275 /* Description BUF_OR_EXT_DESC_TYPE 276 277 <enum 0 MSDU_buffer> The address points to an MSDU buffer. 278 279 <enum 1 extension_descriptor> The address points to an MSDU 280 link extension descriptor 281 < legal all> 282 */ 283 284 #define TCL_DATA_CMD_BUF_OR_EXT_DESC_TYPE_OFFSET 0x00000008 285 #define TCL_DATA_CMD_BUF_OR_EXT_DESC_TYPE_LSB 1 286 #define TCL_DATA_CMD_BUF_OR_EXT_DESC_TYPE_MSB 1 287 #define TCL_DATA_CMD_BUF_OR_EXT_DESC_TYPE_MASK 0x00000002 288 289 290 /* Description BANK_ID 291 292 This is used to select one of the TCL register banks for 293 fields removed from 'TCL_DATA_CMD' that do not change often 294 within one virtual device or a set of virtual devices: 295 EPD 296 encap_type 297 Encrypt_type 298 src_buffer_swap 299 Link_meta_swap 300 Search_type 301 AddrX_en 302 AddrY_en 303 DSCP_TID_TABLE_NUM 304 mesh_enable 305 */ 306 307 #define TCL_DATA_CMD_BANK_ID_OFFSET 0x00000008 308 #define TCL_DATA_CMD_BANK_ID_LSB 2 309 #define TCL_DATA_CMD_BANK_ID_MSB 7 310 #define TCL_DATA_CMD_BANK_ID_MASK 0x000000fc 311 312 313 /* Description TX_NOTIFY_FRAME 314 315 TCL copies this value to 'TQM_ENTRANCE_RING' field FW_tx_notify_frame. 316 317 Note: TCL can also have CCE/LCE rules to set 'Tx_notify_frame.' 318 TCL shall have a register to choose the notify type in case 319 of a conflict between the two settings. 320 */ 321 322 #define TCL_DATA_CMD_TX_NOTIFY_FRAME_OFFSET 0x00000008 323 #define TCL_DATA_CMD_TX_NOTIFY_FRAME_LSB 8 324 #define TCL_DATA_CMD_TX_NOTIFY_FRAME_MSB 10 325 #define TCL_DATA_CMD_TX_NOTIFY_FRAME_MASK 0x00000700 326 327 328 /* Description HEADER_LENGTH_READ_SEL 329 330 This field is used to select the per 'encap_type' register 331 set for MSDU header read length. 332 0: set 0 header read length register 333 1: set 1 header read length register 334 <legal all> 335 */ 336 337 #define TCL_DATA_CMD_HEADER_LENGTH_READ_SEL_OFFSET 0x00000008 338 #define TCL_DATA_CMD_HEADER_LENGTH_READ_SEL_LSB 11 339 #define TCL_DATA_CMD_HEADER_LENGTH_READ_SEL_MSB 11 340 #define TCL_DATA_CMD_HEADER_LENGTH_READ_SEL_MASK 0x00000800 341 342 343 /* Description BUFFER_TIMESTAMP 344 345 Field only valid when 'Buffer_timestamp_valid ' is set. 346 347 Frame system entrance timestamp. The timestamp is related 348 to the global system timer 349 350 Generally the first module (SW, TCL or TQM). that sees this 351 frame and this timestamp field is not valid, shall fill 352 in this field. 353 354 Timestamp in units determined by the UMCMN 'TX_TIMESTAMP_RESOLUTION_SELECT' 355 register 356 357 Waikiki v1 and Hamilton used units of 1024 us. 358 */ 359 360 #define TCL_DATA_CMD_BUFFER_TIMESTAMP_OFFSET 0x00000008 361 #define TCL_DATA_CMD_BUFFER_TIMESTAMP_LSB 12 362 #define TCL_DATA_CMD_BUFFER_TIMESTAMP_MSB 30 363 #define TCL_DATA_CMD_BUFFER_TIMESTAMP_MASK 0x7ffff000 364 365 366 /* Description BUFFER_TIMESTAMP_VALID 367 368 When set, the Buffer_timestamp field contains valid info. 369 370 */ 371 372 #define TCL_DATA_CMD_BUFFER_TIMESTAMP_VALID_OFFSET 0x00000008 373 #define TCL_DATA_CMD_BUFFER_TIMESTAMP_VALID_LSB 31 374 #define TCL_DATA_CMD_BUFFER_TIMESTAMP_VALID_MSB 31 375 #define TCL_DATA_CMD_BUFFER_TIMESTAMP_VALID_MASK 0x80000000 376 377 378 /* Description RESERVED_3A 379 380 <legal 0> 381 */ 382 383 #define TCL_DATA_CMD_RESERVED_3A_OFFSET 0x0000000c 384 #define TCL_DATA_CMD_RESERVED_3A_LSB 0 385 #define TCL_DATA_CMD_RESERVED_3A_MSB 15 386 #define TCL_DATA_CMD_RESERVED_3A_MASK 0x0000ffff 387 388 389 /* Description TCL_CMD_NUMBER 390 391 This number can be used by SW to track, identify and link 392 the created commands with the command statuses 393 394 Is set to the value 'TCL_CMD_Number' of the related TCL_DATA 395 command 396 <legal all> 397 */ 398 399 #define TCL_DATA_CMD_TCL_CMD_NUMBER_OFFSET 0x0000000c 400 #define TCL_DATA_CMD_TCL_CMD_NUMBER_LSB 16 401 #define TCL_DATA_CMD_TCL_CMD_NUMBER_MSB 31 402 #define TCL_DATA_CMD_TCL_CMD_NUMBER_MASK 0xffff0000 403 404 405 /* Description DATA_LENGTH 406 407 Valid Data length in bytes. 408 409 MSDU length in case of direct descriptor. 410 Length of link extension descriptor in case of Link extension 411 descriptor. This is used to know the size of Metadata. 412 <legal all> 413 */ 414 415 #define TCL_DATA_CMD_DATA_LENGTH_OFFSET 0x00000010 416 #define TCL_DATA_CMD_DATA_LENGTH_LSB 0 417 #define TCL_DATA_CMD_DATA_LENGTH_MSB 15 418 #define TCL_DATA_CMD_DATA_LENGTH_MASK 0x0000ffff 419 420 421 /* Description IPV4_CHECKSUM_EN 422 423 OLE related control 424 Enable IPv4 checksum replacement 425 */ 426 427 #define TCL_DATA_CMD_IPV4_CHECKSUM_EN_OFFSET 0x00000010 428 #define TCL_DATA_CMD_IPV4_CHECKSUM_EN_LSB 16 429 #define TCL_DATA_CMD_IPV4_CHECKSUM_EN_MSB 16 430 #define TCL_DATA_CMD_IPV4_CHECKSUM_EN_MASK 0x00010000 431 432 433 /* Description UDP_OVER_IPV4_CHECKSUM_EN 434 435 OLE related control 436 Enable UDP over IPv4 checksum replacement. UDP checksum 437 over IPv4 is optional for TCP/IP stacks. 438 */ 439 440 #define TCL_DATA_CMD_UDP_OVER_IPV4_CHECKSUM_EN_OFFSET 0x00000010 441 #define TCL_DATA_CMD_UDP_OVER_IPV4_CHECKSUM_EN_LSB 17 442 #define TCL_DATA_CMD_UDP_OVER_IPV4_CHECKSUM_EN_MSB 17 443 #define TCL_DATA_CMD_UDP_OVER_IPV4_CHECKSUM_EN_MASK 0x00020000 444 445 446 /* Description UDP_OVER_IPV6_CHECKSUM_EN 447 448 OLE related control 449 Enable UDP over IPv6 checksum replacement. UDP checksum 450 over IPv6 is mandatory for TCP/IP stacks. 451 */ 452 453 #define TCL_DATA_CMD_UDP_OVER_IPV6_CHECKSUM_EN_OFFSET 0x00000010 454 #define TCL_DATA_CMD_UDP_OVER_IPV6_CHECKSUM_EN_LSB 18 455 #define TCL_DATA_CMD_UDP_OVER_IPV6_CHECKSUM_EN_MSB 18 456 #define TCL_DATA_CMD_UDP_OVER_IPV6_CHECKSUM_EN_MASK 0x00040000 457 458 459 /* Description TCP_OVER_IPV4_CHECKSUM_EN 460 461 OLE related control 462 Enable TCP checksum over IPv4 replacement 463 */ 464 465 #define TCL_DATA_CMD_TCP_OVER_IPV4_CHECKSUM_EN_OFFSET 0x00000010 466 #define TCL_DATA_CMD_TCP_OVER_IPV4_CHECKSUM_EN_LSB 19 467 #define TCL_DATA_CMD_TCP_OVER_IPV4_CHECKSUM_EN_MSB 19 468 #define TCL_DATA_CMD_TCP_OVER_IPV4_CHECKSUM_EN_MASK 0x00080000 469 470 471 /* Description TCP_OVER_IPV6_CHECKSUM_EN 472 473 OLE related control 474 Enable TCP checksum over IPv6 replacement 475 */ 476 477 #define TCL_DATA_CMD_TCP_OVER_IPV6_CHECKSUM_EN_OFFSET 0x00000010 478 #define TCL_DATA_CMD_TCP_OVER_IPV6_CHECKSUM_EN_LSB 20 479 #define TCL_DATA_CMD_TCP_OVER_IPV6_CHECKSUM_EN_MSB 20 480 #define TCL_DATA_CMD_TCP_OVER_IPV6_CHECKSUM_EN_MASK 0x00100000 481 482 483 /* Description TO_FW 484 485 Forward packet to FW along with classification result. The 486 packet will not be forward to TQM when this bit is set 487 488 1'b0: Use classification result to forward the packet. 489 1'b1: Override classification result and forward packet 490 only to FW. 491 <legal all> 492 */ 493 494 #define TCL_DATA_CMD_TO_FW_OFFSET 0x00000010 495 #define TCL_DATA_CMD_TO_FW_LSB 21 496 #define TCL_DATA_CMD_TO_FW_MSB 21 497 #define TCL_DATA_CMD_TO_FW_MASK 0x00200000 498 499 500 /* Description RESERVED_4A 501 502 <legal 0> 503 */ 504 505 #define TCL_DATA_CMD_RESERVED_4A_OFFSET 0x00000010 506 #define TCL_DATA_CMD_RESERVED_4A_LSB 22 507 #define TCL_DATA_CMD_RESERVED_4A_MSB 22 508 #define TCL_DATA_CMD_RESERVED_4A_MASK 0x00400000 509 510 511 /* Description PACKET_OFFSET 512 513 Packet offset from Metadata in case of direct buffer descriptor. 514 This field is valid when Buf_or_ext_desc_type is reset(= 515 0). 516 <legal all> 517 */ 518 519 #define TCL_DATA_CMD_PACKET_OFFSET_OFFSET 0x00000010 520 #define TCL_DATA_CMD_PACKET_OFFSET_LSB 23 521 #define TCL_DATA_CMD_PACKET_OFFSET_MSB 31 522 #define TCL_DATA_CMD_PACKET_OFFSET_MASK 0xff800000 523 524 525 /* Description HLOS_TID_OVERWRITE 526 527 When set, TCL shall ignore the IP DSCP and VLAN PCP fields 528 and use HLOS_TID as the final TID. Otherwise TCL shall 529 consider the DSCP and PCP fields as well as HLOS_TID and 530 choose a final TID based on the configured priority 531 <legal all> 532 */ 533 534 #define TCL_DATA_CMD_HLOS_TID_OVERWRITE_OFFSET 0x00000014 535 #define TCL_DATA_CMD_HLOS_TID_OVERWRITE_LSB 0 536 #define TCL_DATA_CMD_HLOS_TID_OVERWRITE_MSB 0 537 #define TCL_DATA_CMD_HLOS_TID_OVERWRITE_MASK 0x00000001 538 539 540 /* Description FLOW_OVERRIDE_ENABLE 541 542 TCL uses this to select the flow pointer from the peer table, 543 which can be overridden by SW for pre-encrypted raw WiFi 544 packets that cannot be parsed for UDP or for other MLO 545 or enterprise use cases: 546 <enum 0 FP_PARSE_IP> Use the flow-pointer based on parsing 547 the IPv4 or IPv6 header. 548 <enum 1 FP_USE_OVERRIDE> Use the who_classify_info_sel and 549 flow_override fields to select the flow-pointer. 550 <legal all> 551 */ 552 553 #define TCL_DATA_CMD_FLOW_OVERRIDE_ENABLE_OFFSET 0x00000014 554 #define TCL_DATA_CMD_FLOW_OVERRIDE_ENABLE_LSB 1 555 #define TCL_DATA_CMD_FLOW_OVERRIDE_ENABLE_MSB 1 556 #define TCL_DATA_CMD_FLOW_OVERRIDE_ENABLE_MASK 0x00000002 557 558 559 /* Description WHO_CLASSIFY_INFO_SEL 560 561 Field only valid when flow_override_enable is set to FP_USE_OVERRIDE. 562 563 564 This field is used to select one of the 'WHO_CLASSIFY_INFO's 565 in the peer table in case more than 2 flows are mapped 566 to a single TID. 567 0: To choose Flow 0 and 1 of any TID use this value. 568 1: To choose Flow 2 and 3 of any TID use this value. 569 2: To choose Flow 4 and 5 of any TID use this value. 570 3: To choose Flow 6 and 7 of any TID use this value. 571 572 If who_classify_info sel is not in sync with the num_tx_classify_info 573 field from address search, then TCL will set 'who_classify_info_sel' 574 to 0 use flows 0 and 1. 575 <legal all> 576 */ 577 578 #define TCL_DATA_CMD_WHO_CLASSIFY_INFO_SEL_OFFSET 0x00000014 579 #define TCL_DATA_CMD_WHO_CLASSIFY_INFO_SEL_LSB 2 580 #define TCL_DATA_CMD_WHO_CLASSIFY_INFO_SEL_MSB 3 581 #define TCL_DATA_CMD_WHO_CLASSIFY_INFO_SEL_MASK 0x0000000c 582 583 584 /* Description HLOS_TID 585 586 HLOS MSDU priority 587 588 Field is used when HLOS_TID_overwrite is set or flow_override_enable 589 is set to FP_USE_OVERRIDE. 590 591 Field is also used when HLOS_TID_overwrite is not set and 592 DSCP/PCP is not available in the packet. 593 <legal all> 594 */ 595 596 #define TCL_DATA_CMD_HLOS_TID_OFFSET 0x00000014 597 #define TCL_DATA_CMD_HLOS_TID_LSB 4 598 #define TCL_DATA_CMD_HLOS_TID_MSB 7 599 #define TCL_DATA_CMD_HLOS_TID_MASK 0x000000f0 600 601 602 /* Description FLOW_OVERRIDE 603 604 Field only valid when flow_override_enable is set to FP_USE_OVERRIDE. 605 606 607 TCL uses this to select the flow pointer from the peer table, 608 which can be overridden by SW for pre-encrypted raw WiFi 609 packets that cannot be parsed for UDP or for other MLO 610 or enterprise use cases: 611 <enum 0 FP_USE_NON_UDP> Use the non-UDP flow pointer (flow 612 0) 613 <enum 1 FP_USE_UDP> Use the UDP flow pointer (flow 1) 614 615 <legal all> 616 */ 617 618 #define TCL_DATA_CMD_FLOW_OVERRIDE_OFFSET 0x00000014 619 #define TCL_DATA_CMD_FLOW_OVERRIDE_LSB 8 620 #define TCL_DATA_CMD_FLOW_OVERRIDE_MSB 8 621 #define TCL_DATA_CMD_FLOW_OVERRIDE_MASK 0x00000100 622 623 624 /* Description PMAC_ID 625 626 TCL uses this PMAC_ID in address search, i.e, while finding 627 matching entry for the packet in AST corresponding to given 628 PMAC_ID 629 If PMAC ID is all 1s (=> value 3), it indicates wildcard 630 match for any PMAC 631 <legal 0-3> 632 */ 633 634 #define TCL_DATA_CMD_PMAC_ID_OFFSET 0x00000014 635 #define TCL_DATA_CMD_PMAC_ID_LSB 9 636 #define TCL_DATA_CMD_PMAC_ID_MSB 10 637 #define TCL_DATA_CMD_PMAC_ID_MASK 0x00000600 638 639 640 /* Description MSDU_COLOR 641 642 Consumer: TQM 643 Producer: SW 644 645 TCL copies this value to 'TQM_ENTRANCE_RING' in the structure 646 'TX_MSDU_DETAILS' field msdu_color. 647 648 When set, TQM will check the color and choose the color 649 based threshold with which it will decide if the MSDU has 650 to be dropped. 651 652 <enum 0 MSDU_COLORLESS> MSDUs which have no color and TQM 653 uses legacy drop thresholds for these MSDUs. 654 <enum 1 MSDU_COLOR_GREEN> 655 <enum 2 MSDU_COLOR_YELLOW> 656 <enum 3 MSDU_COLOR_RED> 657 <legal 0-3> 658 */ 659 660 #define TCL_DATA_CMD_MSDU_COLOR_OFFSET 0x00000014 661 #define TCL_DATA_CMD_MSDU_COLOR_LSB 11 662 #define TCL_DATA_CMD_MSDU_COLOR_MSB 12 663 #define TCL_DATA_CMD_MSDU_COLOR_MASK 0x00001800 664 665 666 /* Description RESERVED_5A 667 668 <legal 0> 669 */ 670 671 #define TCL_DATA_CMD_RESERVED_5A_OFFSET 0x00000014 672 #define TCL_DATA_CMD_RESERVED_5A_LSB 13 673 #define TCL_DATA_CMD_RESERVED_5A_MSB 23 674 #define TCL_DATA_CMD_RESERVED_5A_MASK 0x00ffe000 675 676 677 /* Description VDEV_ID 678 679 Virtual device ID to check against the address search entry 680 to avoid security issues from transmitting packets from 681 an incorrect virtual device 682 <legal all> 683 */ 684 685 #define TCL_DATA_CMD_VDEV_ID_OFFSET 0x00000014 686 #define TCL_DATA_CMD_VDEV_ID_LSB 24 687 #define TCL_DATA_CMD_VDEV_ID_MSB 31 688 #define TCL_DATA_CMD_VDEV_ID_MASK 0xff000000 689 690 691 /* Description SEARCH_INDEX 692 693 The index that will be used for index based address or flow 694 search. The field is valid when 'search_type' is 1 or 695 2. 696 <legal all> 697 */ 698 699 #define TCL_DATA_CMD_SEARCH_INDEX_OFFSET 0x00000018 700 #define TCL_DATA_CMD_SEARCH_INDEX_LSB 0 701 #define TCL_DATA_CMD_SEARCH_INDEX_MSB 19 702 #define TCL_DATA_CMD_SEARCH_INDEX_MASK 0x000fffff 703 704 705 /* Description CACHE_SET_NUM 706 707 Cache set number that should be used to cache the index 708 based search results, for address and flow search. This 709 value should be equal to LSB four bits of the hash value 710 of match data, in case of search index points to an entry 711 which may be used in content based search also. The value 712 can be anything when the entry pointed by search index 713 will not be used for content based search. 714 <legal all> 715 */ 716 717 #define TCL_DATA_CMD_CACHE_SET_NUM_OFFSET 0x00000018 718 #define TCL_DATA_CMD_CACHE_SET_NUM_LSB 20 719 #define TCL_DATA_CMD_CACHE_SET_NUM_MSB 23 720 #define TCL_DATA_CMD_CACHE_SET_NUM_MASK 0x00f00000 721 722 723 /* Description INDEX_LOOKUP_OVERRIDE 724 725 When set, address search and packet routing is forced to 726 use 'search_index' instead of following the register configuration 727 seleced by Bank_id. 728 <legal all> 729 */ 730 731 #define TCL_DATA_CMD_INDEX_LOOKUP_OVERRIDE_OFFSET 0x00000018 732 #define TCL_DATA_CMD_INDEX_LOOKUP_OVERRIDE_LSB 24 733 #define TCL_DATA_CMD_INDEX_LOOKUP_OVERRIDE_MSB 24 734 #define TCL_DATA_CMD_INDEX_LOOKUP_OVERRIDE_MASK 0x01000000 735 736 737 /* Description RESERVED_6A 738 739 <legal 0> 740 */ 741 742 #define TCL_DATA_CMD_RESERVED_6A_OFFSET 0x00000018 743 #define TCL_DATA_CMD_RESERVED_6A_LSB 25 744 #define TCL_DATA_CMD_RESERVED_6A_MSB 31 745 #define TCL_DATA_CMD_RESERVED_6A_MASK 0xfe000000 746 747 748 /* Description RESERVED_7A 749 750 <legal 0> 751 */ 752 753 #define TCL_DATA_CMD_RESERVED_7A_OFFSET 0x0000001c 754 #define TCL_DATA_CMD_RESERVED_7A_LSB 0 755 #define TCL_DATA_CMD_RESERVED_7A_MSB 19 756 #define TCL_DATA_CMD_RESERVED_7A_MASK 0x000fffff 757 758 759 /* Description RING_ID 760 761 The buffer pointer ring ID. 762 0 refers to the IDLE ring 763 1 - N refers to other rings 764 765 Helps with debugging when dumping ring contents. 766 <legal all> 767 */ 768 769 #define TCL_DATA_CMD_RING_ID_OFFSET 0x0000001c 770 #define TCL_DATA_CMD_RING_ID_LSB 20 771 #define TCL_DATA_CMD_RING_ID_MSB 27 772 #define TCL_DATA_CMD_RING_ID_MASK 0x0ff00000 773 774 775 /* Description LOOPING_COUNT 776 777 A count value that indicates the number of times the producer 778 of entries into the Ring has looped around the ring. 779 At initialization time, this value is set to 0. On the first 780 loop, this value is set to 1. After the max value is reached 781 allowed by the number of bits for this field, the count 782 value continues with 0 again. 783 784 In case SW is the consumer of the ring entries, it can use 785 this field to figure out up to where the producer of entries 786 has created new entries. This eliminates the need to check 787 where the "head pointer' of the ring is located once the 788 SW starts processing an interrupt indicating that new entries 789 have been put into this ring... 790 791 Also note that SW if it wants only needs to look at the 792 LSB bit of this count value. 793 <legal all> 794 */ 795 796 #define TCL_DATA_CMD_LOOPING_COUNT_OFFSET 0x0000001c 797 #define TCL_DATA_CMD_LOOPING_COUNT_LSB 28 798 #define TCL_DATA_CMD_LOOPING_COUNT_MSB 31 799 #define TCL_DATA_CMD_LOOPING_COUNT_MASK 0xf0000000 800 801 802 803 #endif // TCL_DATA_CMD 804