18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ 28c2ecf20Sopenharmony_ci/* Copyright(c) 2018-2019 Realtek Corporation 38c2ecf20Sopenharmony_ci */ 48c2ecf20Sopenharmony_ci 58c2ecf20Sopenharmony_ci#ifndef __RTW_TX_H_ 68c2ecf20Sopenharmony_ci#define __RTW_TX_H_ 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ci#define RTK_TX_MAX_AGG_NUM_MASK 0x1f 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci#define RTW_TX_PROBE_TIMEOUT msecs_to_jiffies(500) 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ci#define SET_TX_DESC_TXPKTSIZE(txdesc, value) \ 138c2ecf20Sopenharmony_ci le32p_replace_bits((__le32 *)(txdesc) + 0x00, value, GENMASK(15, 0)) 148c2ecf20Sopenharmony_ci#define SET_TX_DESC_OFFSET(txdesc, value) \ 158c2ecf20Sopenharmony_ci le32p_replace_bits((__le32 *)(txdesc) + 0x00, value, GENMASK(23, 16)) 168c2ecf20Sopenharmony_ci#define SET_TX_DESC_PKT_OFFSET(txdesc, value) \ 178c2ecf20Sopenharmony_ci le32p_replace_bits((__le32 *)(txdesc) + 0x01, value, GENMASK(28, 24)) 188c2ecf20Sopenharmony_ci#define SET_TX_DESC_QSEL(txdesc, value) \ 198c2ecf20Sopenharmony_ci le32p_replace_bits((__le32 *)(txdesc) + 0x01, value, GENMASK(12, 8)) 208c2ecf20Sopenharmony_ci#define SET_TX_DESC_BMC(txdesc, value) \ 218c2ecf20Sopenharmony_ci le32p_replace_bits((__le32 *)(txdesc) + 0x00, value, BIT(24)) 228c2ecf20Sopenharmony_ci#define SET_TX_DESC_RATE_ID(txdesc, value) \ 238c2ecf20Sopenharmony_ci le32p_replace_bits((__le32 *)(txdesc) + 0x01, value, GENMASK(20, 16)) 248c2ecf20Sopenharmony_ci#define SET_TX_DESC_DATARATE(txdesc, value) \ 258c2ecf20Sopenharmony_ci le32p_replace_bits((__le32 *)(txdesc) + 0x04, value, GENMASK(6, 0)) 268c2ecf20Sopenharmony_ci#define SET_TX_DESC_DISDATAFB(txdesc, value) \ 278c2ecf20Sopenharmony_ci le32p_replace_bits((__le32 *)(txdesc) + 0x03, value, BIT(10)) 288c2ecf20Sopenharmony_ci#define SET_TX_DESC_USE_RATE(txdesc, value) \ 298c2ecf20Sopenharmony_ci le32p_replace_bits((__le32 *)(txdesc) + 0x03, value, BIT(8)) 308c2ecf20Sopenharmony_ci#define SET_TX_DESC_SEC_TYPE(txdesc, value) \ 318c2ecf20Sopenharmony_ci le32p_replace_bits((__le32 *)(txdesc) + 0x01, value, GENMASK(23, 22)) 328c2ecf20Sopenharmony_ci#define SET_TX_DESC_DATA_BW(txdesc, value) \ 338c2ecf20Sopenharmony_ci le32p_replace_bits((__le32 *)(txdesc) + 0x05, value, GENMASK(6, 5)) 348c2ecf20Sopenharmony_ci#define SET_TX_DESC_SW_SEQ(txdesc, value) \ 358c2ecf20Sopenharmony_ci le32p_replace_bits((__le32 *)(txdesc) + 0x09, value, GENMASK(23, 12)) 368c2ecf20Sopenharmony_ci#define SET_TX_DESC_MAX_AGG_NUM(txdesc, value) \ 378c2ecf20Sopenharmony_ci le32p_replace_bits((__le32 *)(txdesc) + 0x03, value, GENMASK(21, 17)) 388c2ecf20Sopenharmony_ci#define SET_TX_DESC_USE_RTS(tx_desc, value) \ 398c2ecf20Sopenharmony_ci le32p_replace_bits((__le32 *)(txdesc) + 0x03, value, BIT(12)) 408c2ecf20Sopenharmony_ci#define SET_TX_DESC_AMPDU_DENSITY(txdesc, value) \ 418c2ecf20Sopenharmony_ci le32p_replace_bits((__le32 *)(txdesc) + 0x02, value, GENMASK(22, 20)) 428c2ecf20Sopenharmony_ci#define SET_TX_DESC_DATA_STBC(txdesc, value) \ 438c2ecf20Sopenharmony_ci le32p_replace_bits((__le32 *)(txdesc) + 0x05, value, GENMASK(9, 8)) 448c2ecf20Sopenharmony_ci#define SET_TX_DESC_DATA_LDPC(txdesc, value) \ 458c2ecf20Sopenharmony_ci le32p_replace_bits((__le32 *)(txdesc) + 0x05, value, BIT(7)) 468c2ecf20Sopenharmony_ci#define SET_TX_DESC_AGG_EN(txdesc, value) \ 478c2ecf20Sopenharmony_ci le32p_replace_bits((__le32 *)(txdesc) + 0x02, value, BIT(12)) 488c2ecf20Sopenharmony_ci#define SET_TX_DESC_LS(txdesc, value) \ 498c2ecf20Sopenharmony_ci le32p_replace_bits((__le32 *)(txdesc) + 0x00, value, BIT(26)) 508c2ecf20Sopenharmony_ci#define SET_TX_DESC_DATA_SHORT(txdesc, value) \ 518c2ecf20Sopenharmony_ci le32p_replace_bits((__le32 *)(txdesc) + 0x05, value, BIT(4)) 528c2ecf20Sopenharmony_ci#define SET_TX_DESC_SPE_RPT(tx_desc, value) \ 538c2ecf20Sopenharmony_ci le32p_replace_bits((__le32 *)(txdesc) + 0x02, value, BIT(19)) 548c2ecf20Sopenharmony_ci#define SET_TX_DESC_SW_DEFINE(tx_desc, value) \ 558c2ecf20Sopenharmony_ci le32p_replace_bits((__le32 *)(txdesc) + 0x06, value, GENMASK(11, 0)) 568c2ecf20Sopenharmony_ci#define SET_TX_DESC_DISQSELSEQ(txdesc, value) \ 578c2ecf20Sopenharmony_ci le32p_replace_bits((__le32 *)(txdesc) + 0x00, value, BIT(31)) 588c2ecf20Sopenharmony_ci#define SET_TX_DESC_EN_HWSEQ(txdesc, value) \ 598c2ecf20Sopenharmony_ci le32p_replace_bits((__le32 *)(txdesc) + 0x08, value, BIT(15)) 608c2ecf20Sopenharmony_ci#define SET_TX_DESC_HW_SSN_SEL(txdesc, value) \ 618c2ecf20Sopenharmony_ci le32p_replace_bits((__le32 *)(txdesc) + 0x03, value, GENMASK(7, 6)) 628c2ecf20Sopenharmony_ci#define SET_TX_DESC_NAVUSEHDR(txdesc, value) \ 638c2ecf20Sopenharmony_ci le32p_replace_bits((__le32 *)(txdesc) + 0x03, value, BIT(15)) 648c2ecf20Sopenharmony_ci#define SET_TX_DESC_BT_NULL(txdesc, value) \ 658c2ecf20Sopenharmony_ci le32p_replace_bits((__le32 *)(txdesc) + 0x02, value, BIT(23)) 668c2ecf20Sopenharmony_ci 678c2ecf20Sopenharmony_cienum rtw_tx_desc_queue_select { 688c2ecf20Sopenharmony_ci TX_DESC_QSEL_TID0 = 0, 698c2ecf20Sopenharmony_ci TX_DESC_QSEL_TID1 = 1, 708c2ecf20Sopenharmony_ci TX_DESC_QSEL_TID2 = 2, 718c2ecf20Sopenharmony_ci TX_DESC_QSEL_TID3 = 3, 728c2ecf20Sopenharmony_ci TX_DESC_QSEL_TID4 = 4, 738c2ecf20Sopenharmony_ci TX_DESC_QSEL_TID5 = 5, 748c2ecf20Sopenharmony_ci TX_DESC_QSEL_TID6 = 6, 758c2ecf20Sopenharmony_ci TX_DESC_QSEL_TID7 = 7, 768c2ecf20Sopenharmony_ci TX_DESC_QSEL_TID8 = 8, 778c2ecf20Sopenharmony_ci TX_DESC_QSEL_TID9 = 9, 788c2ecf20Sopenharmony_ci TX_DESC_QSEL_TID10 = 10, 798c2ecf20Sopenharmony_ci TX_DESC_QSEL_TID11 = 11, 808c2ecf20Sopenharmony_ci TX_DESC_QSEL_TID12 = 12, 818c2ecf20Sopenharmony_ci TX_DESC_QSEL_TID13 = 13, 828c2ecf20Sopenharmony_ci TX_DESC_QSEL_TID14 = 14, 838c2ecf20Sopenharmony_ci TX_DESC_QSEL_TID15 = 15, 848c2ecf20Sopenharmony_ci TX_DESC_QSEL_BEACON = 16, 858c2ecf20Sopenharmony_ci TX_DESC_QSEL_HIGH = 17, 868c2ecf20Sopenharmony_ci TX_DESC_QSEL_MGMT = 18, 878c2ecf20Sopenharmony_ci TX_DESC_QSEL_H2C = 19, 888c2ecf20Sopenharmony_ci}; 898c2ecf20Sopenharmony_ci 908c2ecf20Sopenharmony_cienum rtw_rsvd_packet_type; 918c2ecf20Sopenharmony_ci 928c2ecf20Sopenharmony_civoid rtw_tx(struct rtw_dev *rtwdev, 938c2ecf20Sopenharmony_ci struct ieee80211_tx_control *control, 948c2ecf20Sopenharmony_ci struct sk_buff *skb); 958c2ecf20Sopenharmony_civoid rtw_txq_init(struct rtw_dev *rtwdev, struct ieee80211_txq *txq); 968c2ecf20Sopenharmony_civoid rtw_txq_cleanup(struct rtw_dev *rtwdev, struct ieee80211_txq *txq); 978c2ecf20Sopenharmony_civoid rtw_tx_tasklet(struct tasklet_struct *t); 988c2ecf20Sopenharmony_civoid rtw_tx_pkt_info_update(struct rtw_dev *rtwdev, 998c2ecf20Sopenharmony_ci struct rtw_tx_pkt_info *pkt_info, 1008c2ecf20Sopenharmony_ci struct ieee80211_sta *sta, 1018c2ecf20Sopenharmony_ci struct sk_buff *skb); 1028c2ecf20Sopenharmony_civoid rtw_tx_fill_tx_desc(struct rtw_tx_pkt_info *pkt_info, struct sk_buff *skb); 1038c2ecf20Sopenharmony_civoid rtw_tx_report_enqueue(struct rtw_dev *rtwdev, struct sk_buff *skb, u8 sn); 1048c2ecf20Sopenharmony_civoid rtw_tx_report_handle(struct rtw_dev *rtwdev, struct sk_buff *skb, int src); 1058c2ecf20Sopenharmony_civoid rtw_tx_rsvd_page_pkt_info_update(struct rtw_dev *rtwdev, 1068c2ecf20Sopenharmony_ci struct rtw_tx_pkt_info *pkt_info, 1078c2ecf20Sopenharmony_ci struct sk_buff *skb, 1088c2ecf20Sopenharmony_ci enum rtw_rsvd_packet_type type); 1098c2ecf20Sopenharmony_cistruct sk_buff * 1108c2ecf20Sopenharmony_cirtw_tx_write_data_rsvd_page_get(struct rtw_dev *rtwdev, 1118c2ecf20Sopenharmony_ci struct rtw_tx_pkt_info *pkt_info, 1128c2ecf20Sopenharmony_ci u8 *buf, u32 size); 1138c2ecf20Sopenharmony_cistruct sk_buff * 1148c2ecf20Sopenharmony_cirtw_tx_write_data_h2c_get(struct rtw_dev *rtwdev, 1158c2ecf20Sopenharmony_ci struct rtw_tx_pkt_info *pkt_info, 1168c2ecf20Sopenharmony_ci u8 *buf, u32 size); 1178c2ecf20Sopenharmony_ci 1188c2ecf20Sopenharmony_ci#endif 119