/*
 * Copyright (c) 2020 The Linux Foundation. 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.
 */

//
// DO NOT EDIT!  This file is automatically generated
//               These definitions are tied to a particular hardware layout


#ifndef _TCL_DATA_CMD_H_
#define _TCL_DATA_CMD_H_
#if !defined(__ASSEMBLER__)
#endif

#include "buffer_addr_info.h"

// ################ START SUMMARY #################
//
//	Dword	Fields
//	0-1	struct buffer_addr_info buf_addr_info;
//	2	buf_or_ext_desc_type[0], epd[1], encap_type[3:2], encrypt_type[7:4], src_buffer_swap[8], link_meta_swap[9], tqm_no_drop[10], reserved_2a[11], search_type[13:12], addrx_en[14], addry_en[15], tcl_cmd_number[31:16]
//	3	data_length[15:0], ipv4_checksum_en[16], udp_over_ipv4_checksum_en[17], udp_over_ipv6_checksum_en[18], tcp_over_ipv4_checksum_en[19], tcp_over_ipv6_checksum_en[20], to_fw[21], reserved_3a[22], packet_offset[31:23]
//	4	buffer_timestamp[18:0], buffer_timestamp_valid[19], reserved_4a[20], hlos_tid_overwrite[21], hlos_tid[25:22], lmac_id[27:26], reserved_4b[31:28]
//	5	dscp_tid_table_num[5:0], search_index[25:6], cache_set_num[29:26], mesh_enable[31:30]
//	6	reserved_6a[19:0], ring_id[27:20], looping_count[31:28]
//
// ################ END SUMMARY #################

#define NUM_OF_DWORDS_TCL_DATA_CMD 7

struct tcl_data_cmd {
    struct            buffer_addr_info                       buf_addr_info;
             uint32_t buf_or_ext_desc_type            :  1, //[0]
                      epd                             :  1, //[1]
                      encap_type                      :  2, //[3:2]
                      encrypt_type                    :  4, //[7:4]
                      src_buffer_swap                 :  1, //[8]
                      link_meta_swap                  :  1, //[9]
                      tqm_no_drop                     :  1, //[10]
                      reserved_2a                     :  1, //[11]
                      search_type                     :  2, //[13:12]
                      addrx_en                        :  1, //[14]
                      addry_en                        :  1, //[15]
                      tcl_cmd_number                  : 16; //[31:16]
             uint32_t data_length                     : 16, //[15:0]
                      ipv4_checksum_en                :  1, //[16]
                      udp_over_ipv4_checksum_en       :  1, //[17]
                      udp_over_ipv6_checksum_en       :  1, //[18]
                      tcp_over_ipv4_checksum_en       :  1, //[19]
                      tcp_over_ipv6_checksum_en       :  1, //[20]
                      to_fw                           :  1, //[21]
                      reserved_3a                     :  1, //[22]
                      packet_offset                   :  9; //[31:23]
             uint32_t buffer_timestamp                : 19, //[18:0]
                      buffer_timestamp_valid          :  1, //[19]
                      reserved_4a                     :  1, //[20]
                      hlos_tid_overwrite              :  1, //[21]
                      hlos_tid                        :  4, //[25:22]
                      lmac_id                         :  2, //[27:26]
                      reserved_4b                     :  4; //[31:28]
             uint32_t dscp_tid_table_num              :  6, //[5:0]
                      search_index                    : 20, //[25:6]
                      cache_set_num                   :  4, //[29:26]
                      mesh_enable                     :  2; //[31:30]
             uint32_t reserved_6a                     : 20, //[19:0]
                      ring_id                         :  8, //[27:20]
                      looping_count                   :  4; //[31:28]
};

/*

struct buffer_addr_info buf_addr_info
			
			Details of the physical address for a single buffer
			
			It also contains return ownership info as well as some
			meta data for SW related to this buffer.
			
			
			
			In case of Buf_or_ext_desc_type indicating
			'MSDU_buffer', this address indicates the start of the meta
			data that is preceding the actual packet data.
			
			The start of the actual packet data is provided by
			field: Packet_offset

buf_or_ext_desc_type
			
			<enum 0 MSDU_buffer> The address points to an MSDU
			buffer. 
			
			<enum 1 extension_descriptor> The address points to an
			MSDU link extension descriptor
			
			< legal all>

epd
			
			When this bit is set then input packet is an EPD type
			
			<legal all>

encap_type
			
			Indicates the encapsulation that HW will perform:
			
			<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> DO NOT USE. Indicate Ethernet
			
			
			
			Used by the OLE during encapsulation.
			
			<legal all>

encrypt_type
			
			Field only valid for encap_type: RAW 
			
			
			
			Indicates type of decrypt cipher used (as defined in the
			peer entry)
			
			<enum 0 wep_40> WEP 40-bit
			
			<enum 1 wep_104> WEP 104-bit
			
			<enum 2 tkip_no_mic> TKIP without MIC
			
			<enum 3 wep_128> WEP 128-bit
			
			<enum 4 tkip_with_mic> TKIP with MIC
			
			<enum 5 wapi> WAPI
			
			<enum 6 aes_ccmp_128> AES CCMP 128
			
			<enum 7 no_cipher> No crypto
			
			<enum 8 aes_ccmp_256> AES CCMP 256
			
			<enum 9 aes_gcmp_128> AES CCMP 128
			
			<enum 10 aes_gcmp_256> AES CCMP 256
			
			<enum 11 wapi_gcm_sm4> WAPI GCM SM4
			
			
			
			<enum 12 wep_varied_width> DO not use... Only for higher
			layer modules..
			
			<legal 0-12>

src_buffer_swap
			
			Treats source memory (packet buffer) organization as
			big-endian. The packets are read and byte swapped.
			
			1'b0: Source memory is little endian
			
			1'b1: Source memory is big endian
			
			<legal all>

link_meta_swap
			
			Treats link descriptor and Metadata as big-endian. The
			link descriptor/Metadata is read and byte swapped.
			
			1'b0: Memory is little endian
			
			1'b1: Memory is big endian
			
			<legal all>

tqm_no_drop
			
			This bit is used to stop TQM from dropping MSDUs while
			adding them to MSDU flows1'b1: Do not drop MSDU when any of
			the threshold value is met while adding MSDU in a flow1'b1:
			Drop MSDU when any of the threshold value is met while
			adding MSDU in a flow
			
			<legal all>

reserved_2a
			
			<legal 0>

search_type
			
			Search type select 
			
			
			
			<enum 0 Normal_search> Address and flow search will use
			packet contents
			
			<enum 1 Index_based_address_search> Address search will
			
			<enum 2 Index_based_flow_search> Flow search will use
			'search_index', and address search will use packet contents
			
			<legal 0-2>

addrx_en
			
			Address X search enable in ASE
			
			1'b0: Search disable
			
			1'b1: Search Enable
			
			<legal all>

addry_en
			
			Address Y search enable in ASE
			
			1'b0: Search disable
			
			1'b1: Search Enable
			
			<legal all>

tcl_cmd_number
			
			This number can be used by SW to track, identify and
			link the created commands with the command statuses
			
			
			
			Is set to the value 'TCL_CMD_Number' of the related
			TCL_DATA command
			
			<legal all> 

data_length
			
			Valid Data length in bytes. 
			
			
			
			MSDU length in case of direct descriptor.
			
			Length of link extension descriptor in case of Link
			extension descriptor. This is used to know the size of
			Metadata.
			
			<legal all>

ipv4_checksum_en
			
			OLE related control
			
			Enable IPv4 checksum replacement

udp_over_ipv4_checksum_en
			
			OLE related control
			
			Enable UDP over IPv4 checksum replacement.  UDP checksum
			over IPv4 is optional for TCP/IP stacks.

udp_over_ipv6_checksum_en
			
			OLE related control
			
			Enable UDP over IPv6 checksum replacement.  UDP checksum
			over IPv6 is mandatory for TCP/IP stacks.

tcp_over_ipv4_checksum_en
			
			OLE related control
			
			Enable TCP checksum over IPv4 replacement

tcp_over_ipv6_checksum_en
			
			OLE related control
			
			Enable TCP checksum over IPv6 replacement

to_fw
			
			Forward packet to FW along with classification result.
			The packet will not be forward to TQM when this bit is set
			
			
			
			1'b0: Use classification result to forward the packet.
			
			1'b1: Override classification result and forward packet
			only to FW.
			
			<legal all>

reserved_3a
			
			<legal 0>

packet_offset
			
			Packet offset from Metadata in case of direct buffer
			descriptor. This field is valid when Buf_or_ext_desc_type is
			reset(= 0).
			
			<legal all>

buffer_timestamp
			
			Field only valid when 'Buffer_timestamp_valid ' is set.
			
			
			
			Frame system entrance timestamp. The timestamp is
			related to the global system timer
			
			
			
			Generally the first module (SW, TCL or TQM). that sees
			this frame and this timestamp field is not valid, shall fill
			in this field.
			
			
			
			Timestamp in units of 1024 us

buffer_timestamp_valid
			
			When set, the Buffer_timestamp field contains valid
			info.

reserved_4a
			
			<legal 0>

hlos_tid_overwrite
			
			When set, TCL shall ignore the IP DSCP and VLAN PCP
			fields and use HLOS_TID as the final TID. Otherwise TCL
			shall consider the DSCP and PCP fields as well as HLOS_TID
			and choose a final TID based on the configured priority 
			
			<legal all>

hlos_tid
			
			HLOS MSDU priority
			
			
			
			Field is used when HLOS_TID_overwrite is set.
			
			
			
			Field is also used when HLOS_TID_overwrite is not set
			and DSCP/PCP is not available in the packet
			
			<legal all>

lmac_id
			
			TCL uses this LMAC_ID in address search, i.e, while
			finding matching entry for the packet in AST corresponding
			to given LMAC_ID
			
			If LMAC ID is all 1s (=> value 3), it indicates wildcard
			match for any MAC
			
			<legal 0-3>

reserved_4b
			
			<legal 0>

dscp_tid_table_num
			
			DSCP to TID mapping table number that need to be used
			for the MSDU, should be specified using this field
			
			<legal all>

search_index
			
			The index that will be used for index based address or
			flow search. The field is valid when 'search_type' is  1 or
			2. 
			
			<legal all>

cache_set_num
			
			Cache set number that should be used to cache the index
			based search results, for address and flow search. This
			value should be equal to LSB four bits of the hash value of
			match data, in case of search index points to an entry which
			may be used in content based search also. The value can be
			anything when the entry pointed by search index will not be
			used for content based search. 
			
			<legal all>

mesh_enable
			
			If set to a non-zero value:
			
			* For raw WiFi frames, this indicates transmission to a
			mesh STA, enabling the interpretation of the 'Mesh Control
			Present' bit (bit 8) of QoS Control (otherwise this bit is
			ignored). The interpretation of the A-MSDU 'Length' field is
			decided by the e-numerations below.
			
			* For native WiFi frames, this indicates that a 'Mesh
			Control' field is present between the header and the LLC.
			The three non-zero values are interchangeable.
			
			
			
			<enum 0 MESH_DISABLE>
			
			<enum 1 MESH_Q2Q> A-MSDU 'Length' is big endian and
			includes the length of Mesh Control.
			
			<enum 2 MESH_11S_BE> A-MSDU 'Length' is big endian and
			excludes the length of Mesh Control.
			
			<enum 3 MESH_11S_LE> A-MSDU 'Length' is little endian
			and excludes the length of Mesh Control. This is
			802.11s-compliant.
			
			<legal 0-3>

reserved_6a
			
			<legal 0>

ring_id
			
			The buffer pointer ring ID.
			
			0 refers to the IDLE ring
			
			1 - N refers to other rings
			
			
			
			Helps with debugging when dumping ring contents.
			
			<legal all>

looping_count
			
			A count value that indicates the number of times the
			producer of entries into the Ring has looped around the
			ring.
			
			At initialization time, this value is set to 0. On the
			first loop, this value is set to 1. After the max value is
			reached allowed by the number of bits for this field, the
			count value continues with 0 again.
			
			
			
			In case SW is the consumer of the ring entries, it can
			use this field to figure out up to where the producer of
			entries has created new entries. This eliminates the need to
			check where the head pointer' of the ring is located once
			the SW starts processing an interrupt indicating that new
			entries have been put into this ring...
			
			
			
			Also note that SW if it wants only needs to look at the
			LSB bit of this count value.
			
			<legal all>
*/


 /* EXTERNAL REFERENCE : struct buffer_addr_info buf_addr_info */ 


/* Description		TCL_DATA_CMD_0_BUF_ADDR_INFO_BUFFER_ADDR_31_0
			
			Address (lower 32 bits) of the MSDU buffer OR
			MSDU_EXTENSION descriptor OR Link Descriptor
			
			
			
			In case of 'NULL' pointer, this field is set to 0
			
			<legal all>
*/
#define TCL_DATA_CMD_0_BUF_ADDR_INFO_BUFFER_ADDR_31_0_OFFSET         0x00000000
#define TCL_DATA_CMD_0_BUF_ADDR_INFO_BUFFER_ADDR_31_0_LSB            0
#define TCL_DATA_CMD_0_BUF_ADDR_INFO_BUFFER_ADDR_31_0_MASK           0xffffffff

/* Description		TCL_DATA_CMD_1_BUF_ADDR_INFO_BUFFER_ADDR_39_32
			
			Address (upper 8 bits) of the MSDU buffer OR
			MSDU_EXTENSION descriptor OR Link Descriptor
			
			
			
			In case of 'NULL' pointer, this field is set to 0
			
			<legal all>
*/
#define TCL_DATA_CMD_1_BUF_ADDR_INFO_BUFFER_ADDR_39_32_OFFSET        0x00000004
#define TCL_DATA_CMD_1_BUF_ADDR_INFO_BUFFER_ADDR_39_32_LSB           0
#define TCL_DATA_CMD_1_BUF_ADDR_INFO_BUFFER_ADDR_39_32_MASK          0x000000ff

/* Description		TCL_DATA_CMD_1_BUF_ADDR_INFO_RETURN_BUFFER_MANAGER
			
			Consumer: WBM
			
			Producer: SW/FW
			
			
			
			In case of 'NULL' pointer, this field is set to 0
			
			
			
			Indicates to which buffer manager the buffer OR
			MSDU_EXTENSION descriptor OR link descriptor that is being
			pointed to shall be returned after the frame has been
			processed. It is used by WBM for routing purposes.
			
			
			
			<enum 0 WBM_IDLE_BUF_LIST> This buffer shall be returned
			to the WMB buffer idle list
			
			<enum 1 WBM_IDLE_DESC_LIST> This buffer shall be
			returned to the WMB idle link descriptor idle list
			
			<enum 2 FW_BM> This buffer shall be returned to the FW
			
			<enum 3 SW0_BM> This buffer shall be returned to the SW,
			ring 0
			
			<enum 4 SW1_BM> This buffer shall be returned to the SW,
			ring 1
			
			<enum 5 SW2_BM> This buffer shall be returned to the SW,
			ring 2
			
			<enum 6 SW3_BM> This buffer shall be returned to the SW,
			ring 3
			
			<enum 7 SW4_BM> This buffer shall be returned to the SW,
			ring 4
			
			
			
			<legal all>
*/
#define TCL_DATA_CMD_1_BUF_ADDR_INFO_RETURN_BUFFER_MANAGER_OFFSET    0x00000004
#define TCL_DATA_CMD_1_BUF_ADDR_INFO_RETURN_BUFFER_MANAGER_LSB       8
#define TCL_DATA_CMD_1_BUF_ADDR_INFO_RETURN_BUFFER_MANAGER_MASK      0x00000700

/* Description		TCL_DATA_CMD_1_BUF_ADDR_INFO_SW_BUFFER_COOKIE
			
			Cookie field exclusively used by SW. 
			
			
			
			In case of 'NULL' pointer, this field is set to 0
			
			
			
			HW ignores the contents, accept that it passes the
			programmed value on to other descriptors together with the
			physical address 
			
			
			
			Field can be used by SW to for example associate the
			buffers physical address with the virtual address
			
			The bit definitions as used by SW are within SW HLD
			specification
			
			
			
			NOTE:
			
			The three most significant bits can have a special
			meaning in case this struct is embedded in a TX_MPDU_DETAILS
			STRUCT, and field transmit_bw_restriction is set
			
			
			
			In case of NON punctured transmission:
			
			Sw_buffer_cookie[20:19] = 2'b00: 20 MHz TX only
			
			Sw_buffer_cookie[20:19] = 2'b01: 40 MHz TX only
			
			Sw_buffer_cookie[20:19] = 2'b10: 80 MHz TX only
			
			Sw_buffer_cookie[20:19] = 2'b11: 160 MHz TX only
			
			
			
			In case of punctured transmission:
			
			Sw_buffer_cookie[20:18] = 3'b000: pattern 0 only
			
			Sw_buffer_cookie[20:18] = 3'b001: pattern 1 only
			
			Sw_buffer_cookie[20:18] = 3'b010: pattern 2 only
			
			Sw_buffer_cookie[20:18] = 3'b011: pattern 3 only
			
			Sw_buffer_cookie[20:18] = 3'b100: pattern 4 only
			
			Sw_buffer_cookie[20:18] = 3'b101: pattern 5 only
			
			Sw_buffer_cookie[20:18] = 3'b110: pattern 6 only
			
			Sw_buffer_cookie[20:18] = 3'b111: pattern 7 only
			
			
			
			Note: a punctured transmission is indicated by the
			presence of TLV TX_PUNCTURE_SETUP embedded in the scheduler
			TLV
			
			
			
			<legal all>
*/
#define TCL_DATA_CMD_1_BUF_ADDR_INFO_SW_BUFFER_COOKIE_OFFSET         0x00000004
#define TCL_DATA_CMD_1_BUF_ADDR_INFO_SW_BUFFER_COOKIE_LSB            11
#define TCL_DATA_CMD_1_BUF_ADDR_INFO_SW_BUFFER_COOKIE_MASK           0xfffff800

/* Description		TCL_DATA_CMD_2_BUF_OR_EXT_DESC_TYPE
			
			<enum 0 MSDU_buffer> The address points to an MSDU
			buffer. 
			
			<enum 1 extension_descriptor> The address points to an
			MSDU link extension descriptor
			
			< legal all>
*/
#define TCL_DATA_CMD_2_BUF_OR_EXT_DESC_TYPE_OFFSET                   0x00000008
#define TCL_DATA_CMD_2_BUF_OR_EXT_DESC_TYPE_LSB                      0
#define TCL_DATA_CMD_2_BUF_OR_EXT_DESC_TYPE_MASK                     0x00000001

/* Description		TCL_DATA_CMD_2_EPD
			
			When this bit is set then input packet is an EPD type
			
			<legal all>
*/
#define TCL_DATA_CMD_2_EPD_OFFSET                                    0x00000008
#define TCL_DATA_CMD_2_EPD_LSB                                       1
#define TCL_DATA_CMD_2_EPD_MASK                                      0x00000002

/* Description		TCL_DATA_CMD_2_ENCAP_TYPE
			
			Indicates the encapsulation that HW will perform:
			
			<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> DO NOT USE. Indicate Ethernet
			
			
			
			Used by the OLE during encapsulation.
			
			<legal all>
*/
#define TCL_DATA_CMD_2_ENCAP_TYPE_OFFSET                             0x00000008
#define TCL_DATA_CMD_2_ENCAP_TYPE_LSB                                2
#define TCL_DATA_CMD_2_ENCAP_TYPE_MASK                               0x0000000c

/* Description		TCL_DATA_CMD_2_ENCRYPT_TYPE
			
			Field only valid for encap_type: RAW 
			
			
			
			Indicates type of decrypt cipher used (as defined in the
			peer entry)
			
			<enum 0 wep_40> WEP 40-bit
			
			<enum 1 wep_104> WEP 104-bit
			
			<enum 2 tkip_no_mic> TKIP without MIC
			
			<enum 3 wep_128> WEP 128-bit
			
			<enum 4 tkip_with_mic> TKIP with MIC
			
			<enum 5 wapi> WAPI
			
			<enum 6 aes_ccmp_128> AES CCMP 128
			
			<enum 7 no_cipher> No crypto
			
			<enum 8 aes_ccmp_256> AES CCMP 256
			
			<enum 9 aes_gcmp_128> AES CCMP 128
			
			<enum 10 aes_gcmp_256> AES CCMP 256
			
			<enum 11 wapi_gcm_sm4> WAPI GCM SM4
			
			
			
			<enum 12 wep_varied_width> DO not use... Only for higher
			layer modules..
			
			<legal 0-12>
*/
#define TCL_DATA_CMD_2_ENCRYPT_TYPE_OFFSET                           0x00000008
#define TCL_DATA_CMD_2_ENCRYPT_TYPE_LSB                              4
#define TCL_DATA_CMD_2_ENCRYPT_TYPE_MASK                             0x000000f0

/* Description		TCL_DATA_CMD_2_SRC_BUFFER_SWAP
			
			Treats source memory (packet buffer) organization as
			big-endian. The packets are read and byte swapped.
			
			1'b0: Source memory is little endian
			
			1'b1: Source memory is big endian
			
			<legal all>
*/
#define TCL_DATA_CMD_2_SRC_BUFFER_SWAP_OFFSET                        0x00000008
#define TCL_DATA_CMD_2_SRC_BUFFER_SWAP_LSB                           8
#define TCL_DATA_CMD_2_SRC_BUFFER_SWAP_MASK                          0x00000100

/* Description		TCL_DATA_CMD_2_LINK_META_SWAP
			
			Treats link descriptor and Metadata as big-endian. The
			link descriptor/Metadata is read and byte swapped.
			
			1'b0: Memory is little endian
			
			1'b1: Memory is big endian
			
			<legal all>
*/
#define TCL_DATA_CMD_2_LINK_META_SWAP_OFFSET                         0x00000008
#define TCL_DATA_CMD_2_LINK_META_SWAP_LSB                            9
#define TCL_DATA_CMD_2_LINK_META_SWAP_MASK                           0x00000200

/* Description		TCL_DATA_CMD_2_TQM_NO_DROP
			
			This bit is used to stop TQM from dropping MSDUs while
			adding them to MSDU flows1'b1: Do not drop MSDU when any of
			the threshold value is met while adding MSDU in a flow1'b1:
			Drop MSDU when any of the threshold value is met while
			adding MSDU in a flow
			
			<legal all>
*/
#define TCL_DATA_CMD_2_TQM_NO_DROP_OFFSET                            0x00000008
#define TCL_DATA_CMD_2_TQM_NO_DROP_LSB                               10
#define TCL_DATA_CMD_2_TQM_NO_DROP_MASK                              0x00000400

/* Description		TCL_DATA_CMD_2_RESERVED_2A
			
			<legal 0>
*/
#define TCL_DATA_CMD_2_RESERVED_2A_OFFSET                            0x00000008
#define TCL_DATA_CMD_2_RESERVED_2A_LSB                               11
#define TCL_DATA_CMD_2_RESERVED_2A_MASK                              0x00000800

/* Description		TCL_DATA_CMD_2_SEARCH_TYPE
			
			Search type select 
			
			
			
			<enum 0 Normal_search> Address and flow search will use
			packet contents
			
			<enum 1 Index_based_address_search> Address search will
			
			<enum 2 Index_based_flow_search> Flow search will use
			'search_index', and address search will use packet contents
			
			<legal 0-2>
*/
#define TCL_DATA_CMD_2_SEARCH_TYPE_OFFSET                            0x00000008
#define TCL_DATA_CMD_2_SEARCH_TYPE_LSB                               12
#define TCL_DATA_CMD_2_SEARCH_TYPE_MASK                              0x00003000

/* Description		TCL_DATA_CMD_2_ADDRX_EN
			
			Address X search enable in ASE
			
			1'b0: Search disable
			
			1'b1: Search Enable
			
			<legal all>
*/
#define TCL_DATA_CMD_2_ADDRX_EN_OFFSET                               0x00000008
#define TCL_DATA_CMD_2_ADDRX_EN_LSB                                  14
#define TCL_DATA_CMD_2_ADDRX_EN_MASK                                 0x00004000

/* Description		TCL_DATA_CMD_2_ADDRY_EN
			
			Address Y search enable in ASE
			
			1'b0: Search disable
			
			1'b1: Search Enable
			
			<legal all>
*/
#define TCL_DATA_CMD_2_ADDRY_EN_OFFSET                               0x00000008
#define TCL_DATA_CMD_2_ADDRY_EN_LSB                                  15
#define TCL_DATA_CMD_2_ADDRY_EN_MASK                                 0x00008000

/* Description		TCL_DATA_CMD_2_TCL_CMD_NUMBER
			
			This number can be used by SW to track, identify and
			link the created commands with the command statuses
			
			
			
			Is set to the value 'TCL_CMD_Number' of the related
			TCL_DATA command
			
			<legal all> 
*/
#define TCL_DATA_CMD_2_TCL_CMD_NUMBER_OFFSET                         0x00000008
#define TCL_DATA_CMD_2_TCL_CMD_NUMBER_LSB                            16
#define TCL_DATA_CMD_2_TCL_CMD_NUMBER_MASK                           0xffff0000

/* Description		TCL_DATA_CMD_3_DATA_LENGTH
			
			Valid Data length in bytes. 
			
			
			
			MSDU length in case of direct descriptor.
			
			Length of link extension descriptor in case of Link
			extension descriptor. This is used to know the size of
			Metadata.
			
			<legal all>
*/
#define TCL_DATA_CMD_3_DATA_LENGTH_OFFSET                            0x0000000c
#define TCL_DATA_CMD_3_DATA_LENGTH_LSB                               0
#define TCL_DATA_CMD_3_DATA_LENGTH_MASK                              0x0000ffff

/* Description		TCL_DATA_CMD_3_IPV4_CHECKSUM_EN
			
			OLE related control
			
			Enable IPv4 checksum replacement
*/
#define TCL_DATA_CMD_3_IPV4_CHECKSUM_EN_OFFSET                       0x0000000c
#define TCL_DATA_CMD_3_IPV4_CHECKSUM_EN_LSB                          16
#define TCL_DATA_CMD_3_IPV4_CHECKSUM_EN_MASK                         0x00010000

/* Description		TCL_DATA_CMD_3_UDP_OVER_IPV4_CHECKSUM_EN
			
			OLE related control
			
			Enable UDP over IPv4 checksum replacement.  UDP checksum
			over IPv4 is optional for TCP/IP stacks.
*/
#define TCL_DATA_CMD_3_UDP_OVER_IPV4_CHECKSUM_EN_OFFSET              0x0000000c
#define TCL_DATA_CMD_3_UDP_OVER_IPV4_CHECKSUM_EN_LSB                 17
#define TCL_DATA_CMD_3_UDP_OVER_IPV4_CHECKSUM_EN_MASK                0x00020000

/* Description		TCL_DATA_CMD_3_UDP_OVER_IPV6_CHECKSUM_EN
			
			OLE related control
			
			Enable UDP over IPv6 checksum replacement.  UDP checksum
			over IPv6 is mandatory for TCP/IP stacks.
*/
#define TCL_DATA_CMD_3_UDP_OVER_IPV6_CHECKSUM_EN_OFFSET              0x0000000c
#define TCL_DATA_CMD_3_UDP_OVER_IPV6_CHECKSUM_EN_LSB                 18
#define TCL_DATA_CMD_3_UDP_OVER_IPV6_CHECKSUM_EN_MASK                0x00040000

/* Description		TCL_DATA_CMD_3_TCP_OVER_IPV4_CHECKSUM_EN
			
			OLE related control
			
			Enable TCP checksum over IPv4 replacement
*/
#define TCL_DATA_CMD_3_TCP_OVER_IPV4_CHECKSUM_EN_OFFSET              0x0000000c
#define TCL_DATA_CMD_3_TCP_OVER_IPV4_CHECKSUM_EN_LSB                 19
#define TCL_DATA_CMD_3_TCP_OVER_IPV4_CHECKSUM_EN_MASK                0x00080000

/* Description		TCL_DATA_CMD_3_TCP_OVER_IPV6_CHECKSUM_EN
			
			OLE related control
			
			Enable TCP checksum over IPv6 replacement
*/
#define TCL_DATA_CMD_3_TCP_OVER_IPV6_CHECKSUM_EN_OFFSET              0x0000000c
#define TCL_DATA_CMD_3_TCP_OVER_IPV6_CHECKSUM_EN_LSB                 20
#define TCL_DATA_CMD_3_TCP_OVER_IPV6_CHECKSUM_EN_MASK                0x00100000

/* Description		TCL_DATA_CMD_3_TO_FW
			
			Forward packet to FW along with classification result.
			The packet will not be forward to TQM when this bit is set
			
			
			
			1'b0: Use classification result to forward the packet.
			
			1'b1: Override classification result and forward packet
			only to FW.
			
			<legal all>
*/
#define TCL_DATA_CMD_3_TO_FW_OFFSET                                  0x0000000c
#define TCL_DATA_CMD_3_TO_FW_LSB                                     21
#define TCL_DATA_CMD_3_TO_FW_MASK                                    0x00200000

/* Description		TCL_DATA_CMD_3_RESERVED_3A
			
			<legal 0>
*/
#define TCL_DATA_CMD_3_RESERVED_3A_OFFSET                            0x0000000c
#define TCL_DATA_CMD_3_RESERVED_3A_LSB                               22
#define TCL_DATA_CMD_3_RESERVED_3A_MASK                              0x00400000

/* Description		TCL_DATA_CMD_3_PACKET_OFFSET
			
			Packet offset from Metadata in case of direct buffer
			descriptor. This field is valid when Buf_or_ext_desc_type is
			reset(= 0).
			
			<legal all>
*/
#define TCL_DATA_CMD_3_PACKET_OFFSET_OFFSET                          0x0000000c
#define TCL_DATA_CMD_3_PACKET_OFFSET_LSB                             23
#define TCL_DATA_CMD_3_PACKET_OFFSET_MASK                            0xff800000

/* Description		TCL_DATA_CMD_4_BUFFER_TIMESTAMP
			
			Field only valid when 'Buffer_timestamp_valid ' is set.
			
			
			
			Frame system entrance timestamp. The timestamp is
			related to the global system timer
			
			
			
			Generally the first module (SW, TCL or TQM). that sees
			this frame and this timestamp field is not valid, shall fill
			in this field.
			
			
			
			Timestamp in units of 1024 us
*/
#define TCL_DATA_CMD_4_BUFFER_TIMESTAMP_OFFSET                       0x00000010
#define TCL_DATA_CMD_4_BUFFER_TIMESTAMP_LSB                          0
#define TCL_DATA_CMD_4_BUFFER_TIMESTAMP_MASK                         0x0007ffff

/* Description		TCL_DATA_CMD_4_BUFFER_TIMESTAMP_VALID
			
			When set, the Buffer_timestamp field contains valid
			info.
*/
#define TCL_DATA_CMD_4_BUFFER_TIMESTAMP_VALID_OFFSET                 0x00000010
#define TCL_DATA_CMD_4_BUFFER_TIMESTAMP_VALID_LSB                    19
#define TCL_DATA_CMD_4_BUFFER_TIMESTAMP_VALID_MASK                   0x00080000

/* Description		TCL_DATA_CMD_4_RESERVED_4A
			
			<legal 0>
*/
#define TCL_DATA_CMD_4_RESERVED_4A_OFFSET                            0x00000010
#define TCL_DATA_CMD_4_RESERVED_4A_LSB                               20
#define TCL_DATA_CMD_4_RESERVED_4A_MASK                              0x00100000

/* Description		TCL_DATA_CMD_4_HLOS_TID_OVERWRITE
			
			When set, TCL shall ignore the IP DSCP and VLAN PCP
			fields and use HLOS_TID as the final TID. Otherwise TCL
			shall consider the DSCP and PCP fields as well as HLOS_TID
			and choose a final TID based on the configured priority 
			
			<legal all>
*/
#define TCL_DATA_CMD_4_HLOS_TID_OVERWRITE_OFFSET                     0x00000010
#define TCL_DATA_CMD_4_HLOS_TID_OVERWRITE_LSB                        21
#define TCL_DATA_CMD_4_HLOS_TID_OVERWRITE_MASK                       0x00200000

/* Description		TCL_DATA_CMD_4_HLOS_TID
			
			HLOS MSDU priority
			
			
			
			Field is used when HLOS_TID_overwrite is set.
			
			
			
			Field is also used when HLOS_TID_overwrite is not set
			and DSCP/PCP is not available in the packet
			
			<legal all>
*/
#define TCL_DATA_CMD_4_HLOS_TID_OFFSET                               0x00000010
#define TCL_DATA_CMD_4_HLOS_TID_LSB                                  22
#define TCL_DATA_CMD_4_HLOS_TID_MASK                                 0x03c00000

/* Description		TCL_DATA_CMD_4_LMAC_ID
			
			TCL uses this LMAC_ID in address search, i.e, while
			finding matching entry for the packet in AST corresponding
			to given LMAC_ID
			
			If LMAC ID is all 1s (=> value 3), it indicates wildcard
			match for any MAC
			
			<legal 0-3>
*/
#define TCL_DATA_CMD_4_LMAC_ID_OFFSET                                0x00000010
#define TCL_DATA_CMD_4_LMAC_ID_LSB                                   26
#define TCL_DATA_CMD_4_LMAC_ID_MASK                                  0x0c000000

/* Description		TCL_DATA_CMD_4_RESERVED_4B
			
			<legal 0>
*/
#define TCL_DATA_CMD_4_RESERVED_4B_OFFSET                            0x00000010
#define TCL_DATA_CMD_4_RESERVED_4B_LSB                               28
#define TCL_DATA_CMD_4_RESERVED_4B_MASK                              0xf0000000

/* Description		TCL_DATA_CMD_5_DSCP_TID_TABLE_NUM
			
			DSCP to TID mapping table number that need to be used
			for the MSDU, should be specified using this field
			
			<legal all>
*/
#define TCL_DATA_CMD_5_DSCP_TID_TABLE_NUM_OFFSET                     0x00000014
#define TCL_DATA_CMD_5_DSCP_TID_TABLE_NUM_LSB                        0
#define TCL_DATA_CMD_5_DSCP_TID_TABLE_NUM_MASK                       0x0000003f

/* Description		TCL_DATA_CMD_5_SEARCH_INDEX
			
			The index that will be used for index based address or
			flow search. The field is valid when 'search_type' is  1 or
			2. 
			
			<legal all>
*/
#define TCL_DATA_CMD_5_SEARCH_INDEX_OFFSET                           0x00000014
#define TCL_DATA_CMD_5_SEARCH_INDEX_LSB                              6
#define TCL_DATA_CMD_5_SEARCH_INDEX_MASK                             0x03ffffc0

/* Description		TCL_DATA_CMD_5_CACHE_SET_NUM
			
			Cache set number that should be used to cache the index
			based search results, for address and flow search. This
			value should be equal to LSB four bits of the hash value of
			match data, in case of search index points to an entry which
			may be used in content based search also. The value can be
			anything when the entry pointed by search index will not be
			used for content based search. 
			
			<legal all>
*/
#define TCL_DATA_CMD_5_CACHE_SET_NUM_OFFSET                          0x00000014
#define TCL_DATA_CMD_5_CACHE_SET_NUM_LSB                             26
#define TCL_DATA_CMD_5_CACHE_SET_NUM_MASK                            0x3c000000

/* Description		TCL_DATA_CMD_5_MESH_ENABLE
			
			If set to a non-zero value:
			
			* For raw WiFi frames, this indicates transmission to a
			mesh STA, enabling the interpretation of the 'Mesh Control
			Present' bit (bit 8) of QoS Control (otherwise this bit is
			ignored). The interpretation of the A-MSDU 'Length' field is
			decided by the e-numerations below.
			
			* For native WiFi frames, this indicates that a 'Mesh
			Control' field is present between the header and the LLC.
			The three non-zero values are interchangeable.
			
			
			
			<enum 0 MESH_DISABLE>
			
			<enum 1 MESH_Q2Q> A-MSDU 'Length' is big endian and
			includes the length of Mesh Control.
			
			<enum 2 MESH_11S_BE> A-MSDU 'Length' is big endian and
			excludes the length of Mesh Control.
			
			<enum 3 MESH_11S_LE> A-MSDU 'Length' is little endian
			and excludes the length of Mesh Control. This is
			802.11s-compliant.
			
			<legal 0-3>
*/
#define TCL_DATA_CMD_5_MESH_ENABLE_OFFSET                            0x00000014
#define TCL_DATA_CMD_5_MESH_ENABLE_LSB                               30
#define TCL_DATA_CMD_5_MESH_ENABLE_MASK                              0xc0000000

/* Description		TCL_DATA_CMD_6_RESERVED_6A
			
			<legal 0>
*/
#define TCL_DATA_CMD_6_RESERVED_6A_OFFSET                            0x00000018
#define TCL_DATA_CMD_6_RESERVED_6A_LSB                               0
#define TCL_DATA_CMD_6_RESERVED_6A_MASK                              0x000fffff

/* Description		TCL_DATA_CMD_6_RING_ID
			
			The buffer pointer ring ID.
			
			0 refers to the IDLE ring
			
			1 - N refers to other rings
			
			
			
			Helps with debugging when dumping ring contents.
			
			<legal all>
*/
#define TCL_DATA_CMD_6_RING_ID_OFFSET                                0x00000018
#define TCL_DATA_CMD_6_RING_ID_LSB                                   20
#define TCL_DATA_CMD_6_RING_ID_MASK                                  0x0ff00000

/* Description		TCL_DATA_CMD_6_LOOPING_COUNT
			
			A count value that indicates the number of times the
			producer of entries into the Ring has looped around the
			ring.
			
			At initialization time, this value is set to 0. On the
			first loop, this value is set to 1. After the max value is
			reached allowed by the number of bits for this field, the
			count value continues with 0 again.
			
			
			
			In case SW is the consumer of the ring entries, it can
			use this field to figure out up to where the producer of
			entries has created new entries. This eliminates the need to
			check where the head pointer' of the ring is located once
			the SW starts processing an interrupt indicating that new
			entries have been put into this ring...
			
			
			
			Also note that SW if it wants only needs to look at the
			LSB bit of this count value.
			
			<legal all>
*/
#define TCL_DATA_CMD_6_LOOPING_COUNT_OFFSET                          0x00000018
#define TCL_DATA_CMD_6_LOOPING_COUNT_LSB                             28
#define TCL_DATA_CMD_6_LOOPING_COUNT_MASK                            0xf0000000


#endif // _TCL_DATA_CMD_H_
