1d5c65159SKalle Valo /* SPDX-License-Identifier: BSD-3-Clause-Clear */ 2d5c65159SKalle Valo /* 3d5c65159SKalle Valo * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved. 4d5c65159SKalle Valo */ 5d5c65159SKalle Valo 6d5c65159SKalle Valo #ifndef ATH11K_HAL_TX_H 7d5c65159SKalle Valo #define ATH11K_HAL_TX_H 8d5c65159SKalle Valo 9d5c65159SKalle Valo #include "hal_desc.h" 10d5c65159SKalle Valo 11d5c65159SKalle Valo #define HAL_TX_ADDRX_EN 1 12d5c65159SKalle Valo #define HAL_TX_ADDRY_EN 2 13d5c65159SKalle Valo 140f37fbf4SAnilkumar Kolli #define HAL_TX_ADDR_SEARCH_DEFAULT 0 150f37fbf4SAnilkumar Kolli #define HAL_TX_ADDR_SEARCH_INDEX 1 16d5c65159SKalle Valo 17d5c65159SKalle Valo struct hal_tx_info { 18d5c65159SKalle Valo u16 meta_data_flags; /* %HAL_TCL_DATA_CMD_INFO0_META_ */ 19d5c65159SKalle Valo u8 ring_id; 20d5c65159SKalle Valo u32 desc_id; 21d5c65159SKalle Valo enum hal_tcl_desc_type type; 22d5c65159SKalle Valo enum hal_tcl_encap_type encap_type; 23d5c65159SKalle Valo dma_addr_t paddr; 24d5c65159SKalle Valo u32 data_len; 25d5c65159SKalle Valo u32 pkt_offset; 26d5c65159SKalle Valo enum hal_encrypt_type encrypt_type; 27d5c65159SKalle Valo u32 flags0; /* %HAL_TCL_DATA_CMD_INFO1_ */ 28d5c65159SKalle Valo u32 flags1; /* %HAL_TCL_DATA_CMD_INFO2_ */ 29d5c65159SKalle Valo u16 addr_search_flags; /* %HAL_TCL_DATA_CMD_INFO0_ADDR(X/Y)_ */ 30d5c65159SKalle Valo u16 bss_ast_hash; 31d5c65159SKalle Valo u8 tid; 32d5c65159SKalle Valo u8 search_type; /* %HAL_TX_ADDR_SEARCH_ */ 33d5c65159SKalle Valo u8 lmac_id; 34d5c65159SKalle Valo u8 dscp_tid_tbl_idx; 35d5c65159SKalle Valo }; 36d5c65159SKalle Valo 37d5c65159SKalle Valo /* TODO: Check if the actual desc macros can be used instead */ 38d5c65159SKalle Valo #define HAL_TX_STATUS_FLAGS_FIRST_MSDU BIT(0) 39d5c65159SKalle Valo #define HAL_TX_STATUS_FLAGS_LAST_MSDU BIT(1) 40d5c65159SKalle Valo #define HAL_TX_STATUS_FLAGS_MSDU_IN_AMSDU BIT(2) 41d5c65159SKalle Valo #define HAL_TX_STATUS_FLAGS_RATE_STATS_VALID BIT(3) 42d5c65159SKalle Valo #define HAL_TX_STATUS_FLAGS_RATE_LDPC BIT(4) 43d5c65159SKalle Valo #define HAL_TX_STATUS_FLAGS_RATE_STBC BIT(5) 44d5c65159SKalle Valo #define HAL_TX_STATUS_FLAGS_OFDMA BIT(6) 45d5c65159SKalle Valo 46d5c65159SKalle Valo #define HAL_TX_STATUS_DESC_LEN sizeof(struct hal_wbm_release_ring) 47d5c65159SKalle Valo 48d5c65159SKalle Valo /* Tx status parsed from srng desc */ 49d5c65159SKalle Valo struct hal_tx_status { 50d5c65159SKalle Valo enum hal_wbm_rel_src_module buf_rel_source; 51d5c65159SKalle Valo enum hal_wbm_tqm_rel_reason status; 52d5c65159SKalle Valo u8 ack_rssi; 53d5c65159SKalle Valo u32 flags; /* %HAL_TX_STATUS_FLAGS_ */ 54d5c65159SKalle Valo u32 ppdu_id; 55d5c65159SKalle Valo u8 try_cnt; 56d5c65159SKalle Valo u8 tid; 57d5c65159SKalle Valo u16 peer_id; 58*8cfa7ef8SJohn Crispin u32 rate_stats; 59d5c65159SKalle Valo }; 60d5c65159SKalle Valo 61d5c65159SKalle Valo void ath11k_hal_tx_cmd_desc_setup(struct ath11k_base *ab, void *cmd, 62d5c65159SKalle Valo struct hal_tx_info *ti); 63d5c65159SKalle Valo void ath11k_hal_tx_set_dscp_tid_map(struct ath11k_base *ab, int id); 64d5c65159SKalle Valo int ath11k_hal_reo_cmd_send(struct ath11k_base *ab, struct hal_srng *srng, 65d5c65159SKalle Valo enum hal_reo_cmd_type type, 66d5c65159SKalle Valo struct ath11k_hal_reo_cmd *cmd); 67d5c65159SKalle Valo void ath11k_hal_tx_init_data_ring(struct ath11k_base *ab, 68d5c65159SKalle Valo struct hal_srng *srng); 69d5c65159SKalle Valo #endif 70