mirror of
https://github.com/torvalds/linux.git
synced 2026-06-01 19:13:47 +02:00
wifi: rtw89: abstract getting function of DMA channel
The mapping function from QSEL (almost equivalent EDCA queue) to PCI DMA channel. Since coming chips change the definition, abstract this function as a chip_ops. Don't change logic at all. Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Link: https://patch.msgid.link/20250826085339.28512-1-pkshih@realtek.com
This commit is contained in:
parent
110f3c11f4
commit
571ce803c2
|
|
@ -699,6 +699,44 @@ static void rtw89_core_tx_update_llc_hdr(struct rtw89_dev *rtwdev,
|
|||
desc_info->hdr_llc_len >>= 1; /* in unit of 2 bytes */
|
||||
}
|
||||
|
||||
u8 rtw89_core_get_ch_dma(struct rtw89_dev *rtwdev, u8 qsel)
|
||||
{
|
||||
switch (qsel) {
|
||||
default:
|
||||
rtw89_warn(rtwdev, "Cannot map qsel to dma: %d\n", qsel);
|
||||
fallthrough;
|
||||
case RTW89_TX_QSEL_BE_0:
|
||||
case RTW89_TX_QSEL_BE_1:
|
||||
case RTW89_TX_QSEL_BE_2:
|
||||
case RTW89_TX_QSEL_BE_3:
|
||||
return RTW89_TXCH_ACH0;
|
||||
case RTW89_TX_QSEL_BK_0:
|
||||
case RTW89_TX_QSEL_BK_1:
|
||||
case RTW89_TX_QSEL_BK_2:
|
||||
case RTW89_TX_QSEL_BK_3:
|
||||
return RTW89_TXCH_ACH1;
|
||||
case RTW89_TX_QSEL_VI_0:
|
||||
case RTW89_TX_QSEL_VI_1:
|
||||
case RTW89_TX_QSEL_VI_2:
|
||||
case RTW89_TX_QSEL_VI_3:
|
||||
return RTW89_TXCH_ACH2;
|
||||
case RTW89_TX_QSEL_VO_0:
|
||||
case RTW89_TX_QSEL_VO_1:
|
||||
case RTW89_TX_QSEL_VO_2:
|
||||
case RTW89_TX_QSEL_VO_3:
|
||||
return RTW89_TXCH_ACH3;
|
||||
case RTW89_TX_QSEL_B0_MGMT:
|
||||
return RTW89_TXCH_CH8;
|
||||
case RTW89_TX_QSEL_B0_HI:
|
||||
return RTW89_TXCH_CH9;
|
||||
case RTW89_TX_QSEL_B1_MGMT:
|
||||
return RTW89_TXCH_CH10;
|
||||
case RTW89_TX_QSEL_B1_HI:
|
||||
return RTW89_TXCH_CH11;
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(rtw89_core_get_ch_dma);
|
||||
|
||||
static void
|
||||
rtw89_core_tx_update_mgmt_info(struct rtw89_dev *rtwdev,
|
||||
struct rtw89_core_tx_request *tx_req)
|
||||
|
|
@ -712,7 +750,7 @@ rtw89_core_tx_update_mgmt_info(struct rtw89_dev *rtwdev,
|
|||
u8 qsel, ch_dma;
|
||||
|
||||
qsel = rtw89_core_get_qsel_mgmt(rtwdev, tx_req);
|
||||
ch_dma = rtw89_core_get_ch_dma(rtwdev, qsel);
|
||||
ch_dma = rtw89_chip_get_ch_dma(rtwdev, qsel);
|
||||
|
||||
desc_info->qsel = qsel;
|
||||
desc_info->ch_dma = ch_dma;
|
||||
|
|
@ -929,7 +967,7 @@ rtw89_core_tx_update_data_info(struct rtw89_dev *rtwdev,
|
|||
tid = skb->priority & IEEE80211_QOS_CTL_TAG1D_MASK;
|
||||
tid_indicate = rtw89_core_get_tid_indicate(rtwdev, tid);
|
||||
qsel = desc_info->hiq ? RTW89_TX_QSEL_B0_HI : rtw89_core_get_qsel(rtwdev, tid);
|
||||
ch_dma = rtw89_core_get_ch_dma(rtwdev, qsel);
|
||||
ch_dma = rtw89_chip_get_ch_dma(rtwdev, qsel);
|
||||
|
||||
desc_info->ch_dma = ch_dma;
|
||||
desc_info->tid_indicate = tid_indicate;
|
||||
|
|
@ -1079,7 +1117,7 @@ void rtw89_core_tx_kick_off(struct rtw89_dev *rtwdev, u8 qsel)
|
|||
{
|
||||
u8 ch_dma;
|
||||
|
||||
ch_dma = rtw89_core_get_ch_dma(rtwdev, qsel);
|
||||
ch_dma = rtw89_chip_get_ch_dma(rtwdev, qsel);
|
||||
|
||||
rtw89_hci_tx_kick_off(rtwdev, ch_dma);
|
||||
}
|
||||
|
|
@ -3664,7 +3702,7 @@ static u32 rtw89_check_and_reclaim_tx_resource(struct rtw89_dev *rtwdev, u8 tid)
|
|||
u8 qsel, ch_dma;
|
||||
|
||||
qsel = rtw89_core_get_qsel(rtwdev, tid);
|
||||
ch_dma = rtw89_core_get_ch_dma(rtwdev, qsel);
|
||||
ch_dma = rtw89_chip_get_ch_dma(rtwdev, qsel);
|
||||
|
||||
return rtw89_hci_check_and_reclaim_tx_resource(rtwdev, ch_dma);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3760,6 +3760,7 @@ struct rtw89_chip_ops {
|
|||
void (*fill_txdesc_fwcmd)(struct rtw89_dev *rtwdev,
|
||||
struct rtw89_tx_desc_info *desc_info,
|
||||
void *txdesc);
|
||||
u8 (*get_ch_dma)(struct rtw89_dev *rtwdev, u8 qsel);
|
||||
int (*cfg_ctrl_path)(struct rtw89_dev *rtwdev, bool wl);
|
||||
int (*mac_cfg_gnt)(struct rtw89_dev *rtwdev,
|
||||
const struct rtw89_mac_ax_coex_gnt *gnt_cfg);
|
||||
|
|
@ -7197,6 +7198,14 @@ void rtw89_chip_fill_txdesc_fwcmd(struct rtw89_dev *rtwdev,
|
|||
chip->ops->fill_txdesc_fwcmd(rtwdev, desc_info, txdesc);
|
||||
}
|
||||
|
||||
static inline
|
||||
u8 rtw89_chip_get_ch_dma(struct rtw89_dev *rtwdev, u8 qsel)
|
||||
{
|
||||
const struct rtw89_chip_info *chip = rtwdev->chip;
|
||||
|
||||
return chip->ops->get_ch_dma(rtwdev, qsel);
|
||||
}
|
||||
|
||||
static inline
|
||||
void rtw89_chip_mac_cfg_gnt(struct rtw89_dev *rtwdev,
|
||||
const struct rtw89_mac_ax_coex_gnt *gnt_cfg)
|
||||
|
|
@ -7441,6 +7450,7 @@ void rtw89_core_fill_txdesc_fwcmd_v1(struct rtw89_dev *rtwdev,
|
|||
void rtw89_core_fill_txdesc_fwcmd_v2(struct rtw89_dev *rtwdev,
|
||||
struct rtw89_tx_desc_info *desc_info,
|
||||
void *txdesc);
|
||||
u8 rtw89_core_get_ch_dma(struct rtw89_dev *rtwdev, u8 qsel);
|
||||
void rtw89_core_rx(struct rtw89_dev *rtwdev,
|
||||
struct rtw89_rx_desc_info *desc_info,
|
||||
struct sk_buff *skb);
|
||||
|
|
|
|||
|
|
@ -576,7 +576,7 @@ void rtw89_pci_parse_rpp(struct rtw89_dev *rtwdev, void *_rpp,
|
|||
rpp_info->seq = le32_get_bits(rpp->dword, RTW89_PCI_RPP_SEQ);
|
||||
rpp_info->qsel = le32_get_bits(rpp->dword, RTW89_PCI_RPP_QSEL);
|
||||
rpp_info->tx_status = le32_get_bits(rpp->dword, RTW89_PCI_RPP_TX_STATUS);
|
||||
rpp_info->txch = rtw89_core_get_ch_dma(rtwdev, rpp_info->qsel);
|
||||
rpp_info->txch = rtw89_chip_get_ch_dma(rtwdev, rpp_info->qsel);
|
||||
}
|
||||
EXPORT_SYMBOL(rtw89_pci_parse_rpp);
|
||||
|
||||
|
|
|
|||
|
|
@ -2537,6 +2537,7 @@ static const struct rtw89_chip_ops rtw8851b_chip_ops = {
|
|||
.query_rxdesc = rtw89_core_query_rxdesc,
|
||||
.fill_txdesc = rtw89_core_fill_txdesc,
|
||||
.fill_txdesc_fwcmd = rtw89_core_fill_txdesc,
|
||||
.get_ch_dma = rtw89_core_get_ch_dma,
|
||||
.cfg_ctrl_path = rtw89_mac_cfg_ctrl_path,
|
||||
.mac_cfg_gnt = rtw89_mac_cfg_gnt,
|
||||
.stop_sch_tx = rtw89_mac_stop_sch_tx,
|
||||
|
|
|
|||
|
|
@ -2178,6 +2178,7 @@ static const struct rtw89_chip_ops rtw8852a_chip_ops = {
|
|||
.query_rxdesc = rtw89_core_query_rxdesc,
|
||||
.fill_txdesc = rtw89_core_fill_txdesc,
|
||||
.fill_txdesc_fwcmd = rtw89_core_fill_txdesc,
|
||||
.get_ch_dma = rtw89_core_get_ch_dma,
|
||||
.cfg_ctrl_path = rtw89_mac_cfg_ctrl_path,
|
||||
.mac_cfg_gnt = rtw89_mac_cfg_gnt,
|
||||
.stop_sch_tx = rtw89_mac_stop_sch_tx,
|
||||
|
|
|
|||
|
|
@ -842,6 +842,7 @@ static const struct rtw89_chip_ops rtw8852b_chip_ops = {
|
|||
.query_rxdesc = rtw89_core_query_rxdesc,
|
||||
.fill_txdesc = rtw89_core_fill_txdesc,
|
||||
.fill_txdesc_fwcmd = rtw89_core_fill_txdesc,
|
||||
.get_ch_dma = rtw89_core_get_ch_dma,
|
||||
.cfg_ctrl_path = rtw89_mac_cfg_ctrl_path,
|
||||
.mac_cfg_gnt = rtw89_mac_cfg_gnt,
|
||||
.stop_sch_tx = rtw89_mac_stop_sch_tx,
|
||||
|
|
|
|||
|
|
@ -708,6 +708,7 @@ static const struct rtw89_chip_ops rtw8852bt_chip_ops = {
|
|||
.query_rxdesc = rtw89_core_query_rxdesc,
|
||||
.fill_txdesc = rtw89_core_fill_txdesc,
|
||||
.fill_txdesc_fwcmd = rtw89_core_fill_txdesc,
|
||||
.get_ch_dma = rtw89_core_get_ch_dma,
|
||||
.cfg_ctrl_path = rtw89_mac_cfg_ctrl_path,
|
||||
.mac_cfg_gnt = rtw89_mac_cfg_gnt,
|
||||
.stop_sch_tx = rtw89_mac_stop_sch_tx,
|
||||
|
|
|
|||
|
|
@ -2962,6 +2962,7 @@ static const struct rtw89_chip_ops rtw8852c_chip_ops = {
|
|||
.query_rxdesc = rtw89_core_query_rxdesc,
|
||||
.fill_txdesc = rtw89_core_fill_txdesc_v1,
|
||||
.fill_txdesc_fwcmd = rtw89_core_fill_txdesc_fwcmd_v1,
|
||||
.get_ch_dma = rtw89_core_get_ch_dma,
|
||||
.cfg_ctrl_path = rtw89_mac_cfg_ctrl_path_v1,
|
||||
.mac_cfg_gnt = rtw89_mac_cfg_gnt_v1,
|
||||
.stop_sch_tx = rtw89_mac_stop_sch_tx_v1,
|
||||
|
|
|
|||
|
|
@ -2817,6 +2817,7 @@ static const struct rtw89_chip_ops rtw8922a_chip_ops = {
|
|||
.query_rxdesc = rtw89_core_query_rxdesc_v2,
|
||||
.fill_txdesc = rtw89_core_fill_txdesc_v2,
|
||||
.fill_txdesc_fwcmd = rtw89_core_fill_txdesc_fwcmd_v2,
|
||||
.get_ch_dma = rtw89_core_get_ch_dma,
|
||||
.cfg_ctrl_path = rtw89_mac_cfg_ctrl_path_v2,
|
||||
.mac_cfg_gnt = rtw89_mac_cfg_gnt_v2,
|
||||
.stop_sch_tx = rtw89_mac_stop_sch_tx_v2,
|
||||
|
|
|
|||
|
|
@ -732,43 +732,6 @@ rtw89_core_get_qsel_mgmt(struct rtw89_dev *rtwdev, struct rtw89_core_tx_request
|
|||
return RTW89_TX_QSEL_B0_MGMT;
|
||||
}
|
||||
|
||||
static inline u8 rtw89_core_get_ch_dma(struct rtw89_dev *rtwdev, u8 qsel)
|
||||
{
|
||||
switch (qsel) {
|
||||
default:
|
||||
rtw89_warn(rtwdev, "Cannot map qsel to dma: %d\n", qsel);
|
||||
fallthrough;
|
||||
case RTW89_TX_QSEL_BE_0:
|
||||
case RTW89_TX_QSEL_BE_1:
|
||||
case RTW89_TX_QSEL_BE_2:
|
||||
case RTW89_TX_QSEL_BE_3:
|
||||
return RTW89_TXCH_ACH0;
|
||||
case RTW89_TX_QSEL_BK_0:
|
||||
case RTW89_TX_QSEL_BK_1:
|
||||
case RTW89_TX_QSEL_BK_2:
|
||||
case RTW89_TX_QSEL_BK_3:
|
||||
return RTW89_TXCH_ACH1;
|
||||
case RTW89_TX_QSEL_VI_0:
|
||||
case RTW89_TX_QSEL_VI_1:
|
||||
case RTW89_TX_QSEL_VI_2:
|
||||
case RTW89_TX_QSEL_VI_3:
|
||||
return RTW89_TXCH_ACH2;
|
||||
case RTW89_TX_QSEL_VO_0:
|
||||
case RTW89_TX_QSEL_VO_1:
|
||||
case RTW89_TX_QSEL_VO_2:
|
||||
case RTW89_TX_QSEL_VO_3:
|
||||
return RTW89_TXCH_ACH3;
|
||||
case RTW89_TX_QSEL_B0_MGMT:
|
||||
return RTW89_TXCH_CH8;
|
||||
case RTW89_TX_QSEL_B0_HI:
|
||||
return RTW89_TXCH_CH9;
|
||||
case RTW89_TX_QSEL_B1_MGMT:
|
||||
return RTW89_TXCH_CH10;
|
||||
case RTW89_TX_QSEL_B1_HI:
|
||||
return RTW89_TXCH_CH11;
|
||||
}
|
||||
}
|
||||
|
||||
static inline u8 rtw89_core_get_tid_indicate(struct rtw89_dev *rtwdev, u8 tid)
|
||||
{
|
||||
switch (tid) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user