| |
| /* Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved. |
| * |
| * Permission to use, copy, modify, and/or distribute this software for any |
| * purpose with or without fee is hereby granted, provided that the above |
| * copyright notice and this permission notice appear in all copies. |
| * |
| * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
| * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
| * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
| * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
| * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
| * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
| * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
| */ |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| #ifndef _RX_MSDU_DESC_INFO_H_ |
| #define _RX_MSDU_DESC_INFO_H_ |
| #if !defined(__ASSEMBLER__) |
| #endif |
| |
| #define NUM_OF_DWORDS_RX_MSDU_DESC_INFO 1 |
| |
| |
| struct rx_msdu_desc_info { |
| #ifndef WIFI_BIT_ORDER_BIG_ENDIAN |
| uint32_t first_msdu_in_mpdu_flag : 1, // [0:0] |
| last_msdu_in_mpdu_flag : 1, // [1:1] |
| msdu_continuation : 1, // [2:2] |
| msdu_length : 14, // [16:3] |
| msdu_drop : 1, // [17:17] |
| sa_is_valid : 1, // [18:18] |
| da_is_valid : 1, // [19:19] |
| da_is_mcbc : 1, // [20:20] |
| l3_header_padding_msb : 1, // [21:21] |
| tcp_udp_chksum_fail : 1, // [22:22] |
| ip_chksum_fail : 1, // [23:23] |
| fr_ds : 1, // [24:24] |
| to_ds : 1, // [25:25] |
| intra_bss : 1, // [26:26] |
| dest_chip_id : 2, // [28:27] |
| decap_format : 2, // [30:29] |
| dest_chip_pmac_id : 1; // [31:31] |
| #else |
| uint32_t dest_chip_pmac_id : 1, // [31:31] |
| decap_format : 2, // [30:29] |
| dest_chip_id : 2, // [28:27] |
| intra_bss : 1, // [26:26] |
| to_ds : 1, // [25:25] |
| fr_ds : 1, // [24:24] |
| ip_chksum_fail : 1, // [23:23] |
| tcp_udp_chksum_fail : 1, // [22:22] |
| l3_header_padding_msb : 1, // [21:21] |
| da_is_mcbc : 1, // [20:20] |
| da_is_valid : 1, // [19:19] |
| sa_is_valid : 1, // [18:18] |
| msdu_drop : 1, // [17:17] |
| msdu_length : 14, // [16:3] |
| msdu_continuation : 1, // [2:2] |
| last_msdu_in_mpdu_flag : 1, // [1:1] |
| first_msdu_in_mpdu_flag : 1; // [0:0] |
| #endif |
| }; |
| |
| |
| /* Description FIRST_MSDU_IN_MPDU_FLAG |
| |
| Parsed from RX_MSDU_END TLV . In the case MSDU spans over |
| multiple buffers, this field will be valid in the Last |
| buffer used by the MSDU |
| |
| <enum 0 Not_first_msdu> This is not the first MSDU in the |
| MPDU. |
| <enum 1 first_msdu> This MSDU is the first one in the MPDU. |
| |
| |
| <legal all> |
| */ |
| |
| #define RX_MSDU_DESC_INFO_FIRST_MSDU_IN_MPDU_FLAG_OFFSET 0x00000000 |
| #define RX_MSDU_DESC_INFO_FIRST_MSDU_IN_MPDU_FLAG_LSB 0 |
| #define RX_MSDU_DESC_INFO_FIRST_MSDU_IN_MPDU_FLAG_MSB 0 |
| #define RX_MSDU_DESC_INFO_FIRST_MSDU_IN_MPDU_FLAG_MASK 0x00000001 |
| |
| |
| /* Description LAST_MSDU_IN_MPDU_FLAG |
| |
| Consumer: WBM/REO/SW/FW |
| Producer: RXDMA |
| |
| Parsed from RX_MSDU_END TLV . In the case MSDU spans over |
| multiple buffers, this field will be valid in the Last |
| buffer used by the MSDU |
| |
| <enum 0 Not_last_msdu> There are more MSDUs linked to this |
| MSDU that belongs to this MPDU |
| <enum 1 Last_msdu> this MSDU is the last one in the MPDU. |
| This setting is only allowed in combination with 'Msdu_continuation' |
| set to 0. This implies that when an msdu is spread out over |
| multiple buffers and thus msdu_continuation is set, only |
| for the very last buffer of the msdu, can the 'last_msdu_in_mpdu_flag' |
| be set. |
| |
| When both first_msdu_in_mpdu_flag and last_msdu_in_mpdu_flag |
| are set, the MPDU that this MSDU belongs to only contains |
| a single MSDU. |
| |
| |
| <legal all> |
| */ |
| |
| #define RX_MSDU_DESC_INFO_LAST_MSDU_IN_MPDU_FLAG_OFFSET 0x00000000 |
| #define RX_MSDU_DESC_INFO_LAST_MSDU_IN_MPDU_FLAG_LSB 1 |
| #define RX_MSDU_DESC_INFO_LAST_MSDU_IN_MPDU_FLAG_MSB 1 |
| #define RX_MSDU_DESC_INFO_LAST_MSDU_IN_MPDU_FLAG_MASK 0x00000002 |
| |
| |
| /* Description MSDU_CONTINUATION |
| |
| When set, this MSDU buffer was not able to hold the entire |
| MSDU. The next buffer will therefor contain additional |
| information related to this MSDU. |
| |
| <legal all> |
| */ |
| |
| #define RX_MSDU_DESC_INFO_MSDU_CONTINUATION_OFFSET 0x00000000 |
| #define RX_MSDU_DESC_INFO_MSDU_CONTINUATION_LSB 2 |
| #define RX_MSDU_DESC_INFO_MSDU_CONTINUATION_MSB 2 |
| #define RX_MSDU_DESC_INFO_MSDU_CONTINUATION_MASK 0x00000004 |
| |
| |
| /* Description MSDU_LENGTH |
| |
| Parsed from RX_MSDU_START TLV . In the case MSDU spans over |
| multiple buffers, this field will be valid in the First |
| buffer used by MSDU. |
| |
| Full MSDU length in bytes after decapsulation. |
| |
| This field is still valid for MPDU frames without A-MSDU. |
| It still represents MSDU length after decapsulation |
| |
| Or in case of RAW MPDUs, it indicates the length of the |
| entire MPDU (without FCS field) |
| <legal all> |
| */ |
| |
| #define RX_MSDU_DESC_INFO_MSDU_LENGTH_OFFSET 0x00000000 |
| #define RX_MSDU_DESC_INFO_MSDU_LENGTH_LSB 3 |
| #define RX_MSDU_DESC_INFO_MSDU_LENGTH_MSB 16 |
| #define RX_MSDU_DESC_INFO_MSDU_LENGTH_MASK 0x0001fff8 |
| |
| |
| /* Description MSDU_DROP |
| |
| Parsed from RX_MSDU_END TLV . In the case MSDU spans over |
| multiple buffers, this field will be valid in the Last |
| buffer used by the MSDU |
| |
| When set, REO shall drop this MSDU and not forward it to |
| any other ring... |
| <legal all> |
| */ |
| |
| #define RX_MSDU_DESC_INFO_MSDU_DROP_OFFSET 0x00000000 |
| #define RX_MSDU_DESC_INFO_MSDU_DROP_LSB 17 |
| #define RX_MSDU_DESC_INFO_MSDU_DROP_MSB 17 |
| #define RX_MSDU_DESC_INFO_MSDU_DROP_MASK 0x00020000 |
| |
| |
| /* Description SA_IS_VALID |
| |
| Parsed from RX_MSDU_END TLV . In the case MSDU spans over |
| multiple buffers, this field will be valid in the Last |
| buffer used by the MSDU |
| |
| Indicates that OLE found a valid SA entry for this MSDU |
| <legal all> |
| */ |
| |
| #define RX_MSDU_DESC_INFO_SA_IS_VALID_OFFSET 0x00000000 |
| #define RX_MSDU_DESC_INFO_SA_IS_VALID_LSB 18 |
| #define RX_MSDU_DESC_INFO_SA_IS_VALID_MSB 18 |
| #define RX_MSDU_DESC_INFO_SA_IS_VALID_MASK 0x00040000 |
| |
| |
| /* Description DA_IS_VALID |
| |
| Parsed from RX_MSDU_END TLV . In the case MSDU spans over |
| multiple buffers, this field will be valid in the Last |
| buffer used by the MSDU |
| |
| Indicates that OLE found a valid DA entry for this MSDU |
| <legal all> |
| */ |
| |
| #define RX_MSDU_DESC_INFO_DA_IS_VALID_OFFSET 0x00000000 |
| #define RX_MSDU_DESC_INFO_DA_IS_VALID_LSB 19 |
| #define RX_MSDU_DESC_INFO_DA_IS_VALID_MSB 19 |
| #define RX_MSDU_DESC_INFO_DA_IS_VALID_MASK 0x00080000 |
| |
| |
| /* Description DA_IS_MCBC |
| |
| Field Only valid if "da_is_valid" is set |
| |
| Indicates the DA address was a Multicast of Broadcast address |
| for this MSDU |
| <legal all> |
| */ |
| |
| #define RX_MSDU_DESC_INFO_DA_IS_MCBC_OFFSET 0x00000000 |
| #define RX_MSDU_DESC_INFO_DA_IS_MCBC_LSB 20 |
| #define RX_MSDU_DESC_INFO_DA_IS_MCBC_MSB 20 |
| #define RX_MSDU_DESC_INFO_DA_IS_MCBC_MASK 0x00100000 |
| |
| |
| /* Description L3_HEADER_PADDING_MSB |
| |
| Passed on from 'RX_MSDU_END' TLV (only the MSB is reported |
| as the LSB is always zero) |
| Number of bytes padded to make sure that the L3 header will |
| always start of a Dword boundary |
| <legal all> |
| */ |
| |
| #define RX_MSDU_DESC_INFO_L3_HEADER_PADDING_MSB_OFFSET 0x00000000 |
| #define RX_MSDU_DESC_INFO_L3_HEADER_PADDING_MSB_LSB 21 |
| #define RX_MSDU_DESC_INFO_L3_HEADER_PADDING_MSB_MSB 21 |
| #define RX_MSDU_DESC_INFO_L3_HEADER_PADDING_MSB_MASK 0x00200000 |
| |
| |
| /* Description TCP_UDP_CHKSUM_FAIL |
| |
| Passed on from 'RX_ATTENTION' TLV |
| Indicates that the computed checksum did not match the checksum |
| in the TCP/UDP header. |
| <legal all> |
| */ |
| |
| #define RX_MSDU_DESC_INFO_TCP_UDP_CHKSUM_FAIL_OFFSET 0x00000000 |
| #define RX_MSDU_DESC_INFO_TCP_UDP_CHKSUM_FAIL_LSB 22 |
| #define RX_MSDU_DESC_INFO_TCP_UDP_CHKSUM_FAIL_MSB 22 |
| #define RX_MSDU_DESC_INFO_TCP_UDP_CHKSUM_FAIL_MASK 0x00400000 |
| |
| |
| /* Description IP_CHKSUM_FAIL |
| |
| Passed on from 'RX_ATTENTION' TLV |
| Indicates that the computed checksum did not match the checksum |
| in the IP header. |
| <legal all> |
| */ |
| |
| #define RX_MSDU_DESC_INFO_IP_CHKSUM_FAIL_OFFSET 0x00000000 |
| #define RX_MSDU_DESC_INFO_IP_CHKSUM_FAIL_LSB 23 |
| #define RX_MSDU_DESC_INFO_IP_CHKSUM_FAIL_MSB 23 |
| #define RX_MSDU_DESC_INFO_IP_CHKSUM_FAIL_MASK 0x00800000 |
| |
| |
| /* Description FR_DS |
| |
| Passed on from 'RX_MPDU_INFO' structure in 'RX_MPDU_START' |
| TLV |
| Set if the 'from DS' bit is set in the frame control. |
| <legal all> |
| */ |
| |
| #define RX_MSDU_DESC_INFO_FR_DS_OFFSET 0x00000000 |
| #define RX_MSDU_DESC_INFO_FR_DS_LSB 24 |
| #define RX_MSDU_DESC_INFO_FR_DS_MSB 24 |
| #define RX_MSDU_DESC_INFO_FR_DS_MASK 0x01000000 |
| |
| |
| /* Description TO_DS |
| |
| Passed on from 'RX_MPDU_INFO' structure in 'RX_MPDU_START' |
| TLV |
| Set if the 'to DS' bit is set in the frame control. |
| <legal all> |
| */ |
| |
| #define RX_MSDU_DESC_INFO_TO_DS_OFFSET 0x00000000 |
| #define RX_MSDU_DESC_INFO_TO_DS_LSB 25 |
| #define RX_MSDU_DESC_INFO_TO_DS_MSB 25 |
| #define RX_MSDU_DESC_INFO_TO_DS_MASK 0x02000000 |
| |
| |
| /* Description INTRA_BSS |
| |
| This packet needs intra-BSS routing by SW as the 'vdev_id' |
| for the destination is the same as the 'vdev_id' (from 'RX_MPDU_PCU_START') |
| that this MSDU was got in. |
| |
| <legal all> |
| */ |
| |
| #define RX_MSDU_DESC_INFO_INTRA_BSS_OFFSET 0x00000000 |
| #define RX_MSDU_DESC_INFO_INTRA_BSS_LSB 26 |
| #define RX_MSDU_DESC_INFO_INTRA_BSS_MSB 26 |
| #define RX_MSDU_DESC_INFO_INTRA_BSS_MASK 0x04000000 |
| |
| |
| /* Description DEST_CHIP_ID |
| |
| If intra_bss is set, copied by RXOLE/RXDMA from 'ADDR_SEARCH_ENTRY' |
| to support intra-BSS routing with multi-chip multi-link |
| operation. |
| |
| This indicates into which chip's TCL the packet should be |
| queued. |
| |
| <legal all> |
| */ |
| |
| #define RX_MSDU_DESC_INFO_DEST_CHIP_ID_OFFSET 0x00000000 |
| #define RX_MSDU_DESC_INFO_DEST_CHIP_ID_LSB 27 |
| #define RX_MSDU_DESC_INFO_DEST_CHIP_ID_MSB 28 |
| #define RX_MSDU_DESC_INFO_DEST_CHIP_ID_MASK 0x18000000 |
| |
| |
| /* Description DECAP_FORMAT |
| |
| Indicates the format after decapsulation: |
| |
| <enum 0 RAW> No encapsulation |
| <enum 1 Native_WiFi> |
| <enum 2 Ethernet> Ethernet 2 (DIX) or 802.3 (uses SNAP/LLC) |
| |
| <enum 3 802_3> Indicate Ethernet |
| |
| <legal all> |
| */ |
| |
| #define RX_MSDU_DESC_INFO_DECAP_FORMAT_OFFSET 0x00000000 |
| #define RX_MSDU_DESC_INFO_DECAP_FORMAT_LSB 29 |
| #define RX_MSDU_DESC_INFO_DECAP_FORMAT_MSB 30 |
| #define RX_MSDU_DESC_INFO_DECAP_FORMAT_MASK 0x60000000 |
| |
| |
| /* Description DEST_CHIP_PMAC_ID |
| |
| If intra_bss is set, copied by RXOLE/RXDMA from 'ADDR_SEARCH_ENTRY' |
| to support intra-BSS routing with multi-chip multi-link |
| operation. |
| |
| This indicates into which link/'vdev' the packet should |
| be queued in TCL. |
| |
| <legal all> |
| */ |
| |
| #define RX_MSDU_DESC_INFO_DEST_CHIP_PMAC_ID_OFFSET 0x00000000 |
| #define RX_MSDU_DESC_INFO_DEST_CHIP_PMAC_ID_LSB 31 |
| #define RX_MSDU_DESC_INFO_DEST_CHIP_PMAC_ID_MSB 31 |
| #define RX_MSDU_DESC_INFO_DEST_CHIP_PMAC_ID_MASK 0x80000000 |
| |
| |
| |
| #endif // RX_MSDU_DESC_INFO |