Commit a30c7d00 authored by Michal Kazior's avatar Michal Kazior Committed by Kalle Valo

ath10k: unify txpath decision

Some future changes will need to determine final
tx method early on. Prepare the code.
Signed-off-by: default avatarMichal Kazior <michal.kazior@tieto.com>
Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
parent f2f6ecab
...@@ -2994,6 +2994,13 @@ static void ath10k_reg_notifier(struct wiphy *wiphy, ...@@ -2994,6 +2994,13 @@ static void ath10k_reg_notifier(struct wiphy *wiphy,
/* TX handlers */ /* TX handlers */
/***************/ /***************/
enum ath10k_mac_tx_path {
ATH10K_MAC_TX_HTT,
ATH10K_MAC_TX_HTT_MGMT,
ATH10K_MAC_TX_WMI_MGMT,
ATH10K_MAC_TX_UNKNOWN,
};
void ath10k_mac_tx_lock(struct ath10k *ar, int reason) void ath10k_mac_tx_lock(struct ath10k *ar, int reason)
{ {
lockdep_assert_held(&ar->htt.tx_lock); lockdep_assert_held(&ar->htt.tx_lock);
...@@ -3326,27 +3333,52 @@ static int ath10k_mac_tx_wmi_mgmt(struct ath10k *ar, struct sk_buff *skb) ...@@ -3326,27 +3333,52 @@ static int ath10k_mac_tx_wmi_mgmt(struct ath10k *ar, struct sk_buff *skb)
return ret; return ret;
} }
static int ath10k_mac_tx_submit(struct ath10k *ar, static enum ath10k_mac_tx_path
enum ath10k_hw_txrx_mode txmode, ath10k_mac_tx_h_get_txpath(struct ath10k *ar,
struct sk_buff *skb) struct sk_buff *skb,
enum ath10k_hw_txrx_mode txmode)
{ {
struct ath10k_htt *htt = &ar->htt;
int ret = 0;
switch (txmode) { switch (txmode) {
case ATH10K_HW_TXRX_RAW: case ATH10K_HW_TXRX_RAW:
case ATH10K_HW_TXRX_NATIVE_WIFI: case ATH10K_HW_TXRX_NATIVE_WIFI:
case ATH10K_HW_TXRX_ETHERNET: case ATH10K_HW_TXRX_ETHERNET:
ret = ath10k_htt_tx(htt, txmode, skb); return ATH10K_MAC_TX_HTT;
break;
case ATH10K_HW_TXRX_MGMT: case ATH10K_HW_TXRX_MGMT:
if (test_bit(ATH10K_FW_FEATURE_HAS_WMI_MGMT_TX, if (test_bit(ATH10K_FW_FEATURE_HAS_WMI_MGMT_TX,
ar->fw_features)) ar->fw_features))
ret = ath10k_mac_tx_wmi_mgmt(ar, skb); return ATH10K_MAC_TX_WMI_MGMT;
else if (ar->htt.target_version_major >= 3) else if (ar->htt.target_version_major >= 3)
ret = ath10k_htt_tx(htt, txmode, skb); return ATH10K_MAC_TX_HTT;
else else
ret = ath10k_htt_mgmt_tx(htt, skb); return ATH10K_MAC_TX_HTT_MGMT;
}
return ATH10K_MAC_TX_UNKNOWN;
}
static int ath10k_mac_tx_submit(struct ath10k *ar,
enum ath10k_hw_txrx_mode txmode,
struct sk_buff *skb)
{
struct ath10k_htt *htt = &ar->htt;
enum ath10k_mac_tx_path txpath;
int ret;
txpath = ath10k_mac_tx_h_get_txpath(ar, skb, txmode);
switch (txpath) {
case ATH10K_MAC_TX_HTT:
ret = ath10k_htt_tx(htt, txmode, skb);
break;
case ATH10K_MAC_TX_HTT_MGMT:
ret = ath10k_htt_mgmt_tx(htt, skb);
break;
case ATH10K_MAC_TX_WMI_MGMT:
ret = ath10k_mac_tx_wmi_mgmt(ar, skb);
break;
case ATH10K_MAC_TX_UNKNOWN:
WARN_ON_ONCE(1);
ret = -EINVAL;
break; break;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment