Currently in the case of WCN6750, only one TCL ring is used for TX, this is limiting the TX throughput in 160 MHz case, enabling multiple TCL rings on WCN6750 has shown an improvement of nearly 300 Mbps in the case of TCP TX, therefore add the support of multi TX ring for WCN6750. Currently TCL ring is selected based on CPU ID, this logic cannot be applied for WCN6750 as there is chance of out of order TX of packets and to avoid this, choose TCL ring based on flow hash so that packets of the same flow will end up on same TCL ring. For the same reason, TCL ring retry logic is also not applicable for WCN6750. Also the mapping of TCL, WBM & RBM IDs for WCN6750 is different from existing devices. Create a new TCM/WBM/RBM mapping for WCN6750. Change does not impact existing ath11k devices. Tested-on: WCN6750 hw1.0 AHB WLAN.MSL.1.0.1-00887-QCAMSLSWPLZ-1 Signed-off-by: Manikanta Pubbisetty <quic_mpubbise@quicinc.com> Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com> Link: https://lore.kernel.org/r/20220905071805.31625-3-quic_mpubbise@quicinc.com
75 lines
2.1 KiB
C
75 lines
2.1 KiB
C
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
|
/*
|
|
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
|
|
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
|
*/
|
|
|
|
#ifndef ATH11K_HAL_TX_H
|
|
#define ATH11K_HAL_TX_H
|
|
|
|
#include "hal_desc.h"
|
|
#include "core.h"
|
|
|
|
#define HAL_TX_ADDRX_EN 1
|
|
#define HAL_TX_ADDRY_EN 2
|
|
|
|
#define HAL_TX_ADDR_SEARCH_DEFAULT 0
|
|
#define HAL_TX_ADDR_SEARCH_INDEX 1
|
|
|
|
struct hal_tx_info {
|
|
u16 meta_data_flags; /* %HAL_TCL_DATA_CMD_INFO0_META_ */
|
|
u8 ring_id;
|
|
u32 desc_id;
|
|
enum hal_tcl_desc_type type;
|
|
enum hal_tcl_encap_type encap_type;
|
|
dma_addr_t paddr;
|
|
u32 data_len;
|
|
u32 pkt_offset;
|
|
enum hal_encrypt_type encrypt_type;
|
|
u32 flags0; /* %HAL_TCL_DATA_CMD_INFO1_ */
|
|
u32 flags1; /* %HAL_TCL_DATA_CMD_INFO2_ */
|
|
u16 addr_search_flags; /* %HAL_TCL_DATA_CMD_INFO0_ADDR(X/Y)_ */
|
|
u16 bss_ast_hash;
|
|
u16 bss_ast_idx;
|
|
u8 tid;
|
|
u8 search_type; /* %HAL_TX_ADDR_SEARCH_ */
|
|
u8 lmac_id;
|
|
u8 dscp_tid_tbl_idx;
|
|
bool enable_mesh;
|
|
u8 rbm_id;
|
|
};
|
|
|
|
/* TODO: Check if the actual desc macros can be used instead */
|
|
#define HAL_TX_STATUS_FLAGS_FIRST_MSDU BIT(0)
|
|
#define HAL_TX_STATUS_FLAGS_LAST_MSDU BIT(1)
|
|
#define HAL_TX_STATUS_FLAGS_MSDU_IN_AMSDU BIT(2)
|
|
#define HAL_TX_STATUS_FLAGS_RATE_STATS_VALID BIT(3)
|
|
#define HAL_TX_STATUS_FLAGS_RATE_LDPC BIT(4)
|
|
#define HAL_TX_STATUS_FLAGS_RATE_STBC BIT(5)
|
|
#define HAL_TX_STATUS_FLAGS_OFDMA BIT(6)
|
|
|
|
#define HAL_TX_STATUS_DESC_LEN sizeof(struct hal_wbm_release_ring)
|
|
|
|
/* Tx status parsed from srng desc */
|
|
struct hal_tx_status {
|
|
enum hal_wbm_rel_src_module buf_rel_source;
|
|
enum hal_wbm_tqm_rel_reason status;
|
|
u8 ack_rssi;
|
|
u32 flags; /* %HAL_TX_STATUS_FLAGS_ */
|
|
u32 ppdu_id;
|
|
u8 try_cnt;
|
|
u8 tid;
|
|
u16 peer_id;
|
|
u32 rate_stats;
|
|
};
|
|
|
|
void ath11k_hal_tx_cmd_desc_setup(struct ath11k_base *ab, void *cmd,
|
|
struct hal_tx_info *ti);
|
|
void ath11k_hal_tx_set_dscp_tid_map(struct ath11k_base *ab, int id);
|
|
int ath11k_hal_reo_cmd_send(struct ath11k_base *ab, struct hal_srng *srng,
|
|
enum hal_reo_cmd_type type,
|
|
struct ath11k_hal_reo_cmd *cmd);
|
|
void ath11k_hal_tx_init_data_ring(struct ath11k_base *ab,
|
|
struct hal_srng *srng);
|
|
#endif
|