mirror of
https://github.com/torvalds/linux.git
synced 2026-05-23 22:52:19 +02:00
ath.git patches for v7.1 (PR #2)
A few small cleanups and bug fixes across ath drivers. -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQQ/mtSHzPUi16IfDEksFbugiYzLewUCacKeTQAKCRAsFbugiYzL e6cDAP9C0c6rdwSGYJQO6FPIlU+tNGTpjU11mGORR4gWSlVPywEA6tjY4rGCv3zO 1NNhMun+Ps6WsM63LPHgyeQ45Z8TzgI= =u+bs -----END PGP SIGNATURE----- Merge tag 'ath-next-20260324' of git://git.kernel.org/pub/scm/linux/kernel/git/ath/ath Jeff Johnson says: ================== ath.git patches for v7.1 (PR #2) A few small cleanups and bug fixes across ath drivers. ================== Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
commit
5592d60ef2
|
|
@ -1016,7 +1016,6 @@ static int ath10k_usb_probe(struct usb_interface *interface,
|
|||
|
||||
netif_napi_add(ar->napi_dev, &ar->napi, ath10k_usb_napi_poll);
|
||||
|
||||
usb_get_dev(dev);
|
||||
vendor_id = le16_to_cpu(dev->descriptor.idVendor);
|
||||
product_id = le16_to_cpu(dev->descriptor.idProduct);
|
||||
|
||||
|
|
@ -1055,12 +1054,10 @@ static int ath10k_usb_probe(struct usb_interface *interface,
|
|||
err:
|
||||
ath10k_core_destroy(ar);
|
||||
|
||||
usb_put_dev(dev);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void ath10k_usb_remove(struct usb_interface *interface)
|
||||
static void ath10k_usb_disconnect(struct usb_interface *interface)
|
||||
{
|
||||
struct ath10k_usb *ar_usb;
|
||||
|
||||
|
|
@ -1071,7 +1068,6 @@ static void ath10k_usb_remove(struct usb_interface *interface)
|
|||
ath10k_core_unregister(ar_usb->ar);
|
||||
netif_napi_del(&ar_usb->ar->napi);
|
||||
ath10k_usb_destroy(ar_usb->ar);
|
||||
usb_put_dev(interface_to_usbdev(interface));
|
||||
ath10k_core_destroy(ar_usb->ar);
|
||||
}
|
||||
|
||||
|
|
@ -1117,7 +1113,7 @@ static struct usb_driver ath10k_usb_driver = {
|
|||
.probe = ath10k_usb_probe,
|
||||
.suspend = ath10k_usb_pm_suspend,
|
||||
.resume = ath10k_usb_pm_resume,
|
||||
.disconnect = ath10k_usb_remove,
|
||||
.disconnect = ath10k_usb_disconnect,
|
||||
.id_table = ath10k_usb_ids,
|
||||
.supports_autosuspend = true,
|
||||
.disable_hub_initiated_lpm = 1,
|
||||
|
|
|
|||
|
|
@ -21,8 +21,8 @@
|
|||
#define ATH12K_ROOTPD_READY_TIMEOUT (5 * HZ)
|
||||
#define ATH12K_RPROC_AFTER_POWERUP QCOM_SSR_AFTER_POWERUP
|
||||
#define ATH12K_AHB_FW_PREFIX "q6_fw"
|
||||
#define ATH12K_AHB_FW_SUFFIX ".mdt"
|
||||
#define ATH12K_AHB_FW2 "iu_fw.mdt"
|
||||
#define ATH12K_AHB_FW_SUFFIX ".mbn"
|
||||
#define ATH12K_AHB_FW2 "iu_fw.mbn"
|
||||
#define ATH12K_AHB_UPD_SWID 0x12
|
||||
#define ATH12K_USERPD_SPAWN_TIMEOUT (5 * HZ)
|
||||
#define ATH12K_USERPD_READY_TIMEOUT (10 * HZ)
|
||||
|
|
|
|||
|
|
@ -523,7 +523,7 @@ struct ath12k_sta {
|
|||
u16 links_map;
|
||||
u8 assoc_link_id;
|
||||
u16 ml_peer_id;
|
||||
u8 num_peer;
|
||||
u16 free_logical_link_idx_map;
|
||||
|
||||
enum ieee80211_sta_state state;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -205,16 +205,9 @@ ath12k_update_per_peer_tx_stats(struct ath12k_pdev_dp *dp_pdev,
|
|||
if (!(usr_stats->tlv_flags & BIT(HTT_PPDU_STATS_TAG_USR_RATE)))
|
||||
return;
|
||||
|
||||
if (usr_stats->tlv_flags & BIT(HTT_PPDU_STATS_TAG_USR_COMPLTN_COMMON)) {
|
||||
if (usr_stats->tlv_flags & BIT(HTT_PPDU_STATS_TAG_USR_COMPLTN_COMMON))
|
||||
is_ampdu =
|
||||
HTT_USR_CMPLTN_IS_AMPDU(usr_stats->cmpltn_cmn.flags);
|
||||
tx_retry_failed =
|
||||
__le16_to_cpu(usr_stats->cmpltn_cmn.mpdu_tried) -
|
||||
__le16_to_cpu(usr_stats->cmpltn_cmn.mpdu_success);
|
||||
tx_retry_count =
|
||||
HTT_USR_CMPLTN_LONG_RETRY(usr_stats->cmpltn_cmn.flags) +
|
||||
HTT_USR_CMPLTN_SHORT_RETRY(usr_stats->cmpltn_cmn.flags);
|
||||
}
|
||||
|
||||
if (usr_stats->tlv_flags &
|
||||
BIT(HTT_PPDU_STATS_TAG_USR_COMPLTN_ACK_BA_STATUS)) {
|
||||
|
|
@ -223,10 +216,19 @@ ath12k_update_per_peer_tx_stats(struct ath12k_pdev_dp *dp_pdev,
|
|||
HTT_PPDU_STATS_ACK_BA_INFO_NUM_MSDU_M);
|
||||
tid = le32_get_bits(usr_stats->ack_ba.info,
|
||||
HTT_PPDU_STATS_ACK_BA_INFO_TID_NUM);
|
||||
}
|
||||
|
||||
if (common->fes_duration_us)
|
||||
tx_duration = le32_to_cpu(common->fes_duration_us);
|
||||
if (usr_stats->tlv_flags & BIT(HTT_PPDU_STATS_TAG_USR_COMPLTN_COMMON)) {
|
||||
tx_retry_failed =
|
||||
__le16_to_cpu(usr_stats->cmpltn_cmn.mpdu_tried) -
|
||||
__le16_to_cpu(usr_stats->cmpltn_cmn.mpdu_success);
|
||||
tx_retry_count =
|
||||
HTT_USR_CMPLTN_LONG_RETRY(usr_stats->cmpltn_cmn.flags) +
|
||||
HTT_USR_CMPLTN_SHORT_RETRY(usr_stats->cmpltn_cmn.flags);
|
||||
}
|
||||
|
||||
if (common->fes_duration_us)
|
||||
tx_duration = le32_to_cpu(common->fes_duration_us);
|
||||
}
|
||||
|
||||
user_rate = &usr_stats->rate;
|
||||
flags = HTT_USR_RATE_PREAMBLE(user_rate->rate_flags);
|
||||
|
|
|
|||
|
|
@ -268,21 +268,28 @@ enum hal_rx_reception_type {
|
|||
};
|
||||
|
||||
enum hal_rx_legacy_rate {
|
||||
HAL_RX_LEGACY_RATE_1_MBPS,
|
||||
HAL_RX_LEGACY_RATE_2_MBPS,
|
||||
HAL_RX_LEGACY_RATE_5_5_MBPS,
|
||||
HAL_RX_LEGACY_RATE_6_MBPS,
|
||||
HAL_RX_LEGACY_RATE_9_MBPS,
|
||||
HAL_RX_LEGACY_RATE_11_MBPS,
|
||||
HAL_RX_LEGACY_RATE_12_MBPS,
|
||||
HAL_RX_LEGACY_RATE_18_MBPS,
|
||||
HAL_RX_LEGACY_RATE_24_MBPS,
|
||||
HAL_RX_LEGACY_RATE_36_MBPS,
|
||||
HAL_RX_LEGACY_RATE_48_MBPS,
|
||||
HAL_RX_LEGACY_RATE_54_MBPS,
|
||||
HAL_RX_LEGACY_RATE_LP_1_MBPS,
|
||||
HAL_RX_LEGACY_RATE_LP_2_MBPS,
|
||||
HAL_RX_LEGACY_RATE_LP_5_5_MBPS,
|
||||
HAL_RX_LEGACY_RATE_LP_11_MBPS,
|
||||
HAL_RX_LEGACY_RATE_SP_2_MBPS,
|
||||
HAL_RX_LEGACY_RATE_SP_5_5_MBPS,
|
||||
HAL_RX_LEGACY_RATE_SP_11_MBPS,
|
||||
HAL_RX_LEGACY_RATE_INVALID,
|
||||
};
|
||||
|
||||
enum hal_rx_legacy_rates_ofdm {
|
||||
HAL_RX_LEGACY_RATE_OFDM_48_MBPS,
|
||||
HAL_RX_LEGACY_RATE_OFDM_24_MBPS,
|
||||
HAL_RX_LEGACY_RATE_OFDM_12_MBPS,
|
||||
HAL_RX_LEGACY_RATE_OFDM_6_MBPS,
|
||||
HAL_RX_LEGACY_RATE_OFDM_54_MBPS,
|
||||
HAL_RX_LEGACY_RATE_OFDM_36_MBPS,
|
||||
HAL_RX_LEGACY_RATE_OFDM_18_MBPS,
|
||||
HAL_RX_LEGACY_RATE_OFDM_9_MBPS,
|
||||
HAL_RX_LEGACY_RATE_OFDM_INVALID,
|
||||
};
|
||||
|
||||
enum hal_ring_type {
|
||||
HAL_REO_DST,
|
||||
HAL_REO_EXCEPTION,
|
||||
|
|
|
|||
|
|
@ -164,30 +164,31 @@ static const struct ieee80211_channel ath12k_6ghz_channels[] = {
|
|||
CHAN6G(233, 7115, 0),
|
||||
};
|
||||
|
||||
#define ATH12K_MAC_RATE_A_M(bps, code) \
|
||||
{ .bitrate = (bps), .hw_value = (code),\
|
||||
.flags = IEEE80211_RATE_MANDATORY_A }
|
||||
|
||||
#define ATH12K_MAC_RATE_B(bps, code, code_short) \
|
||||
{ .bitrate = (bps), .hw_value = (code), .hw_value_short = (code_short),\
|
||||
.flags = IEEE80211_RATE_SHORT_PREAMBLE }
|
||||
|
||||
static struct ieee80211_rate ath12k_legacy_rates[] = {
|
||||
{ .bitrate = 10,
|
||||
.hw_value = ATH12K_HW_RATE_CCK_LP_1M },
|
||||
{ .bitrate = 20,
|
||||
.hw_value = ATH12K_HW_RATE_CCK_LP_2M,
|
||||
.hw_value_short = ATH12K_HW_RATE_CCK_SP_2M,
|
||||
.flags = IEEE80211_RATE_SHORT_PREAMBLE },
|
||||
{ .bitrate = 55,
|
||||
.hw_value = ATH12K_HW_RATE_CCK_LP_5_5M,
|
||||
.hw_value_short = ATH12K_HW_RATE_CCK_SP_5_5M,
|
||||
.flags = IEEE80211_RATE_SHORT_PREAMBLE },
|
||||
{ .bitrate = 110,
|
||||
.hw_value = ATH12K_HW_RATE_CCK_LP_11M,
|
||||
.hw_value_short = ATH12K_HW_RATE_CCK_SP_11M,
|
||||
.flags = IEEE80211_RATE_SHORT_PREAMBLE },
|
||||
|
||||
{ .bitrate = 60, .hw_value = ATH12K_HW_RATE_OFDM_6M },
|
||||
{ .bitrate = 90, .hw_value = ATH12K_HW_RATE_OFDM_9M },
|
||||
{ .bitrate = 120, .hw_value = ATH12K_HW_RATE_OFDM_12M },
|
||||
{ .bitrate = 180, .hw_value = ATH12K_HW_RATE_OFDM_18M },
|
||||
{ .bitrate = 240, .hw_value = ATH12K_HW_RATE_OFDM_24M },
|
||||
{ .bitrate = 360, .hw_value = ATH12K_HW_RATE_OFDM_36M },
|
||||
{ .bitrate = 480, .hw_value = ATH12K_HW_RATE_OFDM_48M },
|
||||
{ .bitrate = 540, .hw_value = ATH12K_HW_RATE_OFDM_54M },
|
||||
ATH12K_MAC_RATE_B(20, ATH12K_HW_RATE_CCK_LP_2M,
|
||||
ATH12K_HW_RATE_CCK_SP_2M),
|
||||
ATH12K_MAC_RATE_B(55, ATH12K_HW_RATE_CCK_LP_5_5M,
|
||||
ATH12K_HW_RATE_CCK_SP_5_5M),
|
||||
ATH12K_MAC_RATE_B(110, ATH12K_HW_RATE_CCK_LP_11M,
|
||||
ATH12K_HW_RATE_CCK_SP_11M),
|
||||
ATH12K_MAC_RATE_A_M(60, ATH12K_HW_RATE_OFDM_6M),
|
||||
ATH12K_MAC_RATE_A_M(90, ATH12K_HW_RATE_OFDM_9M),
|
||||
ATH12K_MAC_RATE_A_M(120, ATH12K_HW_RATE_OFDM_12M),
|
||||
ATH12K_MAC_RATE_A_M(180, ATH12K_HW_RATE_OFDM_18M),
|
||||
ATH12K_MAC_RATE_A_M(240, ATH12K_HW_RATE_OFDM_24M),
|
||||
ATH12K_MAC_RATE_A_M(360, ATH12K_HW_RATE_OFDM_36M),
|
||||
ATH12K_MAC_RATE_A_M(480, ATH12K_HW_RATE_OFDM_48M),
|
||||
ATH12K_MAC_RATE_A_M(540, ATH12K_HW_RATE_OFDM_54M),
|
||||
};
|
||||
|
||||
static const int
|
||||
|
|
@ -732,11 +733,17 @@ u8 ath12k_mac_hw_rate_to_idx(const struct ieee80211_supported_band *sband,
|
|||
if (ath12k_mac_bitrate_is_cck(rate->bitrate) != cck)
|
||||
continue;
|
||||
|
||||
if (rate->hw_value == hw_rate)
|
||||
/* To handle 802.11a PPDU type */
|
||||
if ((!cck) && (rate->hw_value == hw_rate) &&
|
||||
(rate->flags & IEEE80211_RATE_MANDATORY_A))
|
||||
return i;
|
||||
/* To handle 802.11b short PPDU type */
|
||||
else if (rate->flags & IEEE80211_RATE_SHORT_PREAMBLE &&
|
||||
rate->hw_value_short == hw_rate)
|
||||
return i;
|
||||
/* To handle 802.11b long PPDU type */
|
||||
else if (rate->hw_value == hw_rate)
|
||||
return i;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
@ -6786,6 +6793,8 @@ static void ath12k_mac_free_unassign_link_sta(struct ath12k_hw *ah,
|
|||
return;
|
||||
|
||||
ahsta->links_map &= ~BIT(link_id);
|
||||
ahsta->free_logical_link_idx_map |= BIT(arsta->link_idx);
|
||||
|
||||
rcu_assign_pointer(ahsta->link[link_id], NULL);
|
||||
synchronize_rcu();
|
||||
|
||||
|
|
@ -7104,6 +7113,7 @@ static int ath12k_mac_assign_link_sta(struct ath12k_hw *ah,
|
|||
struct ieee80211_sta *sta = ath12k_ahsta_to_sta(ahsta);
|
||||
struct ieee80211_link_sta *link_sta;
|
||||
struct ath12k_link_vif *arvif;
|
||||
int link_idx;
|
||||
|
||||
lockdep_assert_wiphy(ah->hw->wiphy);
|
||||
|
||||
|
|
@ -7122,8 +7132,16 @@ static int ath12k_mac_assign_link_sta(struct ath12k_hw *ah,
|
|||
|
||||
ether_addr_copy(arsta->addr, link_sta->addr);
|
||||
|
||||
/* logical index of the link sta in order of creation */
|
||||
arsta->link_idx = ahsta->num_peer++;
|
||||
if (!ahsta->free_logical_link_idx_map)
|
||||
return -ENOSPC;
|
||||
|
||||
/*
|
||||
* Allocate a logical link index by selecting the first available bit
|
||||
* from the free logical index map
|
||||
*/
|
||||
link_idx = __ffs(ahsta->free_logical_link_idx_map);
|
||||
ahsta->free_logical_link_idx_map &= ~BIT(link_idx);
|
||||
arsta->link_idx = link_idx;
|
||||
|
||||
arsta->link_id = link_id;
|
||||
ahsta->links_map |= BIT(arsta->link_id);
|
||||
|
|
@ -7632,6 +7650,7 @@ int ath12k_mac_op_sta_state(struct ieee80211_hw *hw,
|
|||
if (old_state == IEEE80211_STA_NOTEXIST &&
|
||||
new_state == IEEE80211_STA_NONE) {
|
||||
memset(ahsta, 0, sizeof(*ahsta));
|
||||
ahsta->free_logical_link_idx_map = U16_MAX;
|
||||
|
||||
arsta = &ahsta->deflink;
|
||||
|
||||
|
|
|
|||
|
|
@ -405,6 +405,42 @@ ath12k_wifi7_dp_mon_hal_rx_parse_user_info(const struct hal_receive_user_info *r
|
|||
}
|
||||
}
|
||||
|
||||
static __always_inline u8
|
||||
ath12k_wifi7_hal_mon_map_legacy_rate_to_hw_rate(u8 rate)
|
||||
{
|
||||
u8 ath12k_rate;
|
||||
|
||||
/* Map hal_rx_legacy_rate to ath12k_hw_rate_cck */
|
||||
switch (rate) {
|
||||
case HAL_RX_LEGACY_RATE_LP_1_MBPS:
|
||||
ath12k_rate = ATH12K_HW_RATE_CCK_LP_1M;
|
||||
break;
|
||||
case HAL_RX_LEGACY_RATE_LP_2_MBPS:
|
||||
ath12k_rate = ATH12K_HW_RATE_CCK_LP_2M;
|
||||
break;
|
||||
case HAL_RX_LEGACY_RATE_LP_5_5_MBPS:
|
||||
ath12k_rate = ATH12K_HW_RATE_CCK_LP_5_5M;
|
||||
break;
|
||||
case HAL_RX_LEGACY_RATE_LP_11_MBPS:
|
||||
ath12k_rate = ATH12K_HW_RATE_CCK_LP_11M;
|
||||
break;
|
||||
case HAL_RX_LEGACY_RATE_SP_2_MBPS:
|
||||
ath12k_rate = ATH12K_HW_RATE_CCK_SP_2M;
|
||||
break;
|
||||
case HAL_RX_LEGACY_RATE_SP_5_5_MBPS:
|
||||
ath12k_rate = ATH12K_HW_RATE_CCK_SP_5_5M;
|
||||
break;
|
||||
case HAL_RX_LEGACY_RATE_SP_11_MBPS:
|
||||
ath12k_rate = ATH12K_HW_RATE_CCK_SP_11M;
|
||||
break;
|
||||
default:
|
||||
ath12k_rate = rate;
|
||||
break;
|
||||
}
|
||||
|
||||
return ath12k_rate;
|
||||
}
|
||||
|
||||
static void
|
||||
ath12k_wifi7_dp_mon_parse_l_sig_b(const struct hal_rx_lsig_b_info *lsigb,
|
||||
struct hal_rx_mon_ppdu_info *ppdu_info)
|
||||
|
|
@ -415,25 +451,32 @@ ath12k_wifi7_dp_mon_parse_l_sig_b(const struct hal_rx_lsig_b_info *lsigb,
|
|||
rate = u32_get_bits(info0, HAL_RX_LSIG_B_INFO_INFO0_RATE);
|
||||
switch (rate) {
|
||||
case 1:
|
||||
rate = HAL_RX_LEGACY_RATE_1_MBPS;
|
||||
rate = HAL_RX_LEGACY_RATE_LP_1_MBPS;
|
||||
break;
|
||||
case 2:
|
||||
case 5:
|
||||
rate = HAL_RX_LEGACY_RATE_2_MBPS;
|
||||
rate = HAL_RX_LEGACY_RATE_LP_2_MBPS;
|
||||
break;
|
||||
case 3:
|
||||
case 6:
|
||||
rate = HAL_RX_LEGACY_RATE_5_5_MBPS;
|
||||
rate = HAL_RX_LEGACY_RATE_LP_5_5_MBPS;
|
||||
break;
|
||||
case 4:
|
||||
rate = HAL_RX_LEGACY_RATE_LP_11_MBPS;
|
||||
break;
|
||||
case 5:
|
||||
rate = HAL_RX_LEGACY_RATE_SP_2_MBPS;
|
||||
break;
|
||||
case 6:
|
||||
rate = HAL_RX_LEGACY_RATE_SP_5_5_MBPS;
|
||||
break;
|
||||
case 7:
|
||||
rate = HAL_RX_LEGACY_RATE_11_MBPS;
|
||||
rate = HAL_RX_LEGACY_RATE_SP_11_MBPS;
|
||||
break;
|
||||
default:
|
||||
rate = HAL_RX_LEGACY_RATE_INVALID;
|
||||
break;
|
||||
}
|
||||
|
||||
ppdu_info->rate = rate;
|
||||
ppdu_info->rate = ath12k_wifi7_hal_mon_map_legacy_rate_to_hw_rate(rate);
|
||||
ppdu_info->cck_flag = 1;
|
||||
}
|
||||
|
||||
|
|
@ -447,31 +490,32 @@ ath12k_wifi7_dp_mon_parse_l_sig_a(const struct hal_rx_lsig_a_info *lsiga,
|
|||
rate = u32_get_bits(info0, HAL_RX_LSIG_A_INFO_INFO0_RATE);
|
||||
switch (rate) {
|
||||
case 8:
|
||||
rate = HAL_RX_LEGACY_RATE_48_MBPS;
|
||||
rate = HAL_RX_LEGACY_RATE_OFDM_48_MBPS;
|
||||
break;
|
||||
case 9:
|
||||
rate = HAL_RX_LEGACY_RATE_24_MBPS;
|
||||
rate = HAL_RX_LEGACY_RATE_OFDM_24_MBPS;
|
||||
break;
|
||||
case 10:
|
||||
rate = HAL_RX_LEGACY_RATE_12_MBPS;
|
||||
rate = HAL_RX_LEGACY_RATE_OFDM_12_MBPS;
|
||||
break;
|
||||
case 11:
|
||||
rate = HAL_RX_LEGACY_RATE_6_MBPS;
|
||||
rate = HAL_RX_LEGACY_RATE_OFDM_6_MBPS;
|
||||
break;
|
||||
case 12:
|
||||
rate = HAL_RX_LEGACY_RATE_54_MBPS;
|
||||
rate = HAL_RX_LEGACY_RATE_OFDM_54_MBPS;
|
||||
break;
|
||||
case 13:
|
||||
rate = HAL_RX_LEGACY_RATE_36_MBPS;
|
||||
rate = HAL_RX_LEGACY_RATE_OFDM_36_MBPS;
|
||||
break;
|
||||
case 14:
|
||||
rate = HAL_RX_LEGACY_RATE_18_MBPS;
|
||||
rate = HAL_RX_LEGACY_RATE_OFDM_18_MBPS;
|
||||
break;
|
||||
case 15:
|
||||
rate = HAL_RX_LEGACY_RATE_9_MBPS;
|
||||
rate = HAL_RX_LEGACY_RATE_OFDM_9_MBPS;
|
||||
break;
|
||||
default:
|
||||
rate = HAL_RX_LEGACY_RATE_INVALID;
|
||||
rate = HAL_RX_LEGACY_RATE_OFDM_INVALID;
|
||||
break;
|
||||
}
|
||||
|
||||
ppdu_info->rate = rate;
|
||||
|
|
|
|||
|
|
@ -10017,50 +10017,46 @@ static int ath12k_connect_pdev_htc_service(struct ath12k_base *ab,
|
|||
|
||||
static int
|
||||
ath12k_wmi_send_unit_test_cmd(struct ath12k *ar,
|
||||
struct wmi_unit_test_cmd ut_cmd,
|
||||
u32 *test_args)
|
||||
const struct wmi_unit_test_arg *ut)
|
||||
{
|
||||
struct ath12k_wmi_pdev *wmi = ar->wmi;
|
||||
struct wmi_unit_test_cmd *cmd;
|
||||
int buf_len, arg_len;
|
||||
struct sk_buff *skb;
|
||||
struct wmi_tlv *tlv;
|
||||
__le32 *ut_cmd_args;
|
||||
void *ptr;
|
||||
u32 *ut_cmd_args;
|
||||
int buf_len, arg_len;
|
||||
int ret;
|
||||
int i;
|
||||
|
||||
arg_len = sizeof(u32) * le32_to_cpu(ut_cmd.num_args);
|
||||
buf_len = sizeof(ut_cmd) + arg_len + TLV_HDR_SIZE;
|
||||
arg_len = sizeof(*ut_cmd_args) * ut->num_args;
|
||||
buf_len = sizeof(*cmd) + arg_len + TLV_HDR_SIZE;
|
||||
|
||||
skb = ath12k_wmi_alloc_skb(wmi->wmi_ab, buf_len);
|
||||
if (!skb)
|
||||
return -ENOMEM;
|
||||
|
||||
cmd = (struct wmi_unit_test_cmd *)skb->data;
|
||||
ptr = skb->data;
|
||||
cmd = ptr;
|
||||
cmd->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_UNIT_TEST_CMD,
|
||||
sizeof(ut_cmd));
|
||||
|
||||
cmd->vdev_id = ut_cmd.vdev_id;
|
||||
cmd->module_id = ut_cmd.module_id;
|
||||
cmd->num_args = ut_cmd.num_args;
|
||||
cmd->diag_token = ut_cmd.diag_token;
|
||||
|
||||
ptr = skb->data + sizeof(ut_cmd);
|
||||
sizeof(*cmd));
|
||||
cmd->vdev_id = cpu_to_le32(ut->vdev_id);
|
||||
cmd->module_id = cpu_to_le32(ut->module_id);
|
||||
cmd->num_args = cpu_to_le32(ut->num_args);
|
||||
cmd->diag_token = cpu_to_le32(ut->diag_token);
|
||||
|
||||
ptr += sizeof(*cmd);
|
||||
tlv = ptr;
|
||||
tlv->header = ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_UINT32, arg_len);
|
||||
|
||||
ptr += TLV_HDR_SIZE;
|
||||
|
||||
ut_cmd_args = ptr;
|
||||
for (i = 0; i < le32_to_cpu(ut_cmd.num_args); i++)
|
||||
ut_cmd_args[i] = test_args[i];
|
||||
for (i = 0; i < ut->num_args; i++)
|
||||
ut_cmd_args[i] = cpu_to_le32(ut->args[i]);
|
||||
|
||||
ath12k_dbg(ar->ab, ATH12K_DBG_WMI,
|
||||
"WMI unit test : module %d vdev %d n_args %d token %d\n",
|
||||
cmd->module_id, cmd->vdev_id, cmd->num_args,
|
||||
cmd->diag_token);
|
||||
ut->module_id, ut->vdev_id, ut->num_args, ut->diag_token);
|
||||
|
||||
ret = ath12k_wmi_cmd_send(wmi, skb, WMI_UNIT_TEST_CMDID);
|
||||
|
||||
|
|
@ -10076,8 +10072,7 @@ ath12k_wmi_send_unit_test_cmd(struct ath12k *ar,
|
|||
int ath12k_wmi_simulate_radar(struct ath12k *ar)
|
||||
{
|
||||
struct ath12k_link_vif *arvif;
|
||||
u32 dfs_args[DFS_MAX_TEST_ARGS];
|
||||
struct wmi_unit_test_cmd wmi_ut;
|
||||
struct wmi_unit_test_arg wmi_ut = {};
|
||||
bool arvif_found = false;
|
||||
|
||||
list_for_each_entry(arvif, &ar->arvifs, list) {
|
||||
|
|
@ -10090,22 +10085,23 @@ int ath12k_wmi_simulate_radar(struct ath12k *ar)
|
|||
if (!arvif_found)
|
||||
return -EINVAL;
|
||||
|
||||
dfs_args[DFS_TEST_CMDID] = 0;
|
||||
dfs_args[DFS_TEST_PDEV_ID] = ar->pdev->pdev_id;
|
||||
/* Currently we could pass segment_id(b0 - b1), chirp(b2)
|
||||
wmi_ut.args[DFS_TEST_CMDID] = 0;
|
||||
wmi_ut.args[DFS_TEST_PDEV_ID] = ar->pdev->pdev_id;
|
||||
/*
|
||||
* Currently we could pass segment_id(b0 - b1), chirp(b2)
|
||||
* freq offset (b3 - b10) to unit test. For simulation
|
||||
* purpose this can be set to 0 which is valid.
|
||||
*/
|
||||
dfs_args[DFS_TEST_RADAR_PARAM] = 0;
|
||||
wmi_ut.args[DFS_TEST_RADAR_PARAM] = 0;
|
||||
|
||||
wmi_ut.vdev_id = cpu_to_le32(arvif->vdev_id);
|
||||
wmi_ut.module_id = cpu_to_le32(DFS_UNIT_TEST_MODULE);
|
||||
wmi_ut.num_args = cpu_to_le32(DFS_MAX_TEST_ARGS);
|
||||
wmi_ut.diag_token = cpu_to_le32(DFS_UNIT_TEST_TOKEN);
|
||||
wmi_ut.vdev_id = arvif->vdev_id;
|
||||
wmi_ut.module_id = DFS_UNIT_TEST_MODULE;
|
||||
wmi_ut.num_args = DFS_MAX_TEST_ARGS;
|
||||
wmi_ut.diag_token = DFS_UNIT_TEST_TOKEN;
|
||||
|
||||
ath12k_dbg(ar->ab, ATH12K_DBG_REG, "Triggering Radar Simulation\n");
|
||||
|
||||
return ath12k_wmi_send_unit_test_cmd(ar, wmi_ut, dfs_args);
|
||||
return ath12k_wmi_send_unit_test_cmd(ar, &wmi_ut);
|
||||
}
|
||||
|
||||
int ath12k_wmi_send_tpc_stats_request(struct ath12k *ar,
|
||||
|
|
|
|||
|
|
@ -4193,7 +4193,6 @@ struct wmi_addba_clear_resp_cmd {
|
|||
struct ath12k_wmi_mac_addr_params peer_macaddr;
|
||||
} __packed;
|
||||
|
||||
#define DFS_PHYERR_UNIT_TEST_CMD 0
|
||||
#define DFS_UNIT_TEST_MODULE 0x2b
|
||||
#define DFS_UNIT_TEST_TOKEN 0xAA
|
||||
|
||||
|
|
@ -4204,10 +4203,15 @@ enum dfs_test_args_idx {
|
|||
DFS_MAX_TEST_ARGS,
|
||||
};
|
||||
|
||||
struct wmi_dfs_unit_test_arg {
|
||||
u32 cmd_id;
|
||||
u32 pdev_id;
|
||||
u32 radar_param;
|
||||
/* update if another test command requires more */
|
||||
#define WMI_UNIT_TEST_ARGS_MAX DFS_MAX_TEST_ARGS
|
||||
|
||||
struct wmi_unit_test_arg {
|
||||
u32 vdev_id;
|
||||
u32 module_id;
|
||||
u32 diag_token;
|
||||
u32 num_args;
|
||||
u32 args[WMI_UNIT_TEST_ARGS_MAX];
|
||||
};
|
||||
|
||||
struct wmi_unit_test_cmd {
|
||||
|
|
|
|||
|
|
@ -1124,8 +1124,6 @@ static int ath6kl_usb_probe(struct usb_interface *interface,
|
|||
int vendor_id, product_id;
|
||||
int ret = 0;
|
||||
|
||||
usb_get_dev(dev);
|
||||
|
||||
vendor_id = le16_to_cpu(dev->descriptor.idVendor);
|
||||
product_id = le16_to_cpu(dev->descriptor.idProduct);
|
||||
|
||||
|
|
@ -1143,11 +1141,8 @@ static int ath6kl_usb_probe(struct usb_interface *interface,
|
|||
ath6kl_dbg(ATH6KL_DBG_USB, "USB 1.1 Host\n");
|
||||
|
||||
ar_usb = ath6kl_usb_create(interface);
|
||||
|
||||
if (ar_usb == NULL) {
|
||||
ret = -ENOMEM;
|
||||
goto err_usb_put;
|
||||
}
|
||||
if (ar_usb == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
ar = ath6kl_core_create(&ar_usb->udev->dev);
|
||||
if (ar == NULL) {
|
||||
|
|
@ -1176,15 +1171,12 @@ static int ath6kl_usb_probe(struct usb_interface *interface,
|
|||
ath6kl_core_destroy(ar);
|
||||
err_usb_destroy:
|
||||
ath6kl_usb_destroy(ar_usb);
|
||||
err_usb_put:
|
||||
usb_put_dev(dev);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void ath6kl_usb_remove(struct usb_interface *interface)
|
||||
static void ath6kl_usb_disconnect(struct usb_interface *interface)
|
||||
{
|
||||
usb_put_dev(interface_to_usbdev(interface));
|
||||
ath6kl_usb_device_detached(interface);
|
||||
}
|
||||
|
||||
|
|
@ -1235,7 +1227,7 @@ static struct usb_driver ath6kl_usb_driver = {
|
|||
.probe = ath6kl_usb_probe,
|
||||
.suspend = ath6kl_usb_pm_suspend,
|
||||
.resume = ath6kl_usb_pm_resume,
|
||||
.disconnect = ath6kl_usb_remove,
|
||||
.disconnect = ath6kl_usb_disconnect,
|
||||
.id_table = ath6kl_usb_ids,
|
||||
.supports_autosuspend = true,
|
||||
.disable_hub_initiated_lpm = 1,
|
||||
|
|
|
|||
|
|
@ -1630,16 +1630,6 @@ enum wmi_roam_mode {
|
|||
WMI_LOCK_BSS_MODE = 3, /* Lock to the current BSS */
|
||||
};
|
||||
|
||||
struct bss_bias {
|
||||
u8 bssid[ETH_ALEN];
|
||||
s8 bias;
|
||||
} __packed;
|
||||
|
||||
struct bss_bias_info {
|
||||
u8 num_bss;
|
||||
struct bss_bias bss_bias[];
|
||||
} __packed;
|
||||
|
||||
struct low_rssi_scan_params {
|
||||
__le16 lrssi_scan_period;
|
||||
a_sle16 lrssi_scan_threshold;
|
||||
|
|
@ -1652,7 +1642,6 @@ struct roam_ctrl_cmd {
|
|||
union {
|
||||
u8 bssid[ETH_ALEN]; /* WMI_FORCE_ROAM */
|
||||
u8 roam_mode; /* WMI_SET_ROAM_MODE */
|
||||
struct bss_bias_info bss; /* WMI_SET_HOST_BIAS */
|
||||
struct low_rssi_scan_params params; /* WMI_SET_LRSSI_SCAN_PARAMS
|
||||
*/
|
||||
} __packed info;
|
||||
|
|
|
|||
|
|
@ -1382,8 +1382,6 @@ static int ath9k_hif_usb_probe(struct usb_interface *interface,
|
|||
goto err_alloc;
|
||||
}
|
||||
|
||||
usb_get_dev(udev);
|
||||
|
||||
hif_dev->udev = udev;
|
||||
hif_dev->interface = interface;
|
||||
hif_dev->usb_device_id = id;
|
||||
|
|
@ -1403,7 +1401,6 @@ static int ath9k_hif_usb_probe(struct usb_interface *interface,
|
|||
err_fw_req:
|
||||
usb_set_intfdata(interface, NULL);
|
||||
kfree(hif_dev);
|
||||
usb_put_dev(udev);
|
||||
err_alloc:
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -1451,7 +1448,6 @@ static void ath9k_hif_usb_disconnect(struct usb_interface *interface)
|
|||
|
||||
kfree(hif_dev);
|
||||
dev_info(&udev->dev, "ath9k_htc: USB layer deinitialized\n");
|
||||
usb_put_dev(udev);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user