ieee80211_tx_status_irqsafe(hw, skb);
}
+static void ieee80211_hwsim_wake_tx_queue(struct ieee80211_hw *hw,
+ struct ieee80211_txq *txq)
+{
+ struct ieee80211_tx_control control = {
+ .sta = txq->sta,
+ };
+ struct sk_buff *skb;
+
+ while ((skb = ieee80211_tx_dequeue(hw, txq)))
+ mac80211_hwsim_tx(hw, &control, skb);
+}
static int mac80211_hwsim_start(struct ieee80211_hw *hw)
{
goto nla_put_failure;
return cfg80211_testmode_reply(skb);
case HWSIM_TM_CMD_STOP_QUEUES:
- ieee80211_stop_queues(hw);
- return 0;
case HWSIM_TM_CMD_WAKE_QUEUES:
- ieee80211_wake_queues(hw);
- return 0;
default:
return -EOPNOTSUPP;
}
#define HWSIM_COMMON_OPS \
.tx = mac80211_hwsim_tx, \
- .wake_tx_queue = ieee80211_handle_wake_tx_queue, \
+ .wake_tx_queue = ieee80211_hwsim_wake_tx_queue, \
.start = mac80211_hwsim_start, \
.stop = mac80211_hwsim_stop, \
.add_interface = mac80211_hwsim_add_interface, \
ieee80211_hw_set(hw, TDLS_WIDER_BW);
ieee80211_hw_set(hw, SUPPORTS_MULTI_BSSID);
ieee80211_hw_set(hw, STRICT);
+ ieee80211_hw_set(hw, BUFF_MMPDU_TXQ);
+ ieee80211_hw_set(hw, STA_MMPDU_TXQ);
if (param->mlo) {
hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_MLO;
hw->vif_data_size = sizeof(struct hwsim_vif_priv);
hw->sta_data_size = sizeof(struct hwsim_sta_priv);
hw->chanctx_data_size = sizeof(struct hwsim_chanctx_priv);
+ hw->txq_data_size = 0;
memcpy(data->channels_2ghz, hwsim_channels_2ghz,
sizeof(hwsim_channels_2ghz));