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