blob: 08e64f353f34b5148f78a038748ec8e070998ef6 [file] [log] [blame]
/* 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 _TX_MPDU_START_H_
#define _TX_MPDU_START_H_
#if !defined(__ASSEMBLER__)
#endif
#define NUM_OF_DWORDS_TX_MPDU_START 10
#define NUM_OF_QWORDS_TX_MPDU_START 5
struct tx_mpdu_start {
#ifndef WIFI_BIT_ORDER_BIG_ENDIAN
uint32_t mpdu_length : 14, // [13:0]
frame_not_from_tqm : 1, // [14:14]
vht_control_present : 1, // [15:15]
mpdu_header_length : 8, // [23:16]
retry_count : 7, // [30:24]
wds : 1; // [31:31]
uint32_t pn_31_0 : 32; // [31:0]
uint32_t pn_47_32 : 16, // [15:0]
mpdu_sequence_number : 12, // [27:16]
raw_already_encrypted : 1, // [28:28]
frame_type : 2, // [30:29]
txdma_dropped_mpdu_warning : 1; // [31:31]
uint32_t iv_byte_0 : 8, // [7:0]
iv_byte_1 : 8, // [15:8]
iv_byte_2 : 8, // [23:16]
iv_byte_3 : 8; // [31:24]
uint32_t iv_byte_4 : 8, // [7:0]
iv_byte_5 : 8, // [15:8]
iv_byte_6 : 8, // [23:16]
iv_byte_7 : 8; // [31:24]
uint32_t iv_byte_8 : 8, // [7:0]
iv_byte_9 : 8, // [15:8]
iv_byte_10 : 8, // [23:16]
iv_byte_11 : 8; // [31:24]
uint32_t iv_byte_12 : 8, // [7:0]
iv_byte_13 : 8, // [15:8]
iv_byte_14 : 8, // [23:16]
iv_byte_15 : 8; // [31:24]
uint32_t iv_byte_16 : 8, // [7:0]
iv_byte_17 : 8, // [15:8]
iv_len : 5, // [20:16]
icv_len : 5, // [25:21]
vht_control_offset : 6; // [31:26]
uint32_t mpdu_type : 1, // [0:0]
transmit_bw_restriction : 1, // [1:1]
allowed_transmit_bw : 4, // [5:2]
tx_notify_frame : 3, // [8:6]
reserved_8a : 23; // [31:9]
uint32_t tlv64_padding : 32; // [31:0]
#else
uint32_t wds : 1, // [31:31]
retry_count : 7, // [30:24]
mpdu_header_length : 8, // [23:16]
vht_control_present : 1, // [15:15]
frame_not_from_tqm : 1, // [14:14]
mpdu_length : 14; // [13:0]
uint32_t pn_31_0 : 32; // [31:0]
uint32_t txdma_dropped_mpdu_warning : 1, // [31:31]
frame_type : 2, // [30:29]
raw_already_encrypted : 1, // [28:28]
mpdu_sequence_number : 12, // [27:16]
pn_47_32 : 16; // [15:0]
uint32_t iv_byte_3 : 8, // [31:24]
iv_byte_2 : 8, // [23:16]
iv_byte_1 : 8, // [15:8]
iv_byte_0 : 8; // [7:0]
uint32_t iv_byte_7 : 8, // [31:24]
iv_byte_6 : 8, // [23:16]
iv_byte_5 : 8, // [15:8]
iv_byte_4 : 8; // [7:0]
uint32_t iv_byte_11 : 8, // [31:24]
iv_byte_10 : 8, // [23:16]
iv_byte_9 : 8, // [15:8]
iv_byte_8 : 8; // [7:0]
uint32_t iv_byte_15 : 8, // [31:24]
iv_byte_14 : 8, // [23:16]
iv_byte_13 : 8, // [15:8]
iv_byte_12 : 8; // [7:0]
uint32_t vht_control_offset : 6, // [31:26]
icv_len : 5, // [25:21]
iv_len : 5, // [20:16]
iv_byte_17 : 8, // [15:8]
iv_byte_16 : 8; // [7:0]
uint32_t reserved_8a : 23, // [31:9]
tx_notify_frame : 3, // [8:6]
allowed_transmit_bw : 4, // [5:2]
transmit_bw_restriction : 1, // [1:1]
mpdu_type : 1; // [0:0]
uint32_t tlv64_padding : 32; // [31:0]
#endif
};
/* Description MPDU_LENGTH
Consumer: TXOLE/CRYPTO/TXPCU
Producer: TXDMA
Expected Length of the entire MPDU, which includes all MSDUs
within the MPDU and all OLE and Crypto processing. This
length includes the FCS field.
*/
#define TX_MPDU_START_MPDU_LENGTH_OFFSET 0x0000000000000000
#define TX_MPDU_START_MPDU_LENGTH_LSB 0
#define TX_MPDU_START_MPDU_LENGTH_MSB 13
#define TX_MPDU_START_MPDU_LENGTH_MASK 0x0000000000003fff
/* Description FRAME_NOT_FROM_TQM
When set, TXPCU shall not take this frame into account for
indicating to TQM how many frames from it's queue got transmitted.
TXDMA gets this field from the TX_MSDU_DETAILS STRUCT (of
the first MSDU in the MPDU) in the MSDU link descriptor.
SW sets this bit (in TX_MSDU_DETAILS STRUCT) when it generates
a frame outside of the TQM path and that frame can be intermingled
with the other frames from the TQM. For example a trigger
frame embedded or put in front of data frames from TQM
within the same A-MPDU. For this SW generated frame, TXPCU
shall not include this frame in the transmit frame count
that is reported to TQM as that would result in incorrect
reporting to TQM.
<legal all>
*/
#define TX_MPDU_START_FRAME_NOT_FROM_TQM_OFFSET 0x0000000000000000
#define TX_MPDU_START_FRAME_NOT_FROM_TQM_LSB 14
#define TX_MPDU_START_FRAME_NOT_FROM_TQM_MSB 14
#define TX_MPDU_START_FRAME_NOT_FROM_TQM_MASK 0x0000000000004000
/* Description VHT_CONTROL_PRESENT
TXOLE sets this bit when it added 4 placeholder bytes for
VHT-CONTROL field in the MPDU header.
For RAW frames, OLE will set this bit and compute vht_control_offset
when the order bit and QoS bit in frame_control field are
set to 1. For RAW management frame, this bit will be set
if order bit is set to 1.
Used by TXPCU, to find out if it needs to overwrite the
HE-CONTROL field.
<legal all>
*/
#define TX_MPDU_START_VHT_CONTROL_PRESENT_OFFSET 0x0000000000000000
#define TX_MPDU_START_VHT_CONTROL_PRESENT_LSB 15
#define TX_MPDU_START_VHT_CONTROL_PRESENT_MSB 15
#define TX_MPDU_START_VHT_CONTROL_PRESENT_MASK 0x0000000000008000
/* Description MPDU_HEADER_LENGTH
This field is filled in by the OLE
Used by PCU, This prevents PCU from having to do this again
(in the same way))
*/
#define TX_MPDU_START_MPDU_HEADER_LENGTH_OFFSET 0x0000000000000000
#define TX_MPDU_START_MPDU_HEADER_LENGTH_LSB 16
#define TX_MPDU_START_MPDU_HEADER_LENGTH_MSB 23
#define TX_MPDU_START_MPDU_HEADER_LENGTH_MASK 0x0000000000ff0000
/* Description RETRY_COUNT
Consumer: TXOLE/TXPCU
Producer: TXDMA
The number of times the frame is transmitted
<legal all>
*/
#define TX_MPDU_START_RETRY_COUNT_OFFSET 0x0000000000000000
#define TX_MPDU_START_RETRY_COUNT_LSB 24
#define TX_MPDU_START_RETRY_COUNT_MSB 30
#define TX_MPDU_START_RETRY_COUNT_MASK 0x000000007f000000
/* Description WDS
If set the current packet is 4-address frame.
Required because an aggregate can include some frames with
3 address format and other frames with 4 address format.
Used by the OLE during encapsulation.
TXDMA sets this when wds in the extension descriptor is
set.
If no extension descriptor is used for this MPDU, TXDMA
gets the setting for this bit from a control register in
TXDMA
<legal all>
*/
#define TX_MPDU_START_WDS_OFFSET 0x0000000000000000
#define TX_MPDU_START_WDS_LSB 31
#define TX_MPDU_START_WDS_MSB 31
#define TX_MPDU_START_WDS_MASK 0x0000000080000000
/* Description PN_31_0
Consumer: TXOLE
Producer: TXDMA
Bits 31 - 0 for the Packet Number used by encryption
<legal all>
*/
#define TX_MPDU_START_PN_31_0_OFFSET 0x0000000000000000
#define TX_MPDU_START_PN_31_0_LSB 32
#define TX_MPDU_START_PN_31_0_MSB 63
#define TX_MPDU_START_PN_31_0_MASK 0xffffffff00000000
/* Description PN_47_32
Consumer: TXOLE
Producer: TXDMA
Bits 47 - 32 for the Packet Number used by encryption
<legal all>
*/
#define TX_MPDU_START_PN_47_32_OFFSET 0x0000000000000008
#define TX_MPDU_START_PN_47_32_LSB 0
#define TX_MPDU_START_PN_47_32_MSB 15
#define TX_MPDU_START_PN_47_32_MASK 0x000000000000ffff
/* Description MPDU_SEQUENCE_NUMBER
Consumer: TXOLE
Producer: TXDMA
Sequence number assigned to this MPDU
<legal all>
*/
#define TX_MPDU_START_MPDU_SEQUENCE_NUMBER_OFFSET 0x0000000000000008
#define TX_MPDU_START_MPDU_SEQUENCE_NUMBER_LSB 16
#define TX_MPDU_START_MPDU_SEQUENCE_NUMBER_MSB 27
#define TX_MPDU_START_MPDU_SEQUENCE_NUMBER_MASK 0x000000000fff0000
/* Description RAW_ALREADY_ENCRYPTED
Consumer: CRYPTO
Producer: TXDMA
If set it indicates that the RAW MPDU has already been encrypted
and does not require HW encryption. If clear and if the
frame control indicates that this is a "protected" MPDU
and the peer key type indicates a cipher type then the
HW is expected to encrypt this packet.
<legal all>
*/
#define TX_MPDU_START_RAW_ALREADY_ENCRYPTED_OFFSET 0x0000000000000008
#define TX_MPDU_START_RAW_ALREADY_ENCRYPTED_LSB 28
#define TX_MPDU_START_RAW_ALREADY_ENCRYPTED_MSB 28
#define TX_MPDU_START_RAW_ALREADY_ENCRYPTED_MASK 0x0000000010000000
/* Description FRAME_TYPE
Consumer: TXMON
Producer: TXOLE
802.11 frame type field
TXDMA fills this as zero and TXOLE overwrites it.
<legal all>
*/
#define TX_MPDU_START_FRAME_TYPE_OFFSET 0x0000000000000008
#define TX_MPDU_START_FRAME_TYPE_LSB 29
#define TX_MPDU_START_FRAME_TYPE_MSB 30
#define TX_MPDU_START_FRAME_TYPE_MASK 0x0000000060000000
/* Description TXDMA_DROPPED_MPDU_WARNING
Consumer: FW
Producer: TXDMA
Indication to TXPCU to indicate to FW a warning that Tx
DMA has dropped MPDUs due to SFM FIFO full condition
<legal all>
*/
#define TX_MPDU_START_TXDMA_DROPPED_MPDU_WARNING_OFFSET 0x0000000000000008
#define TX_MPDU_START_TXDMA_DROPPED_MPDU_WARNING_LSB 31
#define TX_MPDU_START_TXDMA_DROPPED_MPDU_WARNING_MSB 31
#define TX_MPDU_START_TXDMA_DROPPED_MPDU_WARNING_MASK 0x0000000080000000
/* Description IV_BYTE_0
Byte 0 of the IV field of the MPDU
Based on the Encryption type the iv_byte_0 takes the appropriate
meaning. For IV formats, refer to the crypto MLDR document
*/
#define TX_MPDU_START_IV_BYTE_0_OFFSET 0x0000000000000008
#define TX_MPDU_START_IV_BYTE_0_LSB 32
#define TX_MPDU_START_IV_BYTE_0_MSB 39
#define TX_MPDU_START_IV_BYTE_0_MASK 0x000000ff00000000
/* Description IV_BYTE_1
Byte 1 of the IV field of the MPDU
Based on the Encryption type the iv_byte_1 takes the appropriate
meaning. For IV formats, refer to the crypto MLDR document
*/
#define TX_MPDU_START_IV_BYTE_1_OFFSET 0x0000000000000008
#define TX_MPDU_START_IV_BYTE_1_LSB 40
#define TX_MPDU_START_IV_BYTE_1_MSB 47
#define TX_MPDU_START_IV_BYTE_1_MASK 0x0000ff0000000000
/* Description IV_BYTE_2
Byte 2 of the IV field of the MDPU
Based on the Encryption type the iv_byte_2 takes the appropriate
meaning. For IV formats, refer to the crypto MLDR document
*/
#define TX_MPDU_START_IV_BYTE_2_OFFSET 0x0000000000000008
#define TX_MPDU_START_IV_BYTE_2_LSB 48
#define TX_MPDU_START_IV_BYTE_2_MSB 55
#define TX_MPDU_START_IV_BYTE_2_MASK 0x00ff000000000000
/* Description IV_BYTE_3
Byte 3 of the IV field of the MPDU
Based on the Encryption type the iv_byte_3 takes the appropriate
meaning. For IV formats, refer to the crypto MLDR document
*/
#define TX_MPDU_START_IV_BYTE_3_OFFSET 0x0000000000000008
#define TX_MPDU_START_IV_BYTE_3_LSB 56
#define TX_MPDU_START_IV_BYTE_3_MSB 63
#define TX_MPDU_START_IV_BYTE_3_MASK 0xff00000000000000
/* Description IV_BYTE_4
Byte 4 of the IV field of the MPDU
Based on the Encryption type the iv_byte_4 takes the appropriate
meaning. For IV formats, refer to the crypto MLDR document
*/
#define TX_MPDU_START_IV_BYTE_4_OFFSET 0x0000000000000010
#define TX_MPDU_START_IV_BYTE_4_LSB 0
#define TX_MPDU_START_IV_BYTE_4_MSB 7
#define TX_MPDU_START_IV_BYTE_4_MASK 0x00000000000000ff
/* Description IV_BYTE_5
Byte 5 of the IV field of the MPDU
Based on the Encryption type the iv_byte_5 takes the appropriate
meaning. For IV formats, refer to the crypto MLDR document
*/
#define TX_MPDU_START_IV_BYTE_5_OFFSET 0x0000000000000010
#define TX_MPDU_START_IV_BYTE_5_LSB 8
#define TX_MPDU_START_IV_BYTE_5_MSB 15
#define TX_MPDU_START_IV_BYTE_5_MASK 0x000000000000ff00
/* Description IV_BYTE_6
Byte 6 of the IV field of the MDPU
Based on the Encryption type the iv_byte_6 takes the appropriate
meaning. For IV formats, refer to the crypto MLDR document
*/
#define TX_MPDU_START_IV_BYTE_6_OFFSET 0x0000000000000010
#define TX_MPDU_START_IV_BYTE_6_LSB 16
#define TX_MPDU_START_IV_BYTE_6_MSB 23
#define TX_MPDU_START_IV_BYTE_6_MASK 0x0000000000ff0000
/* Description IV_BYTE_7
Byte 7 of the IV field of the MPDU
Based on the Encryption type the iv_byte_7 takes the appropriate
meaning. For IV formats, refer to the crypto MLDR document
*/
#define TX_MPDU_START_IV_BYTE_7_OFFSET 0x0000000000000010
#define TX_MPDU_START_IV_BYTE_7_LSB 24
#define TX_MPDU_START_IV_BYTE_7_MSB 31
#define TX_MPDU_START_IV_BYTE_7_MASK 0x00000000ff000000
/* Description IV_BYTE_8
Byte 8 of the IV field of the MPDU
Based on the Encryption type the iv_byte_8 takes the appropriate
meaning. For IV formats, refer to the crypto MLDR document
*/
#define TX_MPDU_START_IV_BYTE_8_OFFSET 0x0000000000000010
#define TX_MPDU_START_IV_BYTE_8_LSB 32
#define TX_MPDU_START_IV_BYTE_8_MSB 39
#define TX_MPDU_START_IV_BYTE_8_MASK 0x000000ff00000000
/* Description IV_BYTE_9
Byte 9 of the IV field of the MPDU
Based on the Encryption type the iv_byte_9 takes the appropriate
meaning. For IV formats, refer to the crypto MLDR document
*/
#define TX_MPDU_START_IV_BYTE_9_OFFSET 0x0000000000000010
#define TX_MPDU_START_IV_BYTE_9_LSB 40
#define TX_MPDU_START_IV_BYTE_9_MSB 47
#define TX_MPDU_START_IV_BYTE_9_MASK 0x0000ff0000000000
/* Description IV_BYTE_10
Byte 10 of the IV field of the MDPU
Based on the Encryption type the iv_byte_10 takes the appropriate
meaning. For IV formats, refer to the crypto MLDR document
*/
#define TX_MPDU_START_IV_BYTE_10_OFFSET 0x0000000000000010
#define TX_MPDU_START_IV_BYTE_10_LSB 48
#define TX_MPDU_START_IV_BYTE_10_MSB 55
#define TX_MPDU_START_IV_BYTE_10_MASK 0x00ff000000000000
/* Description IV_BYTE_11
Byte 11 of the IV field of the MPDU
Based on the Encryption type the iv_byte_11 takes the appropriate
meaning. For IV formats, refer to the crypto MLDR document
*/
#define TX_MPDU_START_IV_BYTE_11_OFFSET 0x0000000000000010
#define TX_MPDU_START_IV_BYTE_11_LSB 56
#define TX_MPDU_START_IV_BYTE_11_MSB 63
#define TX_MPDU_START_IV_BYTE_11_MASK 0xff00000000000000
/* Description IV_BYTE_12
Byte 8 of the IV field of the MPDU
Based on the Encryption type the iv_byte_12 takes the appropriate
meaning. For IV formats, refer to the crypto MLDR document
*/
#define TX_MPDU_START_IV_BYTE_12_OFFSET 0x0000000000000018
#define TX_MPDU_START_IV_BYTE_12_LSB 0
#define TX_MPDU_START_IV_BYTE_12_MSB 7
#define TX_MPDU_START_IV_BYTE_12_MASK 0x00000000000000ff
/* Description IV_BYTE_13
Byte 9 of the IV field of the MPDU
Based on the Encryption type the iv_byte_13 takes the appropriate
meaning. For IV formats, refer to the crypto MLDR document
*/
#define TX_MPDU_START_IV_BYTE_13_OFFSET 0x0000000000000018
#define TX_MPDU_START_IV_BYTE_13_LSB 8
#define TX_MPDU_START_IV_BYTE_13_MSB 15
#define TX_MPDU_START_IV_BYTE_13_MASK 0x000000000000ff00
/* Description IV_BYTE_14
Byte 10 of the IV field of the MDPU
Based on the Encryption type the iv_byte_14 takes the appropriate
meaning. For IV formats, refer to the crypto MLDR document
*/
#define TX_MPDU_START_IV_BYTE_14_OFFSET 0x0000000000000018
#define TX_MPDU_START_IV_BYTE_14_LSB 16
#define TX_MPDU_START_IV_BYTE_14_MSB 23
#define TX_MPDU_START_IV_BYTE_14_MASK 0x0000000000ff0000
/* Description IV_BYTE_15
Byte 11 of the IV field of the MPDU
Based on the Encryption type the iv_byte_15 takes the appropriate
meaning. For IV formats, refer to the crypto MLDR document
*/
#define TX_MPDU_START_IV_BYTE_15_OFFSET 0x0000000000000018
#define TX_MPDU_START_IV_BYTE_15_LSB 24
#define TX_MPDU_START_IV_BYTE_15_MSB 31
#define TX_MPDU_START_IV_BYTE_15_MASK 0x00000000ff000000
/* Description IV_BYTE_16
Byte 8 of the IV field of the MPDU
Based on the Encryption type the iv_byte_16 takes the appropriate
meaning. For IV formats, refer to the crypto MLDR document
*/
#define TX_MPDU_START_IV_BYTE_16_OFFSET 0x0000000000000018
#define TX_MPDU_START_IV_BYTE_16_LSB 32
#define TX_MPDU_START_IV_BYTE_16_MSB 39
#define TX_MPDU_START_IV_BYTE_16_MASK 0x000000ff00000000
/* Description IV_BYTE_17
Byte 9 of the IV field of the MPDU
Based on the Encryption type the iv_byte_17 takes the appropriate
meaning. For IV formats, refer to the crypto MLDR document
*/
#define TX_MPDU_START_IV_BYTE_17_OFFSET 0x0000000000000018
#define TX_MPDU_START_IV_BYTE_17_LSB 40
#define TX_MPDU_START_IV_BYTE_17_MSB 47
#define TX_MPDU_START_IV_BYTE_17_MASK 0x0000ff0000000000
/* Description IV_LEN
Length of the IV field generated by Tx OLE
*/
#define TX_MPDU_START_IV_LEN_OFFSET 0x0000000000000018
#define TX_MPDU_START_IV_LEN_LSB 48
#define TX_MPDU_START_IV_LEN_MSB 52
#define TX_MPDU_START_IV_LEN_MASK 0x001f000000000000
/* Description ICV_LEN
Length of the ICV field generated by Tx OLE. OLE will insert
zeros in the ICV field when it pushes a frame
*/
#define TX_MPDU_START_ICV_LEN_OFFSET 0x0000000000000018
#define TX_MPDU_START_ICV_LEN_LSB 53
#define TX_MPDU_START_ICV_LEN_MSB 57
#define TX_MPDU_START_ICV_LEN_MASK 0x03e0000000000000
/* Description VHT_CONTROL_OFFSET
Field only valid when vht_control_present is set.
Field filled in by TXOLE, used by TXPCU
The starting byte number of the VHT control field in the
header
<legal all>
*/
#define TX_MPDU_START_VHT_CONTROL_OFFSET_OFFSET 0x0000000000000018
#define TX_MPDU_START_VHT_CONTROL_OFFSET_LSB 58
#define TX_MPDU_START_VHT_CONTROL_OFFSET_MSB 63
#define TX_MPDU_START_VHT_CONTROL_OFFSET_MASK 0xfc00000000000000
/* Description MPDU_TYPE
Indicates the type of MPDU that OLE will generate:
<enum 0 mpdu_type_basic> This MPDU is not in the A-MSDU
format (meaning there is no A-MSDU delimeter present) if
there is only 1 MSDU in the MPDU. When there are multiple
MSDUs in the MPDU, there is no choice, and the MSDUs within
the MPDU shall all have A-MSDU delimiters in front of them.
<enum 1 mpdu_type_amsdu> The MSDUs within the MPDU will
all have to be in the A-MSDU format, even if there is just
a single MSDU embedded in the MPDU. In other words, there
is always an A-MSDU delimiter in front of the MSDU(s) in
the MPDU.
This is not supported in Hastings80 and HastingsPrime.
<legal all>
*/
#define TX_MPDU_START_MPDU_TYPE_OFFSET 0x0000000000000020
#define TX_MPDU_START_MPDU_TYPE_LSB 0
#define TX_MPDU_START_MPDU_TYPE_MSB 0
#define TX_MPDU_START_MPDU_TYPE_MASK 0x0000000000000001
/* Description TRANSMIT_BW_RESTRICTION
Consumer: TXPCU
Producer: TXDMA
1'b0: This is a normal frame and there are no restrictions
on the BW that this frame can be transmitted on.
1'b1: This MPDU is only allowed to be transmitted at certain
BWs. The one and only allowed BW is indicated in field
allowed_transmit_bw
When TXPCU has made a BW selection and then encounters this
frame, the frame will be dropped and TXPCU will continue
transmitting the next frame (assuming there is no BW restriction
on that one)
<legal all>
*/
#define TX_MPDU_START_TRANSMIT_BW_RESTRICTION_OFFSET 0x0000000000000020
#define TX_MPDU_START_TRANSMIT_BW_RESTRICTION_LSB 1
#define TX_MPDU_START_TRANSMIT_BW_RESTRICTION_MSB 1
#define TX_MPDU_START_TRANSMIT_BW_RESTRICTION_MASK 0x0000000000000002
/* Description ALLOWED_TRANSMIT_BW
Consumer: TXPCU
Producer: TXDMA
Field only valid when transmit_bw_restriction is set
TXDMA gets this from the three or four upper bits of the
"Sw_buffer_cookie" field from the TX_MPDU_DETAILS STRUCT
In case of NON punctured transmission:
allowed_transmit_bw[2:0] = 3'b000: 20 MHz TX only
allowed_transmit_bw[2:0] = 3'b001: 40 MHz TX only
allowed_transmit_bw[2:0] = 3'b010: 80 MHz TX only
allowed_transmit_bw[2:0] = 3'b011: 160 MHz TX only
allowed_transmit_bw[2:0] = 3'b100: 240 MHz TX only
allowed_transmit_bw[2:0] = 3'b101: 320 MHz TX only
allowed_transmit_bw[2:1] = 2'b11: reserved
In case of punctured transmission:
allowed_transmit_bw[3:0] = 4'b0000: pattern 0 only
allowed_transmit_bw[3:0] = 4'b0001: pattern 1 only
allowed_transmit_bw[3:0] = 4'b0010: pattern 2 only
allowed_transmit_bw[3:0] = 4'b0011: pattern 3 only
allowed_transmit_bw[3:0] = 4'b0100: pattern 4 only
allowed_transmit_bw[3:0] = 4'b0101: pattern 5 only
allowed_transmit_bw[3:0] = 4'b0110: pattern 6 only
allowed_transmit_bw[3:0] = 4'b0111: pattern 7 only
allowed_transmit_bw[3:0] = 4'b1000: pattern 8 only
allowed_transmit_bw[3:0] = 4'b1001: pattern 9 only
allowed_transmit_bw[3:0] = 4'b1010: pattern 10 only
allowed_transmit_bw[3:0] = 4'b1011: pattern 11 only
allowed_transmit_bw[3:2] = 2'b11: reserved
Note: a punctured transmission is indicated by the presence
of TLV TX_PUNCTURE_SETUP embedded in the scheduler TLV
<legal 0-11>
*/
#define TX_MPDU_START_ALLOWED_TRANSMIT_BW_OFFSET 0x0000000000000020
#define TX_MPDU_START_ALLOWED_TRANSMIT_BW_LSB 2
#define TX_MPDU_START_ALLOWED_TRANSMIT_BW_MSB 5
#define TX_MPDU_START_ALLOWED_TRANSMIT_BW_MASK 0x000000000000003c
/* Description TX_NOTIFY_FRAME
Consumer: TQM/PDG/TXOLE
Producer: FW/SW
When clear, this frame does not require any special handling.
When set, this MPDU contains an MSDU with the 'FW_tx_notify_frame'
field set.
This means this MPDU is a special frame that requires special
handling in TQM.
Note that FW/SW shall always set the amsdu_not_allowed bit
in 'TX_MSDU_DETAILS' for any notify frame.
<enum 0 NO_TX_NOTIFY> Not a notify frame
<enum 1 TX_HARD_NOTIFY>
<enum 2 TX_SOFT_NOTIFY>
<enum 3 TX_SEMI_HARD_NOTIFY>
<enum 4 TX_SEMI_HARD_NOTIFY_CURR_RATE> Rate cannot be overridden
by PDG
<legal 0-4>
*/
#define TX_MPDU_START_TX_NOTIFY_FRAME_OFFSET 0x0000000000000020
#define TX_MPDU_START_TX_NOTIFY_FRAME_LSB 6
#define TX_MPDU_START_TX_NOTIFY_FRAME_MSB 8
#define TX_MPDU_START_TX_NOTIFY_FRAME_MASK 0x00000000000001c0
/* Description RESERVED_8A
Bit 9: self_gen:
Field only used in the MAC-flexibility feature in TXPCU
and PHY microcode
0: Indicates a normal data MPDU
1: Indicates a self-gen MPDU
Not supported in Hamilton/Waikiki v1
<legal 0-1>
*/
#define TX_MPDU_START_RESERVED_8A_OFFSET 0x0000000000000020
#define TX_MPDU_START_RESERVED_8A_LSB 9
#define TX_MPDU_START_RESERVED_8A_MSB 31
#define TX_MPDU_START_RESERVED_8A_MASK 0x00000000fffffe00
/* Description TLV64_PADDING
Automatic DWORD padding inserted while converting TLV32
to TLV64 for 64 bit ARCH
<legal 0>
*/
#define TX_MPDU_START_TLV64_PADDING_OFFSET 0x0000000000000020
#define TX_MPDU_START_TLV64_PADDING_LSB 32
#define TX_MPDU_START_TLV64_PADDING_MSB 63
#define TX_MPDU_START_TLV64_PADDING_MASK 0xffffffff00000000
#endif // TX_MPDU_START